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.

Podziel się postem:

Najnowsze:

Oprogramowanie

Android Auto 12.9 nadchodzi. Zmiany głównie w Mapach Google

Aktualizacji doczekał się system Android Auto. Użytkownicy już teraz mogą wypróbować wersję 12.9. Trzeba jednak wiedzieć, iż jest ona obecnie dostępna w fazie beta. Zmianą, którą zauważą użytkownicy jest poprawienie dodawania przystanków w aplikacji Mapy Google.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *