Kolejna porcja błędów…

Kolejna porcja błędów programistycznych #od0dopentestera
Dzisiaj nietypowo, nie będziemy bowiem przyglądać się konkretnemu językowi #programowanie a komendzie unzip z #linux

Czasami wymagania biznesowe sprawiają, że musimy dodać obsługę archiwów do naszego serwisu internetowego.
Mogą to być pliki zip, rar czy też tar.
Załóżmy, że prowadzimy serwis, w którym można tworzyć galerie.
Użytkownik może wysłać kilka zdjęć na raz przesyłając do nas archiwum zip.
Plik ten jest wypakowywany po stronie naszego serwera przy użyciu unzip do tymczasowego katalogu a następnie procesowane są wszystkie zdjęcia z rozszerzeniem .png.

Gdzie czyha niebezpieczeństwo?
W linuxie oprócz standardowego pliku istnieją symlinki – czyli pewnego rodzaju skróty, nie posiadające własnej treści a odnoszące się do innego zasobu.
Tworzymy więc skrot.png, który to będzie się odnosił do pliku /etc/passwd zawierającego informacje o kontach użytkownika w danym systemie.

ln -s /etc/passwd skrot.png

Następnie tworzymy archiwum z tym plikiem:

zip –symlinks archiwum.zip skrot.png

Teraz jeśli serwer wypakuje go przy użyciu:

unzip archiwum.zip -d temp

użytkownik wchodząc na dane zdjęcie otrzyma treść /etc/passwd.

Jak zatem zabezpieczyć się przed tym atakiem?
Najlepiej korzystać z modułów wypakowywania plików dostępnych w większości języków programowania.
Warto poszukać tam opcji, która wyłączy obsługę dowiązań symbolicznych.
Dodatkowo, przed każdą operacją na pliku warto sprawdzić, czy nie jest to symlink.

#informatyka #it #hacking #bezpieczenstwo