Deserializzazione insicura: oggetti che eseguono codice
Serializzare trasforma un oggetto in byte; deserializzare lo ricostruisce. Se i byte arrivano dall'utente, controlli quali oggetti nascono e con quali proprietà.
PHP: i metodi magici
unserialize($_COOKIE['data']) istanzia oggetti. Metodi come __wakeup() e __destruct() girano automaticamente. Una POP chain concatena classi presenti nel codebase finché una esegue qualcosa di utile (scrittura file, chiamata di sistema).
O:4:"Evil":1:{s:3:"cmd";s:2:"id";}Difesa
Non deserializzare dati non fidati. Usa formati dati (JSON) invece di serializzazione di oggetti. Se obbligatorio, firma i dati (HMAC) e verifica prima di deserializzare, oppure usa allowlist di classi (unserialize($s, ['allowed_classes'=>false])).