
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.

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

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.

Cómo genera Dompdf un archivo PDF

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

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.

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.

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

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

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):

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

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.

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.

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.

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.

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.

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.




