Vulnerabilidad sin parches de Python afecta a más de 350,000 proyectos
Una vulnerabilidad en el lenguaje de programación Python que ha pasado desapercibida durante 15 años ahora vuelve a ser el centro de atención. Esta vulnerabilidad probablemente afecta a más de 350,000 repositorios de código abierto y puede conducir a la ejecución de código.
Revelada en 2007 y etiquetada como CVE-2007-4559, el problema de seguridad nunca recibió un parche. Además, la única mitigación proporcionada fue una actualización de la documentación que advertía a los desarrolladores sobre el riesgo.
Sin parchear desde 2007
La vulnerabilidad se encuentra en el paquete tarfile de Python, específicamente, en el código que utiliza la función tarfile.extract()
que no valida los valores predeterminados integrados de tarfile.extractall()
. Es una vulnerabilidad de salto de directorio que permite a un atacante sobrescribir archivos arbitrarios.
Los detalles técnicos de CVE-2007-4559 han estado disponibles desde el informe inicial en agosto de 2007. Si bien no hay informes sobre el aprovechamiento del error en los ataques, representa un riesgo en la cadena de suministro de software.
A principios de este año, mientras investigaba otro problema de seguridad, un investigador de Trellix redescubrió CVE-2007-4559. Trellix es una nueva empresa que brinda soluciones de detección y respuesta extendidas (XDR) que resultó de la fusión de McAfee Enterprise y FireEye.
“Si no se escribe ningún código de seguridad para validar los archivos de los miembros antes de llamar a tarfile.extract() tarfile.extractall(), se genera una vulnerabilidad de salto de directorios, lo que permite que un actor malintencionado acceda al sistema de archivos”.
Charles McFarland, investigador de vulnerabilidades en el Equipo de investigación de amenazas avanzadas de Trellix
La vulnerabilidad se deriva del hecho de que el código en la función extract
en el módulo tarfile
de Python confía explícitamente en la información del objeto TarInfo
“y une la ruta que se pasa a la función extract y el nombre en el objeto TarInfo
“.
En pocas palabras, un atacante puede explotar la vulnerabilidad al cargar un archivo tar malicioso de una manera que hace posible escapar del directorio en el que se pretende extraer un archivo y lograr la ejecución del código. Esto le permite al adversario potencialmente tomar el control de un dispositivo de destino.
Menos de una semana después de la divulgación, un mensaje en Python bug tracker anunció que el problema estaba solucionado. La solución fue actualizar la documentación con una advertencia “que podría ser peligroso extraer archivos de fuentes no confiables.
Estimación de 350,000 proyectos afectados
Al analizar el impacto, los investigadores de Trellix descubrieron que la vulnerabilidad estaba presente en miles de proyectos de software, tanto de código abierto como cerrado.
Los investigadores escanearon un conjunto de 257 repositorios con mayor probabilidad de incluir el código vulnerable y verificaron manualmente 175 de ellos para ver si estaban afectados. Esto reveló que el 61% de ellos eran vulnerables.
La ejecución de una verificación automatizada en el resto de los repositorios aumentó la cantidad de proyectos afectados al 65 %. Esto indica un problema generalizado.
Sin embargo, el pequeño conjunto de muestras solo sirvió como referencia para obtener una estimación de todos los repositorios afectados disponibles en GitHub.
“Con la ayuda de GitHub, pudimos obtener un conjunto de datos mucho más grande para incluir 588,840 repositorios únicos que incluyen ‘import tarfile’ en su código Python”.
Charles McFarland
Usando la tasa de vulnerabilidad del 61 % verificada manualmente, Trellix estima que hay más de 350,000 repositorios vulnerables. Lo peor es que muchos están siendo utilizados por herramientas de aprendizaje automático (por ejemplo, GitHub Copilot) que ayudan a los desarrolladores a completar un proyecto más rápido.
Estas herramientas automatizadas se basan en el código de cientos de miles de repositorios para proporcionar opciones de “completado automático”. Si proporcionan un código inseguro, el problema se propaga a otros proyectos sin que el desarrollador lo sepa.
Al profundizar en el problema, Trellix descubrió que el código de fuente abierta vulnerable a CVE-2007-4559 “abarca una gran cantidad de industrias”.
Como era de esperar, el más afectado es el sector del desarrollo, seguido por la tecnología web y de aprendizaje automático.
Explotando CVE-2007-4559
En una publicación técnica, el investigador de vulnerabilidades de Trellix, Kasimir Schulz, quien redescubrió el error, describió los pasos simples para explotar CVE-2007-4559 en la versión de Windows de Spyder IDE. Spyder IDE es un entorno de desarrollo integrado multiplataforma de código abierto para programación científica.
Los investigadores demostraron que la vulnerabilidad también se puede aprovechar en Linux. Lograron escalar la escritura de archivos y lograr la ejecución del código en una prueba en el servicio de administración de infraestructura informática de Polemarch.
Además de llamar la atención sobre la vulnerabilidad y el riesgo que representa, Trellix también creó parches para poco más de 11,000 proyectos. Las correcciones estarán disponibles en una bifurcación del repositorio afectado. Más tarde, se agregarán al proyecto principal a través de solicitudes de actualización.
Debido a la gran cantidad de repositorios afectados, los investigadores esperan que más de 70,000 proyectos reciban una solución en las próximas semanas. Sin embargo, alcanzar la marca del 100% es un desafío difícil, ya que los mantenedores también deben aceptar las solicitudes de fusión.
Si no se controla, esta vulnerabilidad que se ha agregado involuntariamente a cientos de miles de proyectos de código abierto y cerrado en todo el mundo, creará una superficie de ataque sustancial en la cadena de suministro de software.
Nos comunicamos con Python Software Foundation para obtener comentarios sobre CVE-2007-4559, pero no recibimos una respuesta hasta el momento de la publicación.