La vulnerabilida de Python de 15 años sin parches permite la ejecución de código en proyectos de 350k

Una vulnerabilidad en el lenguaje de programación Python que se ha pasado por alto durante 15 años ahora vuelve a ser el centro de atención, ya que probablemente afecta a más de 350 000 repositorios de código abierto y puede conducir a la ejecución de código.

Revelado en 2007 y etiquetado como CVE-2007-4559, la vulnerabilidad de seguridad nunca recibió un parche, 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, en el código que utiliza la  función tarfile.extract()  no desinfectada o los valores predeterminados integrados de tarfile.extractall(). Es una vulnerabilidad de recorrido de ruta 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 de la vulnerabilidad en los ataques, representa un riesgo en la cadena de suministro de software.

A principios de este año, mientras investigaba otra vulnerabilidad de seguridad, un investigador de Trellix redescubrió CVE-2007-4559, 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 desinfectar los archivos de los miembros antes de solicitar tarfile.extract() tarfile.extractall(), se genera una vulnerabilidad de cruce 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 de extracción 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 de extracción y el nombre en el objeto TarInfo”

CVE-2007-4559: unión de ruta con fuente de nombre de archivo

Menos de una semana después de la divulgación, un  mensaje en el rastreador de vulnerabilidades de Python  anunció que la vulnerabilidad estaba cerrada, 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 rasparon 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 %, lo que indica una vulnerabilidad generalizada.

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 ‘importar archivo tar’ 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, muchos de ellos 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, la vulnerabilidad se propaga a otros proyectos sin que el desarrollador lo sepa.

GitHub Copilot sugiere fuente de código de extracción de archivos tar vulnerables

Al profundizar en la vulnerabilidad, 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 de blog técnica hoy, el investigador de vulnerabilidades de Trellix, Kasimir Schulz, quien redescubrió la vulnerabilidad, describió los pasos simples para explotar CVE-2007-4559 en la versión de Windows de Spyder IDE, 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 de TI 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 extracción.