Exploiter un smuggling HTTP pour livrer un XSS réfléchi

Exploiting HTTP request smuggling to deliver reflected XSS

Le laboratoire met en place un serveur front-end et un serveur back-end. Le front-end ne supporte pas le chunked encoding, ce qui ouvre la voie à une attaque de HTTP Request Smuggling.

L’application présente également une vulnérabilité de XSS réfléchi via l’en-tête User-Agent.

L’objectif est de fourguer une requête smuggled au back-end, de façon à ce que la prochaine requête du victim user reçoive une réponse contenant un payload XSS exécutant alert(1).

Le laboratoire génère périodiquement des requêtes du “victim user”, ce qui nécessite parfois plusieurs tentatives pour déclencher l’exploit au bon moment.

Vulnérabilité XSS dans le User-Agent

Le champ userAgent présent dans les formulaires est directement réutilisé dans la réponse, ce qui permet l’injection :

Ce payload est accepté et interprété, confirmant la vulnérabilité XSS.

Objectif de l’attaque

L’idée est d’utiliser le smuggling pour faire en sorte que :

  1. Le front-end lit la requête selon Content-Length.

  2. Le back-end lit selon Transfer-Encoding: chunked.

  3. La requête smuggled modifie la requête suivante du victim user.

  4. Le serveur renvoie alors une réponse contenant notre payload XSS dans l’en-tête User-Agent.

Requête smuggled envoyée à l’application

Tu proposes une requête POST contenant un body vide (0\r\n\r\n) pour terminer la partie chunkée, suivie de la requête destinée au back-end

Cette seconde requête (smuggled) sera interprétée par le back-end comme faisant partie de la requête suivante — celle du victim user — ce qui permet d’injecter le payload XSS dans la réponse qu’il recevra.

Mis à jour

Ce contenu vous a-t-il été utile ?