cyber:vulnerabilite:cross_site_request_forgery
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
cyber:vulnerabilite:cross_site_request_forgery [2025/07/03 12:07] – admin | cyber:vulnerabilite:cross_site_request_forgery [2025/07/03 12:23] (Version actuelle) – [CWEs] admin | ||
---|---|---|---|
Ligne 20: | Ligne 20: | ||
</ | </ | ||
</ | </ | ||
- | < | + | |
- | < | + | Exemple de charge utilisée pour forcer le changement de mot de passe sur **exemple.ex**. |
- | Exemple de charge utilisée pour forcer le changement de mot de passe sur **exemple.ex**. | + | |
- | </ | + | |
- | </ | + | |
Si l' | Si l' | ||
Ligne 32: | Ligne 30: | ||
Aujourd' | Aujourd' | ||
- | {{{Pré-requis d’exploitation}}} | + | ===== Pré-requis d’exploitation |
Pour mettre en œuvre cette attaque, il est nécessaire d' | Pour mettre en œuvre cette attaque, il est nécessaire d' | ||
- | <h4>Compétences nécessaires</h4> | + | ==== Compétences nécessaires |
- | -* Connaissances de base du protocole HTTP ; | + | * Connaissances de base du protocole HTTP ; |
- | -* Notions sur les langages JavaScript et HTML. | + | * Notions sur les langages JavaScript et HTML. |
- | <h4>Outils nécessaires</ | + | ==== Outils nécessaires |
- | -* Accès à une console de navigateur ou à un outil de modification et/ou d’interception de requêtes comme BurpSuite. | + | |
- | {{{Flux d’exécution}}} | + | * Accès à une console de navigateur ou à un outil de modification et/ou d’interception de requêtes comme **Burp Suite**. |
+ | |||
+ | ===== Flux d’exécution | ||
+ | |||
+ | ==== Explorer ==== | ||
- | < | ||
La détection d'un CSRF est assez simple, il suffit de parcourir les pages de l' | La détection d'un CSRF est assez simple, il suffit de parcourir les pages de l' | ||
- | -* {{Une action exploitable :}} l' | + | * **Une action exploitable :** l' |
- | -* {{L' | + | * **L' |
- | -* {{Le formulaire ne contient que des paramètres prédictibles :}} le formulaire ne doit pas envoyer de jeton particulier ou d' | + | * **Le formulaire ne contient que des paramètres prédictibles :** le formulaire ne doit pas envoyer de jeton particulier ou d' |
+ | |||
+ | ==== Expérimenter ==== | ||
- | < | ||
Si l'on trouve une fonctionnalité qui respecte les trois points de l' | Si l'on trouve une fonctionnalité qui respecte les trois points de l' | ||
- | -* Créer le code HTML / JavaScript qui permet d' | + | |
- | -* Mettre en place le code sur un serveur accessible par la victime. En CTF, on peut utiliser des services Web publics tels que [Beeceptor-> | + | * Mettre en place le code sur un serveur accessible par la victime. En CTF, on peut utiliser des services Web publics tels que [[https:// |
- | -* Avec le compte de la victime authentifiée sur l' | + | * Avec le compte de la victime authentifiée sur l' |
- | -* Si après avoir navigué sur la page, l' | + | * Si après avoir navigué sur la page, l' |
- | <quote> | + | <WRAP center round info> |
- | {Pro-tips} : pour utiliser deux comptes authentifiés sur la même application, | + | **Pro-tips** : pour utiliser deux comptes authentifiés sur la même application, |
- | </quote> | + | </WRAP> |
- | <h4>Exploiter</ | + | ==== Exploiter |
- | Consulter les solutions de chaque challenge. | + | |
+ | ===== Conséquences potentielles ===== | ||
- | {{{Conséquences potentielles}}} | ||
Les conséquences potentielles de ce type d’attaque dépendent grandement de la nature de l’application ciblée. Par exemple, dans le cas d’une application bancaire vulnérable, | Les conséquences potentielles de ce type d’attaque dépendent grandement de la nature de l’application ciblée. Par exemple, dans le cas d’une application bancaire vulnérable, | ||
- | -* D’usurper un compte utilisateur (par exemple en exploitant un formulaire de changement de mot de passe ou d' | + | |
- | -* De modifier les informations de compte (telles que les adresses de contact ou encore les informations personnelles) ; | + | * De modifier les informations de compte (telles que les adresses de contact ou encore les informations personnelles) ; |
- | -* De déclencher des transactions financières (comme des achats ou des paiements) sans le consentement de l’utilisateur ; | + | * De déclencher des transactions financières (comme des achats ou des paiements) sans le consentement de l’utilisateur ; |
- | -* D’ajouter des bénéficiaires ou des comptes tiers pour les transactions financières. | + | * D’ajouter des bénéficiaires ou des comptes tiers pour les transactions financières. |
+ | |||
+ | ===== Contres-mesures ===== | ||
- | {{{Contres-mesures}}} | ||
Les contre-mesures suivantes peuvent être mises en œuvre : | Les contre-mesures suivantes peuvent être mises en œuvre : | ||
- | -* {{Utiliser des jetons cryptographiques pour associer une demande à une action spécifique.}} Le jeton peut être régénéré à chaque demande, de sorte que si une demande avec un jeton invalide est reçue par le serveur, elle peut être écartée de manière fiable. Le jeton est considéré comme invalide s’il est arrivé avec une demande autre que l’action à laquelle il était censé être associé. | + | * **Utiliser des jetons cryptographiques pour associer une demande à une action spécifique.** Le jeton peut être régénéré à chaque demande, de sorte que si une demande avec un jeton invalide est reçue par le serveur, elle peut être écartée de manière fiable. Le jeton est considéré comme invalide s’il est arrivé avec une demande autre que l’action à laquelle il était censé être associé. |
- | -* {{Utiliser un second facteur d’authentification.}} L’utilisateur peut être invité à confirmer une action chaque fois qu’une action concernant des données potentiellement sensibles est invoquée. De cette façon, même si l’attaquant parvient à faire en sorte que l’utilisateur clique sur un lien malveillant et demande l’action souhaitée, l’utilisateur peut encore refuser la confirmation et ainsi être averti que son compte a potentiellement été compromis. | + | * **Utiliser un second facteur d’authentification.** L’utilisateur peut être invité à confirmer une action chaque fois qu’une action concernant des données potentiellement sensibles est invoquée. De cette façon, même si l’attaquant parvient à faire en sorte que l’utilisateur clique sur un lien malveillant et demande l’action souhaitée, l’utilisateur peut encore refuser la confirmation et ainsi être averti que son compte a potentiellement été compromis. |
- | -* {{Mettre en place l' | + | * **Mettre en place l' |
+ | |||
+ | ====== Comment cela fonctionne ? ====== | ||
+ | ===== Exemple 1 ===== | ||
+ | |||
+ | |||
+ | Le formulaire HTML ci-dessous permet à un utilisateur légitime de modifier l' | ||
+ | <code html> | ||
+ | <form action="/ | ||
+ | <input type=" | ||
+ | <button type=" | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | La requête envoyée via ce formulaire se présente comme ceci : | ||
+ | <code HTTP> | ||
+ | POST / | ||
+ | Host: example.ex | ||
+ | Cookie: session=JV1WLK4mrRS3o4zX64NOS2fmADrFKIgo | ||
+ | |||
+ | email=new-email@root-me.org | ||
+ | </ | ||
+ | |||
+ | À la réception de cette requête, le serveur modifie l' | ||
+ | |||
+ | <code html> | ||
+ | <form id=" | ||
+ | <input type=" | ||
+ | <button type=" | ||
+ | </ | ||
+ | < | ||
+ | document.getElementById(' | ||
+ | </ | ||
+ | </ | ||
+ | <WRAP center round important> | ||
+ | **Attention** : le formulaire d' | ||
+ | </ | ||
+ | |||
+ | |||
+ | Le JavaScript permet d' | ||
+ | |||
+ | Notre attaque est prête à être exploitée. On transmet à la victime l'URL contenant la charge ci-dessus et on patiente jusqu' | ||
+ | |||
+ | |||
+ | ===== Exemple 2 ===== | ||
+ | |||
+ | Dans ce nouvel exemple, le formulaire est protégé par un jeton cryptographique. Ce jeton est créé par le serveur à la réception d'une requête vers < | ||
+ | |||
+ | <code HTML> | ||
+ | <form action="/ | ||
+ | <input type=" | ||
+ | <input type=" | ||
+ | <button type=" | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | Un utilisateur légitime voulant modifier son email, va renvoyer le même jeton que celui transmis par le serveur. Ce-dernier va pouvoir faire la liaison entre la première requête vers < | ||
+ | |||
+ | <code HTTP> | ||
+ | POST / | ||
+ | Host: example.ex | ||
+ | Cookie: session=JV1WLK4mrRS3o4zX64NOS2fmADrFKIgo | ||
+ | |||
+ | csrf-token=4db830b9ca7301988ed14e3ed04a47c1& | ||
+ | </ | ||
+ | |||
+ | Il existe malgré tout des techniques pour contourner ce jeton. Imaginons que ce dernier n'est pas lié à un utilisateur, | ||
+ | |||
+ | Un attaquant peut alors générer un jeton valide au préalable de son exploitation et le placer comme valeur dans sa charge malveillante : | ||
+ | |||
+ | <code HTML> | ||
+ | <form id=" | ||
+ | <input type=" | ||
+ | <input type=" | ||
+ | <button type=" | ||
+ | </ | ||
+ | < | ||
+ | document.getElementById(' | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | Les jetons étant communs à tous les utilisateurs, | ||
+ | |||
+ | **Pour que la vérification par jeton CSRF soit efficace, il est important que celui-ci soit généré de manière aléatoire, unique pour chaque utilisateur et être associé à une durée de validité limitée.** | ||
+ | |||
+ | ====== CWEs ====== | ||
+ | |||
+ | * [[https:// | ||
+ | The web application does not, or can not, sufficiently verify whether a well-formed, | ||
+ | |||
+ | * [[https:// | ||
+ | The software does not perform any authentication for functionality that requires a provable user identity or consumes a significant amount of resources. | ||
+ | |||
+ | * [[https:// | ||
+ | The software does not maintain or incorrectly maintains control over a resource throughout its lifetime of creation, use, and release. | ||
+ | |||
+ | * [[https:// | ||
+ | The product specifies permissions for a security-critical resource in a way that allows that resource to be read or modified by unintended actors. | ||
+ | |||
+ | * [[https:// | ||
+ | The SameSite attribute for sensitive cookies is not set, or an insecure value is used. | ||
+ | |||
+ | ====== References ====== | ||
+ | URL : | ||
+ | * https:// | ||
+ | * https:// | ||
+ | * https:// | ||
====== Retour fiches vulnérabilités ====== | ====== Retour fiches vulnérabilités ====== | ||
* [[cyber: | * [[cyber: | ||
cyber/vulnerabilite/cross_site_request_forgery.1751537264.txt.gz · Dernière modification : 2025/07/03 12:07 de admin