cd ~/blog

~/vulns/insecure-pickle-deserialization.md

Insecure Pickle Deserialization

miscautor: Jordy Pérez Osorio aviso legal
PythonPickledeserialization

~2 min de lectura


1. Descripción técnica

Insecure Pickle Deserialization ocurre cuando una aplicación entrega datos no confiables a pickle.load() o pickle.loads(). Pickle no reconstruye sólo valores: su protocolo puede importar funciones y ejecutar operaciones indicadas durante la reconstrucción del objeto.

Base64, compresión o cifrado sin autenticidad sólo cambian la representación. El límite de confianza se mantiene roto si un atacante puede crear o modificar el byte stream que llega al deserializador.

// renderizando diagrama…

2. Impacto y condiciones

El impacto puede ser ejecución de código, modificación de estado o denegación de servicio. Para demostrar RCE se necesita evidencia de que una entrada controlada alcanza el unpickler y que la receta utilizada invoca una operación peligrosa. La simple presencia de pickle no prueba explotabilidad.

3. Validación y detección

Conviene seguir el flujo desde HTTP, colas, cookies, archivos o bases de datos hasta pickle.load*. Para inspección estática de un payload no confiable, pickletools es más seguro que deserializarlo. En ejecución, deben vigilarse procesos hijos, comandos y conexiones salientes creados por servicios Python.

4. Explotación documentada en los writeups

4.1 150-banner

/api/serialize decodificaba el cuerpo desde Base64 y lo entregaba a pickle.loads(). El objeto enviado definía __reduce__() para invocar os.system con una reverse shell. Como el servicio Flask estaba configurado con User=root, la conexión heredó UID 0.

5. Mitigación

  • No utilizar Pickle para datos que crucen un límite de confianza.
  • Preferir formatos de datos sin semántica de ejecución y validar un esquema estricto.
  • Si un sistema heredado exige Pickle, autenticar los mensajes antes de procesarlos y mantener las claves fuera del alcance del cliente.
  • Ejecutar el consumidor con privilegios mínimos y restringir sus recursos y conexiones.

6. Clasificación y referencias

// relacionados