Envío de registros, alertas y datos de telemetría a través de un diodo de datos

Descubre cómo
Utilizamos inteligencia artificial para traducir el sitio web y, aunque nos esforzamos por garantizar la precisión, es posible que las traducciones no sean siempre 100 % exactas. Agradecemos tu comprensión.

SVG al descubierto: cómo entender las vulnerabilidades XXE y proteger tu código

Por Luan Pham, técnico asociado de pruebas de penetración
Última actualización:
Comparte esta publicación

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. 

Fragmento de código XML que muestra los datos de los empleados en la estructura de un departamento de TI

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. 

Ejemplo de código de un documento XML con entidades internas y externas que incluye un saludo
Ejemplo de código XML simplificado que muestra la estructura y el uso de entidades y contenido

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. 

Imagen de ejemplo que muestra la estructura básica de un archivo SVG con contenido de texto

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: 

Diagrama de flujo que ilustra los pasos desde el análisis sintáctico de un archivo SVG hasta su conversión a otro formato

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».  

Diferencia de código que muestra los cambios en una función de Python para cargar un archivo SVG con opciones de resolución de entidades
Diagrama de flujo del proceso de un ataque XXE mediante archivos SVG en un contexto de seguridad

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.  

Supply Chain Software OPSWAT MetaDefender , que muestra los resultados del análisis de repositorios en busca de vulnerabilidades y amenazas
InformeSupply Chain Software OPSWAT MetaDefender  para un archivo «requirements.txt» en el que no se han detectado amenazas ni información confidencial

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. 

Código XML editable en formato SVG con una vulnerabilidad XXE descrita en el elemento DOCTYPE
El archivo SVG malicioso
Versión limpia del código XML en formato SVG sin vulnerabilidad XXE
El archivo SVG tras haber sido depurado con MetaDefender Core Tecnología Deep CDR™ 
Informe de seguridad en el que se muestra un archivo SVG marcado como permitido y depurado tras una evaluación de vulnerabilidades
MetaDefender Core Resultado depurado mediante la tecnología Deep CDR™

Biografía del autor

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. 

Luan Pham
Técnico adjunto en pruebas de penetración

¡Mantente al día con OPSWAT!

Regístrate hoy mismo para recibir las últimas novedades de la empresa, historias, información sobre eventos y mucho más.