Trwa atak? Skontaktuj się z zespołem reagowania na incydenty

info@angelforce.eu
Bezpieczeństwo aplikacji webowych

Jak projektować i testować bezpieczne wgrywanie plików

Lista kontroli dla funkcji uploadu plików na podstawie OWASP Cheat Sheet, z tabelą testów do wykonania na każdym endpoincie uploadu.

Także w językach:EnglishTürkçeDeutschFrançaisEspañolItalianoNederlandsEesti

Ilustracja: Jak projektować i testować bezpieczne wgrywanie plików

Bezpieczny upload plików wymaga kilku kontroli stosowanych łącznie, a wymienia je OWASP File Upload Cheat Sheet. Ten artykuł przechodzi przez tę listę, wskazuje punkty, które łatwo pominąć, i zamienia ją w testy, które możesz uruchomić na każdym endpoincie uploadu.

Przed czym się bronisz

Cheat sheet grupuje zagrożenia pod hasłem "złośliwe pliki". Pierwsze to atak na oprogramowanie, które obsługuje plik. Atakujący dostarcza plik wykorzystujący podatność w parserze lub module przetwarzającym, a jako przykłady cheat sheet podaje exploit ImageTrick oraz XXE.

Drugie to phishing. Jako przykład cheat sheet podaje formularz rekrutacyjny, czyli upload staje się sposobem na podsunięcie wrogiego pliku osobom, które go otworzą.

Trzecie to dostępność. Bomby ZIP, bomby XML (atak billion laughs) i po prostu ogromne pliki mogą zapełnić przestrzeń dyskową serwera i pogorszyć jego dostępność.

Waliduj, zanim zaakceptujesz

Cheat sheet ustala kolejność: zastosuj walidację danych wejściowych przed walidacją rozszerzenia. Następnie pracuje na allowliście.

  • Wypisz dozwolone rozszerzenia. Zezwalaj tylko na bezpieczne, których wymaga funkcja biznesowa. Formularz zdjęcia profilowego nie ma powodu przyjmować niczego poza kilkoma typami obrazów.
  • Waliduj typ pliku. Nie polegaj na deklarowanym Content-Type, ponieważ można go sfałszować. Zwaliduj typ pliku i jego sygnaturę, zanim zaakceptujesz upload.
  • Ustaw limit długości nazwy pliku i, jeśli to możliwe, ogranicz dozwolone znaki.
  • Ustaw limit rozmiaru pliku.

Jeśli plik nie przejdzie którejkolwiek z tych kontroli, odrzuć go.

Zadbaj o nazwę i lokalizację

Cheat sheet zaleca zmianę nazwy pliku podanej przez użytkownika na nazwę generowaną przez aplikację. Rób to przy każdym uploadzie, niezależnie od typu pliku.

Miejsce przechowywania pliku jest równie ważne jak jego zawartość. Jeśli możesz, przechowuj uploady na innym serwerze. Jeśli to niemożliwe, trzymaj je poza webroot.

Gdy pliki muszą być publicznie dostępne, użyj handlera wewnątrz aplikacji, który mapuje identyfikator na plik (someid na file.ext), zamiast ujawniać ścieżkę do magazynu.

Dwa kolejne punkty z listy łatwo zapomnieć:

  • Pliki powinni móc wgrywać tylko uwierzytelnieni i uprawnieni użytkownicy.
  • Zabezpiecz upload przed atakami CSRF.

Skanuj i przetwarzaj to, co zachowujesz

Walidacja sprawdza, czy plik wygląda poprawnie. Cheat sheet dodaje kolejny krok: jeśli to możliwe, przepuść plik przez silnik antywirusowy lub sandbox, aby potwierdzić, że nie zawiera złośliwych danych.

Dla odpowiednich typów dokumentów, takich jak PDF i DOCX, rozważ CDR (Content Disarm & Reconstruct) jako dodatkowy etap przetwarzania.

Cheat sheet mówi też, że wszystkie używane biblioteki muszą być bezpiecznie skonfigurowane i aktualizowane. Skoro podatności parserów należą do wymienionych zagrożeń, ten punkt przypisz konkretnej osobie i ustal termin przeglądu.

Testuj każdy endpoint

Cheat sheet wymienia kontrole, a nie przypadki testowe. Każdy wiersz poniżej to nasza własna pochodna jego listy kontrolnej, a trzecia kolumna wskazuje, z którego punktu wynika. Uruchom testy na każdym endpoincie uploadu, także w narzędziach administracyjnych i w tych dodanych na potrzeby jednego klienta.

TestJak wygląda wynik pozytywnyPodstawa
Wgraj plik skryptu ze zmienionym rozszerzeniem na dozwoloneOdrzucony po walidacji typu plikuWyprowadzone: walidacja typu pliku
Wyślij niedozwolony plik z dozwolonym Content-TypeNadal odrzuconyWyprowadzone: nie ufaj nagłówkowi Content-Type
Prześlij bardzo długą nazwę plikuOdrzucona lub zastąpiona wygenerowaną nazwąWyprowadzone: limit długości nazwy pliku, generowane nazwy plików
Wgraj plik przekraczający limit rozmiaruOdmowaWyprowadzone: limit rozmiaru pliku
Spróbuj pobrać zapisany plik, zgadując jego ścieżkęNiedostępny inaczej niż przez handlerWyprowadzone: lokalizacja przechowywania, mapujący handler
Wgraj plik bez sesji lub bez tokenu CSRFOdmowaWyprowadzone: uprawnieni użytkownicy, ochrona przed CSRF
Wgraj bombę ZIP lub XML w środowisku testowymUsługa pozostaje dostępnaWyprowadzone: zagrożenie dla dostępności

Jako szerszy punkt odniesienia służy OWASP Web Security Testing Guide, który określa się jako najważniejsze źródło wiedzy o testowaniu bezpieczeństwa dla twórców aplikacji webowych i specjalistów ds. bezpieczeństwa. OWASP Application Security Verification Standard zawiera numerowane wymagania, względem których możesz weryfikować aplikację. Jeśli powołujesz się na któreś z nich w zgłoszeniu lub raporcie, podaj wersję, na przykład v5.0.0-1.2.5, ponieważ identyfikatory mogą zmieniać się między wersjami standardu.

Od czego zacząć

  1. Wypisz każdy endpoint, który przyjmuje plik, w tym narzędzia administracyjne, funkcje importu i stare wtyczki.
  2. Dla każdego z nich określ dozwolone rozszerzenia, maksymalny rozmiar pliku i maksymalną długość nazwy pliku oraz zastosuj walidację danych wejściowych przed sprawdzeniem rozszerzenia.
  3. Zastąp nazwy plików podane przez użytkownika nazwami generowanymi. Przenieś magazyn na osobny serwer lub poza webroot, a pliki publiczne udostępniaj przez handler mapujący identyfikatory na nazwy plików.
  4. Dodaj walidację typu i sygnatury pliku, krok z antywirusem lub sandboxem oraz CDR dla przyjmowanych typów dokumentów. Sprawdź, czy biblioteki do parsowania są aktualne i bezpiecznie skonfigurowane.
  5. Zamień tabelę testów w skryptowane kontrole i uruchamiaj je przed każdym wydaniem. Jeśli chcesz niezależnej oceny wyniku, nasza usługa testów penetracyjnych przetestuje endpointy, a nasze wsparcie w bezpiecznym wytwarzaniu oprogramowania pomoże, jeśli funkcja jest jeszcze na etapie projektowania. Wytyczne OWASP dotyczące uploadu plików sprawdzą się w obu przypadkach jako lista kontrolna do przeglądu.

Jak możemy pomóc

Testy penetracyjne

Atakujemy Państwa sieci, aplikacje i ludzi tak, jak zrobiłby to prawdziwy przeciwnik, a potem pokazujemy, jak zamknąć każdą lukę.

Napisz do nas
Zespół AngelForce

Artykuł przygotował zespół AngelForce: konsultanci ds. bezpieczeństwa z certyfikatami CEH, LPT Master i CISA, którzy testują, monitorują i chronią systemy organizacji w całej Europie i w Turcji.

Tekst przygotowany z pomocą AI na podstawie publicznych źródeł wymienionych poniżej i sprawdzony przed publikacją przez zespół AngelForce.

Źródła

  1. cheatsheetseries.owasp.org/cheatsheets/File_Upload_Cheat_Sheet.html
  2. owasp.org/projects/asvs
  3. owasp.org/projects/web-security-testing-guide

Artykuły w temacie: Bezpieczeństwo aplikacji webowych

Prosimy napisać, co chcą Państwo chronić

Prosimy opisać swoje środowisko i cele. Odpowiemy e-mailem.

Napisz do nas
info@angelforce.eu

AngelForce OÜ · Tallinn, Estonia