Writeup du Dojo #25 de YesWeHack — XSS réfléchi via injection dans une variable CSS avec !important.
Description
Le XSS réfléchi (non-persistant) se produit quand un script malveillant est renvoyé depuis l’application web vers le navigateur de la victime sans être stocké côté serveur.
Exploitation
Le vecteur d’injection ciblait une variable CSS. En utilisant la règle !important, il est possible d’écraser le style de la page et d’injecter du code JavaScript :
<img src=x onerror=alert()>
Injecté via manipulation de variable CSS :
--var: </style><img src=x onerror=alert()> !important;
Impacts
- Exfiltration de données et cookies de session
- Installation de malware sur la machine de la victime
- Hijacking de session
- Défiguration de sites gouvernementaux ou d’infrastructure critique
Mitigation
- Sanitisation des données utilisateur
- Flag HTTPOnly sur les cookies
- Déploiement de Content Security Policy (CSP)