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.

Detección y corrección de una vulnerabilidad en la biblioteca Dompdf con OPSWAT MetaDefender Core 

Por OPSWAT
Comparte esta publicación
Tai Tran y Hai Dang Bui, estudiantes de la Universidad de Tecnología de la Información, posan para un retrato profesional sobre un fondo azul
Los estudiantes participaron en el programa OPSWAT

El rápido avance de la tecnología ha generado una gran demanda de desarrolladores cualificados. El software de código abierto (OSS) se ha convertido en una herramienta fundamental para este colectivo profesional en expansión. En la actualidad existen cientos de miles de paquetes de OSS consolidados en diversos lenguajes de programación. Más del 90 % de los desarrolladores utilizan estos componentes de código abierto en sus aplicaciones propietarias, lo que pone de relieve la eficiencia y el valor añadido del OSS. Para subrayar aún más su importancia, se prevé que el mercado mundial del software de código abierto alcance los 80 700 millones de dólares en 2030, lo que refleja una tasa de crecimiento prevista del 16,7 % anual. 

Software un elemento fundamental de las operaciones empresariales en todo el mundo y, por ello, suele ser blanco de los autores de amenazas. En 2023, el gasto en seguridad de las aplicaciones ascendió a unos 5.760 millones de dólares, y se prevé que alcance los 6.670 millones en 2024. Dentro del ámbito de la seguridad de las aplicaciones, la seguridad de la cadena de suministro de software ha cobrado importancia en los últimos tres años, constituyendo la categoría de ataques de más rápido crecimiento, con importantes violaciones de seguridad y vulnerabilidades que aparecen regularmente en los titulares. 

Las organizaciones suelen dar por sentado que la mayoría de los riesgos provienen de las aplicaciones web orientadas al público. Sin embargo, esta perspectiva ha cambiado en los últimos años. Dado que cada aplicación contiene docenas de pequeños componentes, los riesgos pueden surgir ahora de cualquier parte del código fuente. Ahora es más importante que nunca que las organizaciones se familiaricen con las vulnerabilidades de seguridad existentes y emergentes en el ciclo de vida del desarrollo de software. En esta entrada del blog, nuestros becarios de posgrado analizan en profundidad el CVE-2023-23924, una vulnerabilidad de seguridad crítica descubierta en la popular biblioteca dompdf, una potente herramienta de PHP que permite la generación dinámica de documentos PDF a partir de HTML y CSS. 

Mediante un análisis exhaustivo, exploraremos los entresijos técnicos de esta vulnerabilidad, las tecnologías relacionadas que desempeñan un papel crucial y una simulación del proceso de explotación. También examinaremos cómo OPSWAT MetaDefender Core, en particular su Software Bill of Materials (SBOM) , puede aprovecharse para detectar y mitigar esta vulnerabilidad, lo que permite a los desarrolladores de software y a los equipos de seguridad ir un paso por delante de las posibles amenazas. 

Antecedentes sobre CVE-2023-23924 

A principios de 2023 se descubrió y se hizo pública una vulnerabilidad de seguridad en la versión 2.0.1 de dompdf:

  • La validación URI en dompdf 2.0.1 puede eludirse durante el análisis de SVG pasando <image> etiquetas con letras mayúsculas. Esto permite a un atacante llamar a URL arbitrarias con protocolos arbitrarios, lo que da lugar a la deserialización arbitraria de objetos en versiones de PHP anteriores a la 8.0.0. A través del envoltorio de URL PHAR, esta vulnerabilidad puede provocar la eliminación arbitraria de archivos e incluso la ejecución remota de código, dependiendo de las clases disponibles. 
  • Los analistas de NVD han asignado una puntuación CVSS de 9,8 (CRÍTICO ) a CVE-2023-23924. 
Diagrama informativo que muestra los parámetros de CVSS versión 3.x, incluyendo el nivel de gravedad y las cadenas de vectores de las vulnerabilidades de seguridad

Comprender la vulnerabilidad de Dompdf 

Para comprender plenamente la vulnerabilidad CVE-2023-23924 en dompdf, es fundamental familiarizarse con dos tecnologías estrechamente relacionadas: los gráficos vectoriales escalables (SVG) y los archivos PHAR. 

SVG (Gráficos vectoriales escalables) 

SVG (Scalable Vector Graphics) es un formato de imagen versátil que ha ganado gran popularidad gracias a su capacidad para mostrar gráficos de alta calidad en la web sin dejar de ser ligero y escalable. A diferencia de las imágenes rasterizadas, los SVG se basan en el lenguaje de marcado XML, lo que permite un control preciso sobre elementos como líneas, formas y texto. Una de las principales ventajas de los SVG es su capacidad para escalarse a la perfección sin perder calidad de imagen, lo que los hace ideales para el diseño web adaptativo y las pantallas de alta resolución.  

Fragmento de código que muestra un archivo SVG con varios polígonos de diferentes colores, que ilustra la programación en formato XML
Archivo PHAR 

PHAR (PHP Archive) es similar al concepto de archivo JAR, pero para PHP. Permite una implementación sencilla al agrupar todo el código PHP y los archivos de recursos en un único archivo comprimido.  

Un archivo PHAR consta de cuatro secciones:  

  • Archivos de inicio: contienen el código necesario para iniciar el archivo. 
  • Manifest: contiene los metadatos del archivo. Los metadatos se almacenan en formato serializado, lo que podría utilizarse para provocar un ataque de deserialización de PHP en un archivo PHAR malicioso. 
  • Contenido del archivo: contiene el contenido del archivo comprimido, incluido el código PHP y los archivos de recursos. 
  • Firma (opcional): contiene datos para verificar la integridad del archivo. 

Dado que los metadatos se almacenan en formato serializado, la combinación del contenedor PHAR y los metadatos del archivo PHAR podría dar lugar a un ataque de deserialización si se utiliza como entrada en funciones de PHP tales como file_get_contents(), fopen(), file(), file_exists(), md5_file(), filemtime(), o filesize(). Esta falla de seguridad podría permitir a los atacantes ejecutar código de forma remota a través de un archivo PHAR. 

Tabla en la que se detalla el formato básico de un archivo de manifiesto Phar, incluyendo el tamaño en bytes y la descripción de cada parte

Cómo genera Dompdf un archivo PDF

Diagrama de flujo que ilustra el proceso de conversión de un archivo HTML a formato PDF, en el que se destacan los pasos intermedios y los formatos de archivo

Mediante su análisis, los becarios OPSWAT han determinado que el proceso de conversión en dompdf consta de tres etapas. Para convertir un archivo HTML a formato PDF, la biblioteca dompdf primero analiza el archivo de entrada y lo transforma en un árbol DOM, almacenando la información de posición y diseño de cada objeto. A continuación, se analizan los estilos CSS y se aplican a cada objeto. Por último, los objetos se reorganizan para que quepan en la página y se representan en el archivo PDF final.  

Vulnerabilidad de seguridad en Dompdf

Para mejorar la seguridad, dompdf aplica una validación que garantiza la seguridad de los URI introducidos antes de pasar al siguiente paso. Este proceso de validación se hace evidente durante el procesamiento de archivos SVG en el valor de xlink:href atributo. 

Ejemplo de código PHP para gestionar archivos SVG, en el que se muestran funciones para analizar y validar el contenido SVG

Si el archivo SVG de entrada contiene el <image> etiqueta debajo de la <svg> etiqueta, se ha implementado una condición que solo permite determinados protocolos, como http://, https:// y file://, para el xlink:href campo.

Interfaz web para un servicio de conversión de PDF que permite a los usuarios subir archivos HTML o SVG para convertirlos a PDF

El resolve_url() La función validará la URI antes de procesarla con el drawImage() función. Si el esquema del URI no figura entre los protocolos permitidos, el resolve_url() La función devolverá una excepción a la aplicación. 

Script PHP que muestra cómo gestionar los URI de datos, ilustrando el manejo de errores y la verificación de protocolos en aplicaciones web

Si el URI supera la validación, se enviará a la drawImage() función, que utiliza el file_get_contents() función para gestionar el valor del URI dentro del xlink:href atributo. La vulnerabilidad de seguridad surge en este punto: se podría desencadenar un ataque de deserialización de PHAR si un atacante lograra eludir la validación e introducir un contenedor PHAR en la URI. 

Tras el análisis, se ha comprobado que la validación solo se aplica a las etiquetas cuyo nombre sea exactamente «image». 

Ejemplo en PHP de manipulación de imágenes, en el que se detallan las funciones para generar imágenes a partir de URL de datos y gestionar el contenido de los archivos

Por lo tanto, se puede eludir fácilmente escribiendo con mayúscula uno o varios caracteres del nombre de la etiqueta, como «Image». En consecuencia, un archivo SVG diseñado específicamente que utilice «Image» en lugar de «image» podría eludir esta validación. 

En el paso siguiente, el drawImage() se invoca la función, pasando el URI del archivo SVG a la file_get_contents() función. Por lo tanto, la combinación de la omisión de la validación y un ataque de deserialización sobre un archivo PHAR permite a un atacante llevar a cabo la ejecución remota de código. Esta vulnerabilidad abre la puerta a que un atacante malintencionado comprometa el servidor de aplicaciones a través de un archivo SVG si este es procesado por una versión vulnerable de dompdf. 

Simulación de explotación de Dompdf

Aplicación vulnerable

Para simular esta vulnerabilidad en un escenario real, los becarios OPSWAT desarrollaron una aplicación web que permite convertir archivos HTML a PDF utilizando la biblioteca dompdf, versión 2.0.1. Esta aplicación permite a los usuarios cargar archivos de formatos como HTML, XML o SVG y convertirlos a PDF. 

Captura de pantalla de una herramienta de conversión de PDF basada en web que muestra un avatar humanoide y destaca las funciones de carga de archivos y conversión

Un atacante seguirá estos pasos para aprovechar esta vulnerabilidad en una aplicación que utilice una versión vulnerable de dompdf (versión 2.0.1): 

Fragmento de código PHP que muestra el uso de la biblioteca Dompdf para convertir HTML a un archivo PDF en formato apaisado
Fragmento del archivo `composer.json` que especifica el requisito de la biblioteca Dompdf, versión 2.0.1, para un proyecto PHP
Flujo de explotación
Un diagrama gráfico que explica el proceso de cuatro pasos para aprovechar archivos SVG mediante la vulnerabilidad de Dompdf con el fin de ejecutar un shell inverso

En primer lugar, un atacante genera un objeto malicioso que crea un shell inverso cuando se invoca el destructor. 

Ejemplo de código PHP que ilustra una vulnerabilidad de deserialización de objetos en PHP que permite la ejecución remota de código a través de un shell inverso

En segundo lugar, el atacante crea un archivo PHAR que contiene el objeto de metadatos malicioso. Cuando el envoltorio PHAR ejecuta el archivo PHAR en el file_get_content() función, los metadatos se deserializan y se procesa el objeto especificado. Durante este proceso de deserialización, se activan los destructores y se ejecuta el shell inverso. 

Script PHP que muestra cómo crear un archivo Phar que incluye datos de objetos serializados para ejecutar un comando remoto

En última instancia, el atacante inserta el enlace URI que contiene el contenedor PHAR en el valor de xlink:href atributo de la etiqueta «Image» para eludir la validación, ejecutar código malicioso y cargar este archivo malicioso en la aplicación. 

Fragmento de código SVG que muestra cómo incrustar un exploit de deserialización PHP remota a través de una referencia de imagen

Durante el procesamiento del archivo SVG malicioso subido, la aplicación establece una conexión inversa con el atacante, lo que le permite comprometer el servidor de la aplicación. 

Interfaz web de un conversor de PDF que muestra opciones para cargar y convertir archivos HTML/SVG a PDF, con un modelo humano digital
Captura de pantalla de una consola de Metasploit en la que se muestra una conexión TCP inversa establecida correctamente y los detalles de la configuración de red
Captura de pantalla del terminal en la que se muestran la configuración de red y las credenciales obtenidas de un sistema Unix

Protección de componentes de código abierto con OPSWAT MetaDefender Core 

Para detectar y mitigar la vulnerabilidad CVE-2023-23924 en dompdf, nuestros becarios de posgrado utilizaron OPSWAT MetaDefender Core, un producto de ciberseguridad de múltiples capas que ofrece tecnologías avanzadas de prevención y detección de malware, incluida la SBOM. 

OPSWAT protege la cadena de suministro de software al proporcionar un inventario completo de componentes para el código fuente y los contenedores. Al analizar la biblioteca dompdf y sus dependencias, OPSWAT puede identificar rápidamente la presencia de la versión 2.0.1, que presenta vulnerabilidades, y alertar a los usuarios sobre el riesgo potencial. 

Además, OPSWAT puede detectar tecnologías relacionadas, como los archivos SVG y PHAR, que son esenciales para comprender y mitigar la vulnerabilidad CVE-2023-23924. Esta visión global de los componentes de software de la aplicación permite a los equipos de seguridad tomar decisiones fundamentadas y adoptar las medidas adecuadas para hacer frente a los riesgos identificados. 

Interfaz de análisis de seguridad que muestra un archivo JavaScript bloqueado debido a vulnerabilidades, con resultados detallados de la evaluación

Además de detectar la versión vulnerable de dompdf, OPSWAT también ofrece información valiosa sobre los componentes afectados, sus versiones y cualquier actualización o parche disponible. Esta información permite a los equipos de seguridad priorizar sus medidas correctivas y garantizar que la aplicación se actualice a una versión segura de dompdf, solucionando así de forma eficaz la vulnerabilidad CVE-2023-23924. 

Vista detallada de las vulnerabilidades en un archivo de notación de objetos JavaScript, en la que se enumeran los riesgos de seguridad críticos y altos con sus identificadores CVE

Al aprovechar el motor SBOM integrado en MetaDefender Core, las organizaciones pueden supervisar de forma proactiva su cadena de suministro de software, identificar posibles vulnerabilidades en los componentes de código abierto e implementar estrategias de mitigación oportunas, garantizando así la seguridad y la integridad generales de sus aplicaciones. 

Reflexiones finales 

El descubrimiento de la vulnerabilidad CVE-2023-23924 en la biblioteca dompdf pone de relieve la necesidad imperiosa de mantener la vigilancia en el cambiante panorama de la seguridad de las aplicaciones. Al aprovechar los conocimientos y las estrategias descritas en esta entrada del blog, los equipos de seguridad pueden detectar, mitigar y proteger eficazmente sus aplicaciones frente a este tipo de vulnerabilidades, garantizando así la seguridad e integridad generales de su ecosistema de software. 

Etiquetas:

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