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
- CWE-502: Deserialization of Untrusted Data.
- Python: documentación y advertencia de seguridad de Pickle.
- CWE-502.
- No confundir con Python Library Hijacking, que altera la resolución de un módulo importado.