La XML External Entity Injection (XXE) es una vulnerabilidad que ocurre cuando una aplicación procesa entradas XML inseguras y permite que un atacante acceda y lea archivos arbitrarios en el servidor. Esta vulnerabilidad es especialmente crÃtica cuando la aplicación procesa XML proporcionado por el usuario sin tomar medidas de seguridad adecuadas.
A continuación, se presentan algunos ejemplos de cómo podrÃa ocurrir una inyección de XML External Entity:
- Ejemplo de solicitud XML vulnerable: Supongamos que una aplicación web recibe una solicitud XML que contiene un enlace a una entidad externa maliciosa:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<root>
<data>&xxe;</data>
</root>
En este ejemplo, el archivo /etc/passwd
del servidor está siendo accedido a través de la entidad externa xxe
, que está definida en el documento XML. Si la aplicación no protege adecuadamente contra la inyección de entidades externas, el contenido del archivo /etc/passwd
será devuelto en la respuesta, lo que podrÃa filtrar información sensible.
- Ejemplo de documento XML vulnerable en un parámetro: Si una aplicación procesa un parámetro XML sin escapar ni filtrar correctamente las entidades externas, puede conducir a una inyección XXE:
URL: http://example.com/process?xml=<user>&xxe;</user>
En este ejemplo, si la aplicación no maneja correctamente el parámetro xml
, el atacante puede aprovechar la entidad xxe
para leer archivos del sistema o realizar otras acciones maliciosas.
- Inyección XXE en un archivo de carga útil (payload): En algunos casos, los atacantes pueden cargar archivos maliciosos, como una carga útil XML, para explotar una vulnerabilidad XXE. Por ejemplo:
Archivo payload.xml
:
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<root>
<data>&xxe;</data>
</root>
El atacante podrÃa cargar este archivo payload.xml
a través de una función de carga de archivos en la aplicación para aprovechar la vulnerabilidad XXE.
Para protegerse contra inyecciones de XML External Entity, se deben tomar las siguientes medidas:
- No procesar XML no confiable: Evita procesar XML proporcionado por usuarios no confiables sin filtrar o escapar las entidades externas.
- Deshabilitar DTD (Document Type Definition) y entidades externas: En la configuración del analizador XML, asegúrate de deshabilitar DTD y entidades externas si no son necesarias.
- Utilizar analizadores seguros: Utiliza bibliotecas o analizadores XML seguros que prevengan XXE y otras vulnerabilidades conocidas.
- Validar y filtrar entradas: Si la aplicación necesita procesar XML proporcionado por usuarios, valida y filtra cuidadosamente las entradas para evitar contenido malicioso.
La prevención de XXE es fundamental para garantizar la seguridad de las aplicaciones que procesan XML.