Splitting HTTP/2 par injection CRLF
HTTP/2 request splitting via CRLF injection
Le front-end rétrograde les requêtes HTTP/2 vers HTTP/1 et ne nettoie pas correctement les en-têtes. Ce défaut permet une attaque de request splitting, utilisée ici pour empoisonner la file de réponses et accéder au panneau d’administration afin de supprimer l’utilisateur carlos. Un administrateur se connecte toutes les 10 secondes et la connexion back-end est réinitialisée toutes les 10 requêtes, ce qui permet de repartir facilement sur une connexion propre.
Même si la requête est mal formée, le serveur ne renvoie aucun message d’erreur.
Exemple de tentative en HTTP/2 :
Aucune erreur n’est générée.
Ajout d’un en-tête personnalisé dans Request Headers (Burp) :

Avec une requête GET contenant un corps, le serveur précise que GET ne peut pas transporter de body, ce qui confirme que certaines validations existent mais restent insuffisantes pour les en-têtes injectés.

Injection CRLF via les en-têtes en HTTP/2
En plaçant les en-têtes contrôlés via HTTP/2, l'injection CRLF est acceptée. On peut alors insérer une requête supplémentaire après la requête légitime lors du downgrade vers HTTP/1.
Exemple de charge utile smuggled :


Exploitation
Injecter une requête smuggled ciblant : GET /admin HTTP/1.1

Envoyer plusieurs requêtes afin que l’administrateur déclenche la réponse piégée.
Intercepter la requête /admin du back-end contenant la cookie de session de l’administrateur.

Réutiliser cette session volée pour accéder au panneau admin.
Depuis le panneau, supprimer l’utilisateur carlos.

Mis à jour
Ce contenu vous a-t-il été utile ?