
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 OSS alcance los 80 700 millones de dólares en 2030, lo que refleja una tasa de crecimiento prevista del 16,7 % anual.
Sin embargo, la adopción generalizada del software de código abierto (OSS) también introduce un nuevo nivel de complejidad: las vulnerabilidades de seguridad. La gran cantidad de componentes de OSS interconectados crea una superficie de ataque más amplia que los actores maliciosos pueden aprovechar. La gestión de las dependencias entre los distintos paquetes de OSS puede resultar compleja, lo que dificulta la identificación y la corrección rápida de las vulnerabilidades. Además, la seguridad del OSS suele depender de la vigilancia y las contribuciones de la comunidad de desarrolladores. Esto puede provocar retrasos en la corrección de las vulnerabilidades, especialmente en el caso de los proyectos menos populares.
En este artículo, los becarios OPSWAT analizan CVE-2023-33733, una vulnerabilidad de seguridad descubierta en la popular biblioteca de código abierto ReportLab. Su análisis se complementa con un ataque simulado que aprovecha MetaDefender Core con su Software Bill of Materials (SBOM) , permite identificar vulnerabilidades en las dependencias de una aplicación, incluida la biblioteca ReportLab, que es vulnerable.
Introducción a la biblioteca de Reportlab

ReportLab, una potente biblioteca de Python de código abierto, permite a los usuarios generar archivos PDF con numerosas funciones a partir de código Python. Ofrece a los desarrolladores una combinación ganadora: flexibilidad, facilidad de uso y amplias opciones de personalización para crear documentos dinámicos. La biblioteca proporciona a los desarrolladores un mayor control sobre sus archivos PDF, lo que permite la incorporación precisa de texto, imágenes, tablas y gráficos con meticulosa precisión. Este nivel de personalización convierte a ReportLab en una herramienta valiosa para generar documentos dinámicos, como facturas e informes basados en datos.
Antecedentes de CVE-2023-33733
CVE-2023-33733 pone de manifiesto una vulnerabilidad de seguridad en la biblioteca ReportLab, que afecta a varias versiones de la misma.
- Se ha descubierto que las versiones de ReportLab anteriores a la 3.6.13 son vulnerables a la evasión del entorno de pruebas, concretamente en el
«rl_safe_eval»función. La vulnerabilidad se aprovechó mediante el atributo «color» de las etiquetas HTML, que se evaluó directamente como una expresión de Python utilizando eleval()función, lo que, en última instancia, da lugar a la ejecución remota de código. - Los analistas de NVD han asignado una puntuación CVSS de 7,8 (ALTA ) a CVE-2023-33733.

Análisis de la vulnerabilidad de seguridad de ReportLab
Los becarios OPSWAT llevaron a cabo un análisis exhaustivo del flujo de trabajo de ReportLab, identificando la causa principal de la vulnerabilidad de seguridad CVE-2023-33733.
ReportLab permite a los desarrolladores crear archivos PDF de forma eficiente. La biblioteca facilita la integración: basta con importarla, definir el contenido HTML y generar el PDF con una sola línea de código utilizando la función «result».

Nuestros becarios de posgrado han descubierto un proceso de cinco pasos para crear archivos PDF a partir de HTML con ReportLab.

Dentro del proceso de cinco pasos para crear archivos PDF a partir de HTML con ReportLab, destacan tres procesos principales: el procesamiento de párrafos, el procesamiento con el «paraparser» y el proceso de gestión del HTML.

Como se muestra en la figura anterior, el proceso de gestión de HTML en ReportLab utiliza el eval() función que actúa específicamente sobre el atributo «color». Al servir como punto central para la ejecución de código malicioso, el eval() La función obliga a los investigadores a intentar controlar sus entradas para poder explotar la aplicación. Sin embargo, esto resulta complicado debido al entorno aislado impuesto por el __rl_safe_eval__ función dentro de ReportLab.

ReportLab ha implementado un entorno de pruebas denominado __rl_safe_eval__. Este entorno aislado excluye todas las funciones integradas de Python e incluye varias funciones integradas sobrescritas. Esta restricción permite la ejecución de código seguro dentro de la biblioteca, al tiempo que impide el acceso a funciones y bibliotecas peligrosas que podrían utilizarse con fines maliciosos (por ejemplo, el acceso al sistema de archivos o la comunicación en red).
El rl_safe_eval La función «sandbox» aplica diversas condiciones para garantizar que el atributo invocado sea seguro antes de utilizar la función integrada de Python getattr() función para recuperarlo y devolver el resultado.

La función «safe eval» tiene como objetivo proteger el entorno excluyendo las funciones peligrosas y evitando acciones maliciosas. Sin embargo, si se encuentra una forma de eludir sus condiciones y acceder a una función integrada potente, podría ser objeto de abuso.
Partiendo de esta idea, los investigadores de seguridad intentaron eludir las restricciones. En un primer momento, aprovecharon una vulnerabilidad de inyección de objetos utilizando el type() función para crear un objeto y redefinir sus atributos y métodos con el fin de eludir las comprobaciones dentro de __rl_safe_eval__. Además, dado que la biblioteca ReportLab sobrescribe las funciones integradas y las convierte en variables globales en el contexto de eval, el investigador podría aprovechar esta implementación para acceder a una de las funciones integradas originales. Esto podría permitirle eludir el entorno de sandbox y ejecutar código malicioso.

La carga útil se prepara de la siguiente manera:

No obstante, no es posible ejecutar una expresión de varias líneas dentro de un contexto «eval». Sin embargo, se puede recurrir a un truco basado en las comprensiones de lista, y la carga útil para explotar esta vulnerabilidad (CVE) es la siguiente:

Simulación de explotación de ReportLab
Un grupo de investigadores ha publicado una prueba de concepto (POC) para CVE-2023-33733, en la que se demuestra que las aplicaciones desarrolladas con versiones vulnerables de ReportLab podrían ser susceptibles de sufrir ciberataques. Para evaluar esta posible amenaza, los becarios de posgrado de OSPWAT llevaron a cabo un ataque simulado contra una aplicación web. Para ello, utilizaron MetaDefender Core sus funciones de SBOM, para identificar las vulnerabilidades de seguridad presentes en las dependencias del software de la aplicación, incluida la presencia de la biblioteca ReportLab afectada.
Para simular esta explotación como un escenario real, los becarios OPSWAT desarrollaron una aplicación web utilizando Python y la versión vulnerable de la biblioteca ReportLab. Esta aplicación reproduce un caso de uso típico: los usuarios pueden cargar un archivo HTML y convertirlo en un archivo PDF.

Un atacante podría crear un archivo HTML malicioso que contenga código diseñado para aprovechar CVE-2023-33733. Este código podría eludir el entorno aislado y comprometer el servidor web al activar un shell inverso a través del eval() función.

Si se lograra cargar un archivo malicioso, el atacante podría hacerse con el control del servidor de aplicaciones debido a la vulnerabilidad existente en la biblioteca ReportLab, que está desactualizada.
La importancia de la SBOM y la seguridad proactiva
La investigación de los becarios OPSWAT sobre CVE-2023-33733 pone de relieve los posibles riesgos de seguridad asociados al software de código abierto. Si bien el software de código abierto ofrece ventajas innegables en cuanto a eficiencia en el desarrollo y rentabilidad, vulnerabilidades como la detectada en ReportLab pueden dejar a las organizaciones expuestas a ciberataques.
OPSWAT protege la cadena de suministro de software al proporcionar un inventario completo de componentes para código fuente y contenedores. Es compatible con más de 10 lenguajes, entre ellos Java, JavaScript, Go, PHP y Python, y cuenta con más de 5 millones de componentes de software de código abierto de terceros; además, utiliza una base de datos con más de 17 000 vulnerabilidades procedentes de la Base de Datos Nacional de Vulnerabilidades (NVD) y GitHub (GHSA).

OPSWAT MetaDefender Core, con sus funciones SBOM integradas, permite a las organizaciones abordar estos riesgos de forma proactiva. MetaDefender Core las aplicaciones de software y sus dependencias, identificando la presencia de vulnerabilidades conocidas, como CVE-2023-33733, en los componentes incluidos en la lista. Esto permite a los desarrolladores y a los equipos de seguridad priorizar las tareas de aplicación de parches y mitigar los riesgos de seguridad antes de que puedan ser explotados.

Reflexiones finales
La investigación de los becarios OPSWAT sobre la vulnerabilidad de ReportLab (CVE-2023-33733) sirve como un valioso recordatorio de la importancia de adoptar medidas de seguridad proactivas en el ciclo de vida del desarrollo de software. Al utilizar herramientas como OPSWAT MetaDefender Core, las organizaciones pueden obtener información crucial sobre las dependencias de su software e identificar posibles vulnerabilidades antes de que sean aprovechadas por los atacantes.
Además, OPSWAT un conjunto completo de soluciones de ciberseguridad que van más allá del análisis de vulnerabilidades. Estas soluciones proporcionan detección de amenazas en tiempo real, seguridad de los datos y protección de los terminales, lo que protege a las organizaciones frente a una amplia gama de ciberamenazas. Al adoptar un enfoque de seguridad por capas que incluye herramientas como MetaDefender Core, las organizaciones pueden aprovechar las ventajas del software de código abierto (OSS) y minimizar al mismo tiempo los riesgos de seguridad asociados.


