Mishandling of Exceptional Conditions: Metody testowania
Metody testowania podatności: Mishandling of Exceptional Conditions
Punktem wyjścia jest test WSTG-ERRH-01 Testing for Improper Error Handling z OWASP Web Security Testing Guide 4.2. WSTG skupia się na tym, co błędy ujawniają. Wymienia też skutki takie jak DoS i ominięcie kontroli, ale nie podaje dla nich procedury testu — punkty 4–7 ją uzupełniają.
1. Błędy serwera WWW
Według WSTG, żeby wywołać komunikaty błędów serwera:
- żądaj nieistniejących plików i katalogów (404),
- żądaj istniejących katalogów (403, pusta strona albo listing katalogu),
- wyślij żądanie łamiące specyfikację HTTP — bardzo długa ścieżka, uszkodzony format nagłówków, zmieniona wersja HTTP.
Nawet gdy aplikacja ma własne strony błędów, żądanie niezgodne z RFC obsługuje wbudowany serwer — a jego domyślnych komunikatów często nikt nie nadpisał.
2. Błędy aplikacji
Procedura z WSTG:
- Zidentyfikuj punkty wejścia, w których aplikacja oczekuje danych.
- Ustal oczekiwany typ danych (string, liczba, JSON, XML…).
- Fuzzuj każdy punkt wejścia pod kątem tego typu.
- Na podstawie odpowiedzi ustal, która usługa zwraca błąd (baza, mikroserwis…), i zawęź listę danych testowych.
Jeśli na pełny fuzzing nie ma czasu, WSTG radzi dobrać ręcznie dane, które najłatwiej psują parser: zamykający nawias w ciele JSON, długi tekst tam, gdzie oczekiwane są dwa znaki, CRLF w parametrach, znaki niedozwolone w nazwach plików.
Uwaga na format odpowiedzi. Błąd bywa zwracany jako 200 OK z komunikatem w treści, ukryty w przekierowaniu 302 albo w niestandardowym formacie. W mikroserwisach różne formaty błędów pozwalają ustalić, która usługa obsługuje które żądanie.
3. Brakujące, nadmiarowe i nietypowe parametry
Testy odpowiadające konkretnym CWE z kategorii:
- usuń parametr z żądania (CWE-234) — czy aplikacja odrzuca żądanie, czy przyjmuje wartość domyślną, która omija kontrolę?
- dodaj parametr spoza specyfikacji albo zduplikuj istniejący (CWE-235),
- podaj
null, pustą tablicę, pusty obiekt, liczbę ujemną, zero (dzielenie przez zero — CWE-369), bardzo dużą liczbę, - podaj nieznaną wartość enum — np. rolę lub typ zdarzenia, którego aplikacja nie zna. Sprawdź, czy gałąź
defaultodmawia, czy przepuszcza.
4. Fail open w kontrolach bezpieczeństwa
Dla każdej kontroli (autoryzacja, walidacja, limit, weryfikacja tokenu, CAPTCHA) spróbuj doprowadzić ją do błędu, a nie do odmowy:
- uszkodzony token zamiast nieprawidłowego (zły format Base64, brakujący segment JWT),
- żądanie zasobu, który nie istnieje, w kontekście innego użytkownika — czy dostajesz
404,403czy500? Różne kody to wyrocznia, która zdradza istnienie obiektów, - sytuacja braku uprawnień do zasobu technicznego (CWE-274, CWE-280) — np. plik lub katalog bez prawa odczytu.
Oczekiwany wynik: każdy błąd kontroli kończy się odmową (ASVS 5.0, wymaganie 16.5.3).
5. Przerwane operacje wieloetapowe
- Przerwij proces w połowie: zamknij połączenie po wysłaniu żądania, przekrocz timeout, wyślij krok 3 bez kroku 2.
- Sprawdź, czy stan po przerwaniu jest spójny: czy pieniądze, punkty, rezerwacje, stany magazynowe nie zostały zmienione częściowo.
- Wyślij to samo żądanie równolegle wiele razy — wyjątek w jednym wątku i sukces w drugim to klasyczna droga do podwójnego wykonania operacji (powiązane z wyścigami — patrz A06:2025 Insecure Design).
6. Awarie zależności
Jeśli masz kontrolę nad środowiskiem testowym (test typu grey/white box):
- zatrzymaj bazę, cache, kolejkę albo usługę zewnętrzną,
- spowolnij zależność zamiast ją wyłączać — wolna zależność bywa groźniejsza niż niedziałająca, bo trzyma wątki wywołującego,
- sprawdź, czy aplikacja w trybie awaryjnym nadal egzekwuje kontrole bezpieczeństwa (ASVS 16.5.2), np. czy brak usługi autoryzacji nie oznacza „wpuść wszystkich".
7. Wyczerpanie zasobów
- Wywołuj wielokrotnie operacje kończące się błędem (upload niepoprawnego pliku, nieudany import) i obserwuj zużycie pamięci, deskryptorów plików, połączeń do bazy.
- Sprawdź, czy istnieją limity: rate limiting, maksymalny rozmiar żądania, kwoty na użytkownika.
Testy obciążeniowe uzgadniaj z właścicielem systemu — mogą wywołać realną niedostępność.
✅ Tipy testerskie
- Zapisuj w raporcie treść błędu i to, co z niej wynika — wersja frameworka, nazwa tabeli, ścieżka na serwerze.
- Porównuj zachowanie tej samej operacji przy sukcesie, odmowie i błędzie — różnice są wyrocznią.
- Skaner wykryje stack trace, ale fail open i niespójny stan to błędy logiki — wymagają testu ręcznego.
W kolejnym kroku: Weryfikacja konfiguracji aplikacji i serwera