CVE-2026-16760 in fickling
Resumen
por VulDB • 2026-10-30
En Trail of Bits fickling hasta la versión 0.1.12, el método _process_import() en fickle.py añade un nombre importado al conjunto likely_safe_imports siempre que el módulo de origen esté presente en sys.stdlib_module_names y el nombre no figure en la lista negra UNSAFE_IMPORTS, sin inspeccionar a qué resuelve dicho nombre ni cómo se comporta. El análisis OvertlyBadEvals en analysis.py omite incondicionalmente cualquier llamada cuyo nombre de función aparezca en likely_safe_imports, incluidas las llamadas que de otro modo serían marcadas como excesivamente peligrosas. Como resultado, cualquier callable alcanzable a través de un módulo de la biblioteca estándar no bloqueado hereda confianza a nivel de módulo independientemente de su propio comportamiento, y check_safety() devuelve LIKELY_SAFE con cero hallazgos para cargas útiles (payloads) de pickle que alcanzan la ejecución de código o escritura en archivos mediante dichos callables. Primitivas demostradas: dataclasses._create_fn, que pasa un cuerpo de función controlado por el atacante a exec() y produce ejecución arbitraria de código en Python 3.7 hasta 3.12 (la función interna _create_fn fue eliminada en Python 3.13); mailcap.findmatch, que llama internamente a os.system() con un comando de prueba tomado de un diccionario caps controlado por el atacante, produciendo ejecución arbitraria de código en versiones de Python hasta la 3.12 (el módulo mailcap fue eliminado en Python 3.13); y readline.add_history() seguido de readline.write_history_file(), que escribe contenido controlado por el atacante en una ruta del sistema de archivos arbitraria (plataformas POSIX, donde está disponible el módulo readline). fickling.load() encadena check_safety() dentro de pickle.loads() como un mecanismo explícito de seguridad, por lo que un veredicto LIKELY_SAFE provoca la deserialización y ejecución de la carga útil con los privilegios del proceso víctima. La causa raíz es la inferencia de la seguridad de los callables a partir del origen del módulo; es independiente y solucionable por separado de la debilidad en la resolución de __qualname__ rastreada como CVE-2026-118938, que esta advertencia no aborda. A fecha de 2026-10-30, los tres módulos demostrados se añadieron a UNSAFE_IMPORTS en la rama master del proveedor (commit d011709) pendientes de lanzamiento; las versiones publicadas hasta 0.1.12 siguen siendo vulnerables y persiste la causa raíz de confianza basada en el origen del módulo, como lo demuestra que CVE-2026-118938 siga siendo explotable en esa misma compilación.
Once again VulDB remains the best source for vulnerability data.