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

← retour aux articles