Los archivos de imagen suelen considerarse archivos seguros y, a menudo, se manejan sin ser conscientes de los posibles problemas de seguridad que pueden plantear. Estos archivos de imagen, especialmente los SVG, son vectores de ataque habituales para lanzar ataques peligrosos, como el Cross-Site Scripting (XSS) o la inyección de entidades externas XML (XXE). A diferencia de los ataques XSS, los ataques de inyección XXE no afectan al lado del cliente, pero pueden tener un impacto significativo en el lado del servidor, lo que puede provocar graves consecuencias. En esta entrada del blog, analizaremos la naturaleza de los ataques XXE, concretamente a través del vector de ataque de los gráficos vectoriales escalables (SVG), comentaremos un ejemplo real y ofreceremos estrategias de mitigación con OPSWAT .
Información general
Antes de profundizar en la vulnerabilidad, analizaremos primero los formatos de archivo XML y SVG, así como la causa fundamental que subyace a la técnica de inyección XXE.
Formato de archivo XML
XML (eXtensible Markup Language) es un formato de archivo independiente de la plataforma destinado al almacenamiento y el intercambio de datos estructurados. XML admite estructuras jerárquicas, lo que lo hace ideal para representar relaciones complejas entre datos. Los datos en formato XML se organizan en etiquetas, atributos y contenido, al igual que en HTML. Sin embargo, XML es altamente personalizable y extensible, lo que permite a los usuarios definir sus propias etiquetas y atributos para adaptarlos a sus necesidades. La siguiente figura muestra los datos del departamento de TI en formato XML.

Entidades XML
En XML, las entidades son marcadores de posición para datos que permiten incrustar texto o documentos completos en el documento actual. Desde el punto de vista sintáctico, una entidad en XML va entre el símbolo «&» y un punto y coma (;). En el ejemplo siguiente, se definen dos entidades en la definición de tipo de documento y se hace referencia a ellas en el contenido del archivo XML. La diferencia entre las dos entidades es que la entidad interna se define y se referencia dentro del documento actual, mientras que el contenido de la entidad externa procede de un documento externo. Tras analizar y resolver las entidades, estas se sustituyen por los datos correspondientes.
Formato de archivo SVG
SVG (Scalable Vector Graphics) es un formato de archivo versátil que se utiliza ampliamente en el desarrollo web, el diseño gráfico y la visualización de datos. A diferencia de los formatos de imagen tradicionales, como JPEG o PNG, SVG utiliza el formato XML para describir gráficos vectoriales bidimensionales. Concretamente, las imágenes SVG se componen de formas geométricas como líneas, curvas y polígonos, definidas por ecuaciones matemáticas en lugar de píxeles individuales. Como resultado, los gráficos SVG pueden escalarse infinitamente sin perder calidad, lo que los hace ideales para el diseño web adaptativo y las pantallas de alta resolución. Debido a la naturaleza XML del formato SVG, también ofrece posibles vectores de ataque para exploits relacionados con XML.

Técnica de inyección XXE y sus repercusiones
La técnica de inyección XXE aprovecha indebidamente el mecanismo de resolución de entidades externas. Concretamente, cuando el analizador sintáctico encuentra una entidad externa, recupera el contenido correspondiente en función del tipo del archivo de recursos.
Si el archivo de recursos es local, el analizador recuperará el contenido del archivo y sustituirá la entidad por los datos correspondientes. Esto permitiría a un atacante mostrar datos confidenciales, como la configuración del servidor, credenciales, etc. Para aprovechar con éxito la vulnerabilidad, el atacante declara una entidad externa que hace referencia al contenido de archivos confidenciales, como /etc./password, por ejemplo.
Sin embargo, si el recurso es remoto o se trata de un servicio interno, el analizador intentará recuperar los datos solicitando la URL definida. Esto podría aprovecharse para llevar a cabo una falsificación de solicitudes del lado del servidor (SSRF). En este caso, en lugar de hacer referencia a un archivo local, el atacante modificará la carga útil por la URL del servicio vulnerable para realizar la solicitud en nombre del servidor.
Ataque XXE por un error en el manejo de archivos SVG: un caso práctico
Analizaremos una vulnerabilidad de tipo XXE en un caso real: la biblioteca SVGLIB hasta la versión 0.9.3. La vulnerabilidad se descubrió en 2020 y se le asignó el identificador CVE-2020-10799. En primer lugar, examinaremos el flujo de la biblioteca, analizaremos el fragmento de código vulnerable y, por último, demostraremos la explotación a través de un servicio de conversión de SVG a PNG. El objetivo son las aplicaciones web de implementación propia que utilizan versiones vulnerables de SVGLIB para la conversión.
Paquete svglib
svglib es una biblioteca escrita íntegramente en Python diseñada para convertir archivos en formato SVG a otros formatos, como PNG, JPG, PDF, etc., utilizando el kit de herramientas de código abierto Report Lab. Dado que los archivos SVG utilizan el formato XML, el análisis y el manejo de XML también constituyen una parte importante del flujo principal de la biblioteca. Los tres pasos principales de la biblioteca son los siguientes:

Explotación
La vulnerabilidad se encuentra en el proceso de análisis de archivos SVG; si la configuración es incorrecta, se producirán fugas de datos confidenciales en el servidor y podrían surgir vulnerabilidades de tipo SSRF. Tras un análisis más detallado del código fuente del paquete svglib, se ha determinado que la vulnerabilidad XXE se debe al uso de la configuración predeterminada para el análisis y el manejo del formato XML al cargar el archivo SVG. El paquete utiliza el paquete lxml, en el que el valor predeterminado del atributo `resolve_entities` de la clase `XMLParser` es «True».


Remediación
La causa principal del problema es el análisis XML inseguro, que se ha implementado de forma incorrecta en la biblioteca svglib y en parte de la dependencia lxml. En consecuencia, el uso de una versión vulnerable de esta biblioteca puede dar lugar a la divulgación de información confidencial, a la falsificación de solicitudes del lado del servidor o incluso a una posible ejecución remota de código, dependiendo del entorno de implementación y de la funcionalidad de la aplicación. Las vulnerabilidades introducidas por bibliotecas de terceros suponen un grave problema para la seguridad de las aplicaciones de gran envergadura, ya que sus dependencias pueden ser complejas y poco transparentes.
MetaDefender Software Supply Chain
OPSWAT MetaDefender Software Supply Chain ofrece una mayor visibilidad y una defensa sólida contra los riesgos de la cadena de suministro mediante una combinación de múltiples tecnologías.Bill of Materials (SBOM) Software Bill of Materials (SBOM) OPSWAT Bill of Materials (SBOM) obtener visibilidad sobre los paquetes de software de código abierto de terceros e identificar dependencias de software, vulnerabilidades u otros riesgos potenciales existentes en cada capa de una imagen de contenedor. Con la integración de más de 30 motores antivirus combinados, la tasa de detección de malware de la Multiscanning alcanza más del 99,99 %. Además, la tecnologíaProactive DLP prevención de pérdida de datos) identifica credenciales como contraseñas, secretos, tokens, API u otra información confidencial que quede en el código fuente. Con nuestras tecnologías de detección y prevención de amenazas de confianza cero, su ciclo de vida del desarrollo de software (SDLC) queda protegido frente al malware y las vulnerabilidades, lo que refuerza la seguridad de las aplicaciones y el cumplimiento normativo.


MDSSC detecta la vulnerabilidad CVE encontrada en svglib. Además, indica el nivel de gravedad de la vulnerabilidad CVE en el informe SBOM e identifica la versión del software vulnerable.
MetaDefender Core tecnología Deep CDR™
Otra razón que hace posible el exploit es que la aplicación procesa un archivo SVG en el que se ha inyectado una carga maliciosa. Por lo tanto, si el archivo de imagen se depura antes de enviarlo al servicio de conversión, la carga maliciosa quedaría eliminada, lo que impediría que se produjera el ataque. La tecnología Deep Content Disarm and Reconstruction CDR) de MetaDefender Core contra amenazas conocidas y desconocidas transmitidas por archivos mediante la desinfección y reconstrucción de los mismos. Con compatibilidad con más de 160 tipos de archivos comunes y cientos de opciones de reconstrucción de archivos, la tecnología Deep CDR™ OPSWATneutraliza cualquier amenaza potencial incrustada, garantizando que el archivo desinfectado mantenga su plena funcionalidad con contenido seguro.



Luan Pham participó en el Programa de Becas de Posgrado en Ciberseguridad de Infraestructuras Críticas OPSWAT y, en la actualidad, es probador de penetración asociado en OPSWAT. Le apasiona proteger los productos OPSWAT frente a posibles amenazas y compartir sus conocimientos.


