CVE-2025-10156: bypass de seguridad en picklescan mediante CRC no válido que conduce a la ejecución arbitraria de código

picklescan es una herramienta de seguridad diseñada para detectar archivos pickle de Python maliciosos, comúnmente utilizados para serializar y deserializar estructuras de objetos de Python. Se emplea a menudo en aplicaciones del lado del servidor, particularmente en tuberías de Machine Learning Operations (MLOps), para analizar archivos cargados por los usuarios, como modelos de inteligencia artificial (por ejemplo, modelos de PyTorch), en busca de amenazas integradas antes de que sean procesados.

El impacto de esta vulnerabilidad es crítico, ya que permite a un atacante remoto no autenticado obtener ejecución arbitraria de código, lo que resulta en la completa vulneración del sistema. La vulnerabilidad deriva de un defecto de diseño de tipo “fail-open” (fallo abierto), en el que el escáner se interrumpe ante un error específico, lo que lleva a la aplicación principal a tratar erróneamente el archivo malicioso como seguro.

Esta vulnerabilidad representa una amenaza significativa para cualquier infraestructura que dependa de picklescan para validar archivos ZIP no confiables. Considerando que existe un exploit público y que la complejidad del ataque es baja, los sistemas expuestos a Internet que utilizan esta biblioteca están en alto riesgo de explotación activa. El problema principal no reside en el análisis del pickle en sí, sino en la gestión preliminar del formato contenedor del archivo (ZIP).

Productopicklescan
Fecha2025-12-04 12:46:36

Resumen técnico

La causa principal de esta vulnerabilidad es una gestión inadecuada de las condiciones excepcionales dentro del módulo de análisis de archivos ZIP de picklescan. El escáner no gestiona correctamente los errores que ocurren cuando encuentra un archivo dentro de un archivo ZIP con un código CRC (Cyclic Redundancy Check) no válido.

La cadena de ataque se desarrolla de la siguiente manera:

  1. Un atacante crea un archivo pickle malicioso diseñado para ejecutar código arbitrario durante la deserialización.
  2. El atacante integra este archivo dentro de un archivo ZIP, corrompiendo intencionalmente el valor CRC asociado al archivo malicioso en los metadatos del ZIP.
  3. Cuando picklescan intenta extraer y analizar los contenidos del archivo ZIP cargado, encuentra el archivo con el CRC no válido.
  4. Este encuentro genera una excepción no controlada que provoca la terminación prematura del proceso picklescan.
  5. La aplicación que realiza la llamada interpreta erróneamente este escaneo interrumpido como un éxito (condición “fail-open”), asumiendo que no se ha detectado contenido malicioso.
  6. El archivo validado —pero en realidad malicioso— se pasa luego a un componente de la aplicación que utiliza pickle.load() o una función similar. Esto activa la deserialización del pickle malicioso, con ejecución arbitraria de código bajo los permisos del proceso de la aplicación.

Una representación conceptual de la lógica defectuosa:

# Fallo conceptual
try:
    # Esta función se detiene ante un error de CRC
    picklescan.scan_zip_archive("archivo_malicioso.zip")
except Exception as e:
    # El escáner falla, pero la excepción no se gestiona
    # correctamente, o el flujo lógico continúa como si el escaneo hubiera pasado.
    log("El escáner falló, pero procederemos de todos modos.")

# El archivo malicioso es procesado ahora por otra parte de la aplicación
process_unscanned_file("archivo_malicioso.zip")

La vulnerabilidad afecta a todas las versiones de picklescan anteriores a la versión corregida. Los usuarios deben consultar el aviso oficial del proveedor para obtener información específica sobre la versión. Un exploit exitoso permite al atacante obtener el control total sobre el servidor afectado.

Recomendaciones

  • Aplicar el parche inmediatamente: actualizar picklescan a la última versión proporcionada por el desarrollador, la cual resuelve esta condición “fail-open”. Consulte el repositorio oficial del proyecto o los avisos de seguridad para conocer los números de versión correctos.

  • Implementar la lógica “fail-closed”: como mitigación crítica, asegúrese de que cualquier aplicación que integre picklescan (o cualquier escáner de seguridad) opere bajo un principio “fail-closed” (fallo cerrado). Si el proceso de escaneo devuelve un error o se interrumpe inesperadamente, el archivo analizado debe ser rechazado y puesto en cuarentena. No permita que el procesamiento continúe.

  • Threat hunting y monitoreo:

    • Monitorear los registros (logs) de la aplicación en busca de excepciones o errores relacionados con el procesamiento de archivos ZIP, en particular errores de CRC o de integridad de datos derivados de la biblioteca picklescan.
    • Buscar en los registros evidencias de que el proceso picklescan haya terminado inesperadamente o no haya completado un escaneo. Correlacionar estos eventos con actividades de carga de archivos.
    • Crear alertas para patrones en los que una carga de archivos sea seguida por un fallo del escáner y una elaboración inmediata del mismo archivo.

  • Respuesta a incidentes:

    • Si se sospecha de una vulneración, aísle inmediatamente el host afectado de la red para evitar movimientos laterales.
    • Conserve el archivo ZIP sospechoso y todos los registros relevantes de la aplicación y del sistema para el análisis forense. No intente abrir o analizar el archivo en una máquina de producción o personal.
    • Asuma una vulneración completa del sistema e inicie el plan de respuesta a incidentes previsto por la organización para identificar el alcance de la brecha y erradicar la amenaza.

  • Defensa en profundidad:

    • Ejecute aplicaciones que procesen archivos no confiables en entornos sandbox o contenerizados, con controles rígidos sobre los recursos y el acceso a la red, para limitar el daño potencial de una ejecución de código exitosa.
    • Aplique el principio de menor privilegio. Asegúrese de que la cuenta de servicio que ejecuta la aplicación tenga solo los permisos mínimos necesarios para su función.

[Callforaction-THREAT-Footer]