W większości języków programowania możemy tworzyć obiekty – czyli instancje klas. Każdy z obiektów może przechowywać jakieś dane. Czasami istnieje potrzeba, aby te dane gdzieś zapisać.
Serializacja to sposób na przechowywanie obiektów lub struktur tak, aby mogły być łatwo zachowane i transmitowane. Serializacja to generyczna nazwa i w różnych językach programowania te nazwy mogą się nieco różnić.
W Ruby, to „marshalling”, w go „gobbing” a w Python „pickling”.
Z niebezpieczną deserializacją mamy do czynienia jeżeli to użytkownik kontroluje zawartość zserializowanego obiektu. Serwer, aby przetworzyć tak zapisany obiekt, musi bowiem wykonać operację odwrotną, nazywaną deserializacją.
PHP
W PHP za deserializację odpowiedzialna jest funkcja unserialize.
- Tutaj materiał o PHP Object Injection.
- Lub jeśli wolisz materiały video.
- Możesz też sprawdzić tą prezentację.
- Samodzielne znajdowanie „gadżetów” jest trudne. Możesz sobie pomóc wykorzystując phpggc.
- 3 lata temu okazało się, że deserializacja w PHP może się odbywać nie tylko za pośrednictwem funkcji unserialize.
- Tutaj krótki przykład dla funkcji file_exists.
- Oraz dłuższe wytłumaczenie od IppSec.
- Dzięki tej technice odnaleziono wiele ciekawych błędów – np. w phpBB 3.2.3.
Java
Java również jest podatna na ten rodzaj błędów. Powstało wiele prezentacji na ten temat:
- Marshalling Pickles.
- Exploiting Deserialization Vulnerabilities in Java.
- Surviving the Java serialization apocalypse.
- The Forgotten Bug Class.
- Deserialize My Shorts
- Więcej prezentacji znajdziesz tutaj.
- Szybkie wprowadzenie do tematu jest tu.
- ysoserial pozwala na automatyzację pracy.
.NET
.NET również nie ustrzegł się tej klasy podatnosci:
- Przykład z deserializacją JSON.
- Wykonanie kodu poprzez kopiuj/wklej.
- .NET remoting.
- ASP.NET i ViewState
- ysoserial.net – narzędzie do automatyzacji.
Inne przykłady
Ruby również nie jest bezpieczne (zobacz CVE 2020–8165).
A jeżeli używasz plików YAML w Pythonie – zobacz ten materiał.
Na Deserialization Cheat Sheet znajdziesz krótkie podsumowanie.
Sporo tego materiału :). Pora na ćwiczenia praktyczne.