Luki bezpieczeństwa przy przesyłaniu plików
Autor: Idego Group

Przesyłanie plików to częsta funkcja aplikacji webowych. Jednak wielu programistów błędnie uważa, że zadanie kończy się w momencie, gdy plik pomyślnie dotrze do serwera. Ten błąd tworzy luki bezpieczeństwa, które wykorzystują cyberprzestępcy. Prawdziwe ukończenie wymaga spełnienia dwóch warunków: przesyłanie kończy się sukcesem ORAZ odbywa się w bezpieczny sposób.
Obejścia oparte na rozszerzeniach
Programiści powszechnie weryfikują typy plików poprzez sprawdzanie rozszerzeń za pomocą białych lub czarnych list. Jednak te podejścia mają słabości. Wzorce regex uwzględniające wielkość liter pozwalają na przesyłanie plików takich jak shell.pHp z pominięciem ograniczeń. Nieprawidłowo zakotwiczone wzorce dopuszczają pliki jak shell.php.jpg. Skracanie nazw plików może skutkować plikiem kończącym się na .php zamiast .jpg.
Wstrzykiwanie bajtu null
Zmiana nazwy pliku na shell.php%00.jpg wykorzystuje sposób, w jaki niektóre języki traktują bajty null jako terminatory, pozwalając na wykonanie PHP mimo pozornego zakończenia na .jpg.
Zagrożenia SVG i XML
Pliki SVG to dane XML podatne na ataki cross-site scripting (XSS) z zapisem. Złośliwy JavaScript osadzony w plikach SVG wykonuje się, gdy użytkownicy je pobierają.
Przemierzanie katalogów
Nazwy plików takie jak ../../../etc/passwd mogą nadpisywać krytyczne pliki serwera. Ochrona wymaga używania losowo generowanych nazw plików z oryginalnymi nazwami przechowywanymi oddzielnie jako metadane.
Odmowa usługi
Równoległe przesyłanie dużych plików wyczerpuje zasoby serwera lub przestrzeń dyskową. Walidacja rozmiaru pliku zapewnia niezbędną ochronę.
Fałszowanie Content-Type
Nagłówek Content-Type można łatwo manipulować za pomocą narzędzi przechwytujących. Interpretacja serwera opiera się na rzeczywistej zawartości pliku, a nie na nagłówkach.
Obejście numeru magicznego
Atakujący dołączają prawidłowe sygnatury plików, takie jak GIF89a, do złośliwych plików, aby oszukać systemy walidacji numerów magicznych.
Wstrzykiwanie poleceń
Gdy nazwy plików są przekazywane do binarnych plików systemowych, nazwy takie jak file;whoami;pwd.jpg umożliwiają wykonanie poleceń. Losowe nazwy plików eliminują to ryzyko.
Zalecenia bezpieczeństwa
Programiści powinni unikać całkowitego ufania danym wprowadzanym przez użytkowników. Wdrożenie wyspecjalizowanego oprogramowania do walidacji, utrzymywanie zaktualizowanych zależności i ocena wielu czynników walidacji wzmacniają mechanizmy obronne.