Writeup du Dojo #34 de YesWeHack — injection XXE bypassée par encodage UTF-16 pour contourner les filtres de mots-clés.
Description
L’injection XML External Entity (XXE) permet à un attaquant d’interférer avec le traitement XML d’une application pour lire des fichiers arbitraires, effectuer des requêtes SSRF, ou exécuter des commandes.
Code Vulnérable
L’application filtrait les mots-clés dangereux (file://, tmp, flag.txt, system, public, entity) mais uniquement sur les données brutes UTF-8. Les variantes UTF-16 avec BOM (b'\xff\xfe' ou b'\xfe\xff') passaient inaperçues.
Exploitation
En encodant le payload XXE en UTF-16-BE avec l’en-tête correct, il est possible de lire des fichiers arbitraires comme /tmp/flag.txt en contournant entièrement les filtres.
<?xml version="1.0" encoding="UTF-16"?>
<!DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///tmp/flag.txt">]>
<root>&xxe;</root>
Mitigation
- Validation et sanitisation complètes des entrées XML
- Désactiver les entités externes dans le parser XML
- Utiliser une whitelist stricte
- Maintenir les dépendances à jour