CVE-2025-10156: Vulnerabilidad de análisis de archivos ZIP en picklescan permite la elusión de seguridad y ejecución remota de código

picklescan es una herramienta de código abierto muy utilizada para analizar modelos de aprendizaje automático y otros archivos en busca de datos pickle de Python maliciosos. Los archivos pickle representan un formato común de serialización en Python, pero son notoriamente inseguros, ya que deserializar un objeto pickle especialmente diseñado puede llevar a la ejecución arbitraria de código. Esta biblioteca se integra a menudo en tuberías (pipelines) de seguridad, repositorios de artefactos y sistemas de carga de archivos para prevenir ataques contra aplicaciones que procesan modelos de IA/ML u otras estructuras de datos de Python.

El impacto de esta vulnerabilidad es crítico. Permite eludir completamente la función de seguridad del escáner. Un atacante no autenticado puede crear un archivo ZIP malicioso que picklescan no podrá analizar correctamente, declarándolo erróneamente como seguro. Cuando una aplicación descendente confía en este resultado y procesa el archivo pickle malicioso contenido en su interior, puede ocurrir una ejecución remota de código no autenticada.

Existe un exploit público disponible para esta vulnerabilidad, y se discute ampliamente en los entornos de seguridad. Aunque todavía no figura en el catálogo KEV de la CISA, la disponibilidad del exploit aumenta significativamente la probabilidad de explotación activa. Cualquier aplicación expuesta a Internet que utilice esta biblioteca para analizar archivos ZIP no confiables está en riesgo inmediato de compromiso.

Productopicklescan
Fecha2025-12-05 00:16:11

Resumen técnico

La causa principal de la vulnerabilidad se clasifica como CWE-755: Manejo inadecuado de condiciones excepcionales. El componente de escaneo ZIP de la herramienta picklescan no gestiona correctamente las excepciones que ocurren durante el procesamiento de archivos malformados dentro de un archivo ZIP.

La cadena de ataque procede de la siguiente manera:

  1. El atacante crea un archivo ZIP que contiene al menos dos archivos. El primer archivo está intencionalmente dañado con una Verificación de Redundancia Cíclica (CRC) incorrecta. El segundo archivo es un objeto pickle legítimo pero malicioso.
  2. Cuando picklescan abre el archivo e intenta leer el primer archivo, el CRC corrupto genera una excepción zlib.error.
  3. La función de escaneo no maneja esta excepción específica dentro del bucle de iteración de archivos. La excepción no controlada se propaga y causa la interrupción prematura de todo el proceso de escaneo.
  4. Debido a que el proceso se bloquea, el escáner nunca analiza el segundo archivo que contiene la carga útil (payload) de pickle malicioso. No se informa de ningún error a la aplicación que realiza la llamada que indique un escaneo parcial o fallido.
  5. La aplicación descendente, asumiendo que el escaneo se completó con éxito y no detectó amenazas, procede a extraer y deserializar el archivo pickle malicioso, activando la carga útil de ejecución remota de código.

Diferencia conceptual del código:

# Lógica vulnerable
def scan_zip_archive(archive):
    # Una excepción aquí termina toda la función
    for member in archive.infolist():
        file_content = archive.read(member.filename)
        scan_for_malicious_pickles(file_content)

# Lógica parcheada
def scan_zip_archive(archive):
    for member in archive.infolist():
        try:
            # La excepción se maneja por archivo, permitiendo que el bucle continúe
            file_content = archive.read(member.filename)
            scan_for_malicious_pickles(file_content)
        except zlib.error:
            log("No se pudo leer el miembro debido a un error de CRC:", member.filename)
            continue

Un atacante puede aprovechar esta elusión para ejecutar código arbitrario con los permisos de la aplicación que procesa el archivo, lo que lleva a un compromiso completo del sistema. Las versiones específicamente afectadas no han sido divulgadas; se recomienda a los usuarios asumir que todas las versiones anteriores a la última actualización son vulnerables.

Recomendaciones

  • Aplicar el parche inmediatamente: Actualizar la biblioteca picklescan a la versión más reciente disponible. Los desarrolladores deben asegurarse de que los sistemas de gestión de dependencias estén configurados para recuperar la versión con el parche.
  • Mitigaciones: Si no es posible aplicar el parche inmediatamente, encapsular las llamadas a la biblioteca picklescan en un bloque robusto de manejo de excepciones. Monitorear cualquier excepción proveniente de la biblioteca durante el procesamiento de ZIP y considerar tales eventos como fallos de escaneo, rechazando el archivo. Evaluar la posibilidad de deshabilitar temporalmente el procesamiento de todos los archivos ZIP provenientes de fuentes no confiables.
  • Caza y monitoreo:
    • Analizar los registros (logs) del sistema y de la aplicación en busca de excepciones no controladas relacionadas con zlib.error o el procesamiento de archivos ZIP, especialmente en aplicaciones de Python.
    • Monitorear los procesos de Python que generan procesos hijos inesperados, como /bin/sh, bash, powershell.exe o utilidades de red como curl y wget.
    • Buscar archivos recién creados en rutas inusuales, especialmente aquellos escritos por la cuenta utilizada para ejecutar la aplicación que usa picklescan.

  • Respuesta a incidentes: En caso de sospecha de compromiso, aislar inmediatamente el host afectado de la red para prevenir movimientos laterales. Conservar registros, volcados de memoria e imágenes de disco para un análisis forense. Investigar la actividad de la aplicación para identificar el momento del compromiso y cualquier dato que pudiera haber sido exfiltrado.
  • Defensa en profundidad: Ejecutar las aplicaciones que procesan archivos externos no confiables en entornos sandbox o contenerizados con privilegios mínimos. Implementar la segmentación de la red para limitar la capacidad de la aplicación para comunicarse con sistemas internos, reduciendo el impacto de una posible violación.

[Callforaction-THREAT-Footer]