{"id":1708,"date":"2022-06-28T12:03:06","date_gmt":"2022-06-28T10:03:06","guid":{"rendered":"http:\/\/v32019.vaadata.com\/blog?p=1708"},"modified":"2022-12-12T11:18:30","modified_gmt":"2022-12-12T10:18:30","slug":"attaques-csrf-principes-impacts-exploitations-bonnes-pratiques-securite","status":"publish","type":"post","link":"https:\/\/www.vaadata.com\/blog\/fr\/attaques-csrf-principes-impacts-exploitations-bonnes-pratiques-securite\/","title":{"rendered":"Attaques CSRF : principes, impacts, exploitations et bonnes pratiques s\u00e9curit\u00e9"},"content":{"rendered":"<div class=\"wp-block-image\">\n<figure class=\"alignright size-medium\"><img decoding=\"async\" width=\"300\" height=\"157\" src=\"https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2022\/06\/CSRF_principes-300x157.png\" alt=\"Attaques CSRF : principes, impacts, exploitations et bonnes pratiques s\u00e9curit\u00e9 \" class=\"wp-image-5346\" srcset=\"https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2022\/06\/CSRF_principes-300x157.png 300w, https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2022\/06\/CSRF_principes-1024x535.png 1024w, https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2022\/06\/CSRF_principes.png 1200w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/figure>\n<\/div>\n\n\n<p>Les <strong>attaques CSRF<\/strong> sont souvent utilis\u00e9es pour compromettre les donn\u00e9es et fonctionnalit\u00e9s d\u2019une application web.<\/p>\n\n\n\n<p>Principes, impacts, exploitations possibles, nous vous pr\u00e9sentons dans cet article une vue d\u2019ensemble de la <strong>vuln\u00e9rabilit\u00e9 CSRF<\/strong> ainsi que les bonnes pratiques et mesures \u00e0 impl\u00e9menter pour pr\u00e9venir les risques d\u2019attaques.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\">Qu&rsquo;est-ce qu&rsquo;une vuln\u00e9rabilit\u00e9 CSRF ? <\/h2>\n\n\n\n<p>Une vuln\u00e9rabilit\u00e9 CSRF (pour <strong>Cross-Site Request Forgery<\/strong>, en fran\u00e7ais&nbsp;: falsification de requ\u00eate inter-site) est une faille qui permet \u00e0 un attaquant d\u2019abuser \u00e0 la fois d\u2019un utilisateur, d\u2019un navigateur web et d\u2019un serveur. Le principe est assez simple. L\u2019objectif de l\u2019attaque est de forcer un utilisateur authentifi\u00e9 sur un site ou une application web \u00e0 ex\u00e9cuter des actions sp\u00e9cifiques \u00e0 son insu.<\/p>\n\n\n\n<p>Pour ce faire, il s\u2019agit de corrompre la relation entre un navigateur web et un serveur, con\u00e7ue en th\u00e9orie, pour emp\u00eacher diff\u00e9rents sites et applications web d\u2019interf\u00e9rer les uns avec les autres. Lors d\u2019une attaque r\u00e9ussie, une faille CSRF peut permettre \u00e0 un attaquant de forcer le changement d\u2019un mot de passe et\/ou autres informations personnelles et ainsi r\u00e9cup\u00e9rer des donn\u00e9es sensibles si la victime est un utilisateur avec des droits standards. Si la victime d\u00e9tient un compte administrateur, une attaque CSRF peut compromettre l\u2019ensemble de l\u2019application web. <\/p>\n\n\n\n<p>De mani\u00e8re g\u00e9n\u00e9rale, lorsqu\u2019une fonctionnalit\u00e9 est vuln\u00e9rable aux attaques CSRF, les attaquants cherchent \u00e0 pousser les utilisateurs \u00e0 charger une page malveillante.<\/p>\n\n\n\n<p>Cette page contenant du code malveillant enverra des requ\u00eates via le navigateur d\u2019un utilisateur comme s\u2019il s\u2019agissait d\u2019une action l\u00e9gitime de ce dernier, ce qui permet \u00e0 l\u2019attaquant de r\u00e9aliser des actions telles que la modification du mot de passe et\/ou d\u2019autres informations personnelles ou le changement des configurations et des param\u00e8tres personnels de l\u2019utilisateur sur la plateforme vuln\u00e9rable.<\/p>\n\n\n\n<p>L\u2019impact d\u2019une attaque CSRF r\u00e9ussie peut donc \u00eatre assez s\u00e9v\u00e8re. Les attaquants s\u2019appuient souvent sur des <a href=\"https:\/\/www.vaadata.com\/blog\/fr\/comment-sensibiliser-vos-collaborateurs-pour-contrer-les-attaques-dingenierie-sociale\/\" target=\"_blank\" rel=\"noreferrer noopener\">techniques d\u2019ing\u00e9nierie sociale<\/a> (via du phishing g\u00e9n\u00e9ralement avec l\u2019envoi d\u2019un lien par email par exemple dont l\u2019objectif est de rediriger un utilisateur vers un site malveillant) pour en augmenter les chances de succ\u00e8s.<\/p>\n\n\n\n<p>Enfin, une derni\u00e8re pr\u00e9cision&nbsp;: les attaques CSRF visent g\u00e9n\u00e9ralement les demandes de modification (mot de passe et autres) et non le vol de donn\u00e9es, car les attaquants n\u2019ont aucun moyen de voir la r\u00e9ponse \u00e0 la demande falsifi\u00e9e.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Quelles sont les conditions n\u00e9cessaires \u00e0 une attaque CSRF ?<\/h2>\n\n\n\n<p>Pour mener \u00e0 bien une attaque CSRF, certaines conditions doivent \u00eatre remplies&nbsp;:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>L\u2019 authentification doit \u00eatre bas\u00e9e uniquement sur les cookies<\/strong>. Le d\u00e9clenchement de l\u2019attaque implique une ou plusieurs requ\u00eates HTTP et l\u2019application s\u2019appuie seulement sur les cookies pour permettre l\u2019authentification de l\u2019utilisateur.<\/li><li><strong>Tous les param\u00e8tres de requ\u00eate doivent \u00eatre pr\u00e9visibles.<\/strong> Les requ\u00eates contiennent des param\u00e8tres dont l\u2019attaquant peut d\u00e9terminer ou deviner les valeurs.<\/li><li><strong>L\u2019application cible doit contenir une fonctionnalit\u00e9 int\u00e9ressante et\/ou critique pour un attaquant<\/strong>. Plusieurs cas possibles&nbsp;: des fonctionnalit\u00e9s li\u00e9es \u00e0 des niveaux de droits \u00e9lev\u00e9s, des actions qui modifieront des donn\u00e9es sp\u00e9cifi\u00e9es par l\u2019utilisateur, etc.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Comment se prot\u00e9ger contre les attaques CSRF ?<\/h2>\n\n\n\n<p>Les attaques CSRF sont relativement simples \u00e0 contrer. Pour ce faire, deux mesures de s\u00e9curit\u00e9 peuvent \u00eatre mises en \u0153uvre&nbsp;: impl\u00e9menter des jetons CSRF ou utiliser l\u2019attribut SameSite sur les cookies.<\/p>\n\n\n\n<h3 class=\"has-text-color wp-block-heading\" style=\"color:#c0b800\">Impl\u00e9menter des jetons CSRF pour pr\u00e9venir les attaques<\/h3>\n\n\n\n<p>Pour se prot\u00e9ger contre les attaques CSRF, une mesure de s\u00e9curit\u00e9 courante consiste en l\u2019impl\u00e9mentation de jetons CSRF.<\/p>\n\n\n\n<p>Les jetons CSRF sont des valeurs uniques g\u00e9n\u00e9r\u00e9es al\u00e9atoirement c\u00f4t\u00e9 serveur et envoy\u00e9es au client. Ces valeurs \u00e9tant uniques pour chaque requ\u00eate, elles permettent de renforcer la s\u00e9curit\u00e9 d\u2019une application en rendant difficile (voire impossible) pour un attaquant de les deviner et donc d\u2019exploiter une vuln\u00e9rabilit\u00e9 CSRF.<\/p>\n\n\n\n<p>Par ailleurs, certains frameworks, tels que Django (Python) et Laravel (PHP), int\u00e8grent des middlewares activ\u00e9s par d\u00e9faut assurant une protection contre les attaques CSRF.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"535\" src=\"https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2022\/06\/jeton-CSRF-1024x535.png\" alt=\"jeton CSRF\" class=\"wp-image-4712\" srcset=\"https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2022\/06\/jeton-CSRF-1024x535.png 1024w, https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2022\/06\/jeton-CSRF-300x157.png 300w, https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2022\/06\/jeton-CSRF-1536x803.png 1536w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h3 class=\"has-text-color wp-block-heading\" style=\"color:#c0b800\">Utiliser l&rsquo;attribut SameSite sur les cookies pour contrer les attaques CSRF<\/h3>\n\n\n\n<p>SameSite est un attribut qu\u2019une application peut ins\u00e9rer sur les cookies. En effet, lorsque cet attribut est plac\u00e9 sur les cookies de sessions, ceux-ci ne seront pas envoy\u00e9s au serveur si la requ\u00eate ne provient pas du domaine de l\u2019application.<\/p>\n\n\n\n<p>L\u2019application recevant la requ\u00eate ne sera pas capable de relier la requ\u00eate \u00e0 un quelconque utilisateur et par cons\u00e9quent ne la traitera pas. Cela permet donc en th\u00e9orie de se prot\u00e9ger totalement contre les attaques CSRF.<\/p>\n\n\n\n<p>En revanche, l\u2019attribut SameSite ne prend pas en compte les sous-domaines. Ainsi, un utilisateur ayant le contr\u00f4le d\u2019un sous domaine, pourra compromettre l\u2019application via une attaque CSRF. Par exemple, il serait possible d\u2019attaquer la plateforme \u00ab vaadata.com \u00bb \u00e0 partir du sous domaine \u00ab&nbsp;evil.vaadata.com&nbsp;\u00bb. &nbsp;<\/p>\n\n\n\n<p>Pour \u00e9viter cette faille de s\u00e9curit\u00e9, une <a href=\"https:\/\/publicsuffix.org\/list\/public_suffix_list.dat\" target=\"_blank\" rel=\"noreferrer noopener\">liste des suffixes publics a \u00e9t\u00e9 cr\u00e9\u00e9e pour que les navigateurs modifient leur comportement de validation SameSite<\/a>.<\/p>\n\n\n\n<p>Regardons de plus pr\u00e8s le fonctionnement de l\u2019attribut SameSite&nbsp;: &nbsp;<\/p>\n\n\n\n<p>L\u2019application demande au navigateur de l\u2019utilisateur de cr\u00e9er des cookies via un en-t\u00eate Set-Cookie. Par exemple, si nous avons affaire \u00e0 une application PHP\/Laravel, il est tr\u00e8s probable que nous ayons une valeur d\u2019en-t\u00eate similaire \u00e0 celle-ci&nbsp;:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Set-Cookie: PHPSESSID=VxTGA2T1T0kE<\/code><\/pre>\n\n\n\n<p>L\u2019en-t\u00eate Set-Cookie autorise plusieurs indicateurs afin d\u2019am\u00e9liorer la s\u00e9curit\u00e9 des cookies de l\u2019utilisateur&nbsp;: SameSite, Expires, Domain, etc.<\/p>\n\n\n\n<p>SameSite peut \u00eatre utilis\u00e9 avec diff\u00e9rentes valeurs&nbsp;: Strict et Lax. Lorsque l\u2019attribut SameSite est d\u00e9fini sur \u00ab\u00a0Strict\u00a0\u00bb (SameSite=Strict), cela signifie que le navigateur de l\u2019utilisateur n\u2019enverra jamais de cookies avec les requ\u00eates inter-sites. Le cookie n\u2019est transmis que pour les demandes provenant du m\u00eame domaine et sous-domaines.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Set-Cookie: PHPSESSID=VxTGA2T1T0kE; Max-Age=43200; Secure; HttpOnly; SameSite=Strict <\/code><\/pre>\n\n\n\n<p>Si l\u2019attribut \u00ab\u00a0Lax\u00a0\u00bb est d\u00e9fini (SameSite=Lax), le navigateur du client recevra l\u2019instruction d\u2019envoyer des cookies uniquement sur les requ\u00eates GET qui peuvent provoquer une navigation entre domaines de premier niveau. Cette configuration garantit que les clients auront toujours acc\u00e8s aux ressources de votre site web si l\u2019interaction inter-site est voulue.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Set-Cookie: PHPSESSID=VxTGA2T1T0kE; Max-Age=43200; Secure; HttpOnly; SameSite=Lax <\/code><\/pre>\n\n\n\n<p>La d\u00e9finition explicite des attributs pour les cookies SameSite am\u00e9liore la s\u00e9curit\u00e9 contre les attaques CSRF, d\u00e8s lors qu\u2019elle emp\u00eache le navigateur d\u2019envoyer des requ\u00eates intersites incluant des cookies de session. Pour plus d\u2019informations sur le principe et l\u2019impl\u00e9mentation de l\u2019attribut Samesite, vous pouvez consulter notre article d\u00e9di\u00e9&nbsp;: <a href=\"https:\/\/www.vaadata.com\/blog\/fr\/se-proteger-des-attaques-csrf-avec-instruction-samesite-sur-les-cookies\/\" target=\"_blank\" rel=\"noreferrer noopener\">Se prot\u00e9ger des attaques CSRF avec l\u2019instruction SameSite sur les cookies<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Comment les navigateurs modernes contrent les attaques CSRF ?<\/h2>\n\n\n\n<p>Les premi\u00e8res attaques CSRF ont \u00e9t\u00e9 observ\u00e9es d\u00e8s 2000. \u00c0 l\u2019\u00e9poque, les mesures de protection \u00e9taient encore rudimentaires. Depuis, la donne a chang\u00e9.<\/p>\n\n\n\n<p>Les principaux navigateurs tels que Mozilla Firefox et Google Chrome ont impl\u00e9ment\u00e9 des mesures anti-CSRF d\u00e9but 2020. En effet, ils fixent l\u2019attribut par d\u00e9faut des cookies pour \u00ab\u00a0SameSite=Lax\u00a0\u00bb chaque fois qu\u2019il n\u2019est pas d\u00e9fini par une application ou un site web. Cette mesure a consid\u00e9rablement r\u00e9duit le nombre d\u2019attaques de type CSRF. Par ailleurs, c\u2019est l\u2019une des raisons pour lesquelles les failles CSRF ne figurent plus dans le Top Ten de l\u2019OWASP.<\/p>\n\n\n\n<p>Concernant le navigateur Chrome, il est int\u00e9ressant de noter qu\u2019il n\u2019autorise les requ\u00eates POST sur SameSite=Lax que si le cookie a \u00e9t\u00e9 d\u00e9fini il y a moins de 120&nbsp;secondes. Chrome pr\u00e9voit de supprimer cette intervention (\u00ab\u00a0Lax+POST\u00a0\u00bb) \u00e0 l\u2019avenir.<\/p>\n\n\n\n<p>En d\u2019autres termes, Chrome fera une exception pour les cookies d\u00e9finis sans attribut SameSite il y a moins de 2&nbsp;minutes. Ces cookies seront \u00e9galement envoy\u00e9s avec des requ\u00eates inter-sites non autonomes (par exemple, POST), alors que les cookies SameSite=Lax normaux exigent que les requ\u00eates inter-sites utilisent une m\u00e9thode HTTP s\u00fbre (par exemple, GET). Cela peut potentiellement ouvrir une petite br\u00e8che pour les attaques CSRF, m\u00eame si elles d\u00e9pendront un peu plus de l\u2019<a href=\"https:\/\/www.vaadata.com\/fr\/pentest-ingenierie-sociale\/\">ing\u00e9nierie sociale<\/a>.<\/p>\n\n\n\n<p class=\"has-background\" style=\"background-color:#f3f7ee\">En r\u00e9sum\u00e9, les CSRF sont un type d\u2019attaque sur les applications web et sa principale caract\u00e9ristique est d\u2019inciter un utilisateur authentifi\u00e9 \u00e0 effectuer une action non souhait\u00e9e. Une attaque CSRF r\u00e9ussie d\u00e9pend d\u2019un m\u00e9canisme d\u2019authentification faible qui repose uniquement sur les cookies pour g\u00e9rer les sessions des utilisateurs. Allant vers l\u2019int\u00e9gration de la s\u00e9curit\u00e9 par d\u00e9faut, les navigateurs modernes appliquent d\u00e9sormais des politiques plus strictes en mati\u00e8re de cookies, tandis que certains frameworks tels que Django (Python) et Laravel (PHP) embarquent des m\u00e9canismes anti-CSRF. Deux protections principales peuvent \u00eatre mises en place contre la vuln\u00e9rabilit\u00e9 CSRF. La premi\u00e8re repose sur les attributs des cookies, et la seconde sur l\u2019impl\u00e9mentation, dans l\u2019application web, de token anti-CSRF, qui sont non pr\u00e9dictibles et g\u00e9r\u00e9s uniquement c\u00f4t\u00e9 serveur. Pour une s\u00e9curit\u00e9 renforc\u00e9e, nous vous recommandons d\u2019appliquer les deux techniques.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Les attaques CSRF sont souvent utilis\u00e9es pour compromettre les donn\u00e9es et fonctionnalit\u00e9s d\u2019une application web. Principes, impacts, exploitations possibles, nous vous pr\u00e9sentons dans cet article une vue d\u2019ensemble de la vuln\u00e9rabilit\u00e9 CSRF ainsi que les bonnes pratiques et mesures \u00e0 impl\u00e9menter pour pr\u00e9venir les risques d\u2019attaques.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[14],"tags":[],"class_list":{"0":"post-1708","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-technique"},"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.vaadata.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/1708","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.vaadata.com\/blog\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.vaadata.com\/blog\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.vaadata.com\/blog\/fr\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.vaadata.com\/blog\/fr\/wp-json\/wp\/v2\/comments?post=1708"}],"version-history":[{"count":13,"href":"https:\/\/www.vaadata.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/1708\/revisions"}],"predecessor-version":[{"id":5348,"href":"https:\/\/www.vaadata.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/1708\/revisions\/5348"}],"wp:attachment":[{"href":"https:\/\/www.vaadata.com\/blog\/fr\/wp-json\/wp\/v2\/media?parent=1708"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.vaadata.com\/blog\/fr\/wp-json\/wp\/v2\/categories?post=1708"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.vaadata.com\/blog\/fr\/wp-json\/wp\/v2\/tags?post=1708"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}