6.7 Insecure Deserialization

Serializace a Deserializace
Serializace je proces převodu objektu (z aplikační paměti) do formátu, který lze uložit (např. do souboru nebo poslat po síti), uchovávajíc přitom jak data, tak datovou strukturu.
Deserializace je opačný postup, kdy se ze serializovaného formátu objekt staví znovu do objektové struktury v paměti aplikace.
Zranitelnost nebezpečné deserializace
Problém nastává v okamžiku, kdy server deserializuje vstup od uživatele bez toho, aniž by validoval neporušenost obsahu. Útočník může do serializovaného bloku vložit své vlastní (zákeřné) objekty. Ty během deserializace vyvolají řetězení vnitřních logických struktur – tzv. "Gadget Chains". Výsledkem bývá Remote Code Execution (RCE) neboli spuštění kódu útočníka přímo na straně serveru.

Nástroje a formáty u různých jazyků

Existuje velké množství programovacích jazyků a knihoven, u kterých je možné RCE docílit přes nebezpečnou deserializaci. Obvykle se používají specializované payloadové balíčky:

Příklad použití ysoserial (Java)
Příkaz k vygenerování RCE payloadu v Javě, který přečte citlivý soubor a vytvoří tak nebezpečný base64 serializovaný blob:
java -jar ysoserial-all.jar CommonsCollections4 'rm /home/carlos/morale.txt' | base64 -w 0

Nové verze Javy (např. verze 21) ale začaly masivně přecházet na přísná zabezpečení, takže generování a zneužití přes ysoserial často vyžaduje spuštění s explicitním flagy pro uvolnění modulárních omezení (např. --add-opens), které se u moderních projektů postupně potlačují.