Deserializacja – niebezpieczna metoda (ataku hakerskiego, testu penetracyjnego, działań wywiadowczych – określenia zamienne ;))

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.

Java

Java również jest podatna na ten rodzaj błędów. Powstało wiele prezentacji na ten temat:

.NET

.NET również nie ustrzegł się tej klasy podatnosci:

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.

Tagi:

Podziel się postem :)

Najnowsze:

Oprogramowanie

Nowości w Google Maps. Są też zmiany w wyszukiwarce

Google zaprezentował kilka nowych funkcji, które w najbliższym czasie trafią do wyszukiwarki oraz Map. Nowości pomogą łatwiej i szybciej docierać do wyszukiwanych informacji, a w przypadku Google Maps – analizować sytuację, jaką można zastać w miejscu docelowym podróży.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.