Kontrola dostępu, której skaner nie złapie
Szukaj błędów dostępu, które omija skaner: podmieniony identyfikator, niższa rola i dane innego użytkownika w odpowiedzi.
Ten wpis jest częścią serii Podstawy testowania bezpieczeństwa. Jeśli pominąłeś poprzedni, przeczytaj Część 2 — OWASP ZAP dla QA.
Wprowadzenie — skaner miał jednego użytkownika
ZAP chodził jako Alex i zgłosił, co Alex może otworzyć. Nie zalogował się jako Blair i nie poprosił o fakturę Alexa. Ten przypadek to identyfikator i druga sesja. Skanery są w tym słabe. Ty nie.
Dwa konta, jeden obiekt
Utwórz dwóch użytkowników na środowisku testowym. Każdemu daj obiekt, którego drugi nie może widzieć: fakturę, wiadomość, plik. Jako Blair poproś o obiekt Alexa, zmieniając identyfikator.
# token Blaira, faktura Alexa
curl -s -o /dev/null -w "%{http_code}" \
-H "Authorization: Bearer $BLAIR" \
https://staging.example.com/api/invoices/1001
Jedyny wynik, który przechodzi, to 403 albo 404, z treścią bez kwot, adresu i pozycji Alexa. 200 to defekt. 404, które i tak zawiera pozycje, to defekt. 500 ze stack trace i wierszem z bazy to defekt.
To samo dla zapisu. Blair nie może opłacić, anulować ani skomentować faktury Alexa.
Rola, nie tylko właściciel
Błędy poziome to „inny użytkownik taki jak ja”. Błędy pionowe to „rola, której nie mam”.
Zaloguj się najniższą rolą, która w ogóle otwiera aplikację. Wywołaj akcję, którą uważasz za zarezerwowaną dla admina: eksport klientów, zmiana ceny, zaproszenie do zespołu, odczyt audytu. Schowany przycisk w UI nie jest kontrolą. Kontrolą jest żądanie. Wyślij żądanie, które wysłałby przycisk.
Macierz dziesięciu ról i czterdziestu akcji to arkusz, którego nie utrzymasz. Testuj akcje, które wystawiają dane albo ruszają pieniądze, dla roli, którą ma większość użytkowników.
Endpointy list
Adres szczegółu, który zwraca 404, i tak może wyciec przez listę. Otwórz GET /api/invoices jako Blair i szukaj identyfikatora Alexa. Filtry i wyszukiwanie się liczą. ?userId=alex na sesji Blaira to ten sam błąd z query stringiem.
Co zgłaszasz
Kroki to dwa konta, żądanie i pole w treści, które należało do drugiej osoby. „IDOR” w tytule jest opcjonalne. „Blair pobiera PDF faktury Alexa” to błąd.
Podsumowanie
Skaner z jedną sesją nie podmieni za ciebie identyfikatora. Dwóch użytkowników, jeden obiekt, najniższa codzienna rola i endpoint listy. To jest to przejście.
Zadanie na ten tydzień: Wybierz jeden obiekt, który ma właściciela. Poproś o niego tokenem drugiego użytkownika. Jeśli w treści są dane pierwszego, zgłoś to z odpowiedzią, po zanonimizowaniu.
Następny wpis w serii: Część 4 — Sesje, ciasteczka i CSRF.