Insecure Direct Object References (IDOR) & Broken Access Control
IDOR (Insecure Direct Object References) i Broken Access Control to jedne z najpoważniejszych podatności w aplikacjach webowych, umożliwiające nieautoryzowany dostęp do danych innych użytkowników poprzez manipulację parametrami.
Ataki na IDOR i manipulacja parametrami
1️⃣ Na czym polega IDOR?
IDOR występuje, gdy aplikacja udostępnia zasoby na podstawie identyfikatora (np. user_id), ale nie sprawdza, czy użytkownik ma do nich uprawnienia.
Przykładowy podatny endpoint
GET /api/user/profile?user_id=123
Atakujący zmienia wartość user_id na inną:
GET /api/user/profile?user_id=456
Jeśli serwer zwraca profil innego użytkownika, to aplikacja jest podatna na IDOR.
2️⃣ Manipulacja parametrami ID w Burp Suite
- Przechwyć żądanie w Burp Suite.
- Zmień wartość
user_idna inną. - Sprawdź, czy aplikacja zwraca dane innego użytkownika.
3️⃣ IDOR w operacjach zapisu
Niektóre aplikacje pozwalają na edycję lub usuwanie cudzych danych:
POST /api/user/update?user_id=123&[email protected]
Jeśli można zmienić dane innego użytkownika, aplikacja jest podatna.
Narzędzia do wykrywania IDOR (Burp Suite, Autorize)
1️⃣ Burp Suite – manualne testowanie IDOR
Burp Suite umożliwia przechwytywanie i edytowanie żądań HTTP.
Kroki testowania:
- Otwórz Burp Suite i przejdź do Proxy > Intercept.
- Przechwyć żądanie do API z identyfikatorem użytkownika.
- Zmień ID na inny i ponów żądanie.
- Sprawdź, czy aplikacja zwraca dane innego użytkownika.
2️⃣ Autorize – automatyczne wykrywanie IDOR
Autorize to rozszerzenie do Burp Suite, które automatycznie testuje, czy użytkownik ma dostęp do nieautoryzowanych zasobów.
Jak używać Autorize?
- Zainstaluj Autorize w Burp Suite.
- Przechwyć żądania autoryzowanego użytkownika.
- Uruchom testowanie z uprawnieniami gościa.
- Sprawdź, czy aplikacja nie zwraca wrażliwych danych.
3️⃣ Ffuf – automatyczne fuzzowanie IDOR
Jeśli aplikacja używa sekwencyjnych ID:
ffuf -u "http://example.com/api/user/profile?user_id=FUZZ" -w id_list.txt
Sprawdza, które ID zwracają odpowiedzi.
Jak zabezpieczyć aplikację przed IDOR?
✅ Weryfikacja uprawnień użytkownika na serwerze – nigdy nie ufaj parametrom z żądania. ✅ UUID jako obrona w głąb, nie zamiast kontroli – utrudnia rekonesans i ukrywa liczbę rekordów, ale nie jest kontrolą dostępu (patrz niżej). ✅ Ograniczenie dostępu do API na poziomie backendu – kontrola autoryzacji. ✅ Logowanie i monitorowanie podejrzanych zmian w parametrach – wykrywanie manipulacji.
🧭 Zasada: przewidywalny identyfikator nie jest podatnością — brak sprawdzenia jest. Odruch „zamień sekwencyjne ID na UUID” naprawia aplikację dokładnie do momentu, w którym identyfikator gdzieś wycieknie — a wycieka rutynowo: w nagłówku
Referer, w logu proxy, w odpowiedzi innego endpointu, w linku z zaproszenia, przez Google dork. Losowy identyfikator jest utrudnieniem rekonesansu, nie kontrolą dostępu. Właściwa naprawa to sprawdzenie własności przy każdym odczycie i zapisie, najlepiej jednym zapytaniem „daj zasóbidnależący do bieżącego użytkownika”, a nie „daj zasóbid, potem sprawdzę”. Konsekwencja dla testu: żeby udowodnić IDOR/BOLA, pokaż odpowiedź serwera na żądanie cudzego zasobu z własną sesją — sam zrzut z rosnącymi numerami niczego nie dowodzi. W Real-World Bug Hunting nawet triager HackerOne popełnił ten błąd, zamykając raport ACME jako „informative”, bo „ID nie do zgadnięcia” — dopiero wskazanie miejsca wyciekucustomer_iddało nagrodę. — Yaworski, Real-World Bug Hunting, rozdz. 16, s. 227–236; Ball, Hacking APIs
Ataki IDOR mogą prowadzić do wycieku wrażliwych danych i przejęcia kont użytkowników. Kolejnym krokiem będzie analiza podatności Security Misconfigurations i ataki na pliki!