Praktyczne ćwiczenie: Testowanie i mitigacja podatności Broken Access Control
🎯 Cel ćwiczenia
W tym ćwiczeniu:
- przetestujesz aplikację podatną na Broken Access Control (IDOR),
- wykorzystasz narzędzia do przejęcia danych innego użytkownika,
- zasymulujesz atak i przeprowadzisz jego mitigację po stronie backendu.
🧪 Scenariusz testowy
Aplikacja: System zarządzania zamówieniami użytkowników (REST API).
Endpoint:
GET /api/orders/{orderId}
Użytkownik user1
ma przypisane zamówienie o ID 1001
.
🧪 Krok 1: Zaloguj się jako user1
Uzyskaj token JWT (np. w Postmanie):
{
"token": "eyJhbGciOiJIUzI1NiIsInR5..."
}
🧪 Krok 2: Prześlij zapytanie do swojego zamówienia
GET /api/orders/1001
Authorization: Bearer <token_user1>
➡️ Odpowiedź: status 200
, dane zamówienia user1
.
🧪 Krok 3: Spróbuj uzyskać dane orderId=1002 (które należy do user2
)
GET /api/orders/1002
Authorization: Bearer <token_user1>
➡️ Odpowiedź 200
– dane user2
. 🔥 Luka IDOR!
✅ Oczekiwane zachowanie (po naprawie)
Aplikacja powinna zwrócić:
HTTP/1.1 403 Forbidden
lub
HTTP/1.1 404 Not Found
Jeśli użytkownik user1
nie ma dostępu do orderId=1002
.
🛠️ Mitigacja – backend (Node.js przykład)
app.get('/api/orders/:id', authenticateToken, async (req, res) => {
const order = await Order.findById(req.params.id);
if (!order || order.userId !== req.user.id) {
return res.status(403).json({ message: "Access denied" });
}
res.json(order);
});
🧠 Dodatkowe scenariusze do przetestowania
- Modyfikacja
userId
w żądaniuPOST
/PUT
- Zmiana ról w formularzu (ukryte pola
role=admin
) - Wywołanie endpointów
/admin
jako użytkownik nieuprzywilejowany - Token JWT innego użytkownika – porównanie odpowiedzi
🛠️ Środowisko
- Aplikacja testowa: OWASP Juice Shop
- System operacyjny: Kali Linux / Parrot OS / inna dystrybucja z narzędziami pentestowymi
- Przeglądarka: Firefox z dodatkami:
- FoxyProxy
- HackBar / RESTer
- Proxy: Burp Suite Community lub Pro
BONUS
🔍 Scenariusz 1: Bezpośredni dostęp do zasobów (IDOR)
- Zaloguj się jako zwykły użytkownik.
- Przejdź do historii zamówień lub danych konta.
- Zidentyfikuj parametr z ID (np.
orderId=123
). - Zmień ID w adresie URL na inny (np.
orderId=124
) i sprawdź, czy masz dostęp do cudzych danych.
Oczekiwany wynik: Możliwość przeglądania danych innych użytkowników oznacza podatność typu IDOR.
🔓 Scenariusz 2: Brak kontroli dostępu do panelu administratora
- Wejdź bezpośrednio na URL
/admin
lub/api/users
. - Sprawdź, czy serwer zwraca dane mimo braku autoryzacji.
- Przetestuj dostęp za pomocą zmodyfikowanych ciastek sesyjnych (np.
role=admin
).
Oczekiwany wynik: Uzyskanie dostępu bez odpowiednich uprawnień.
🧪 Testy przy użyciu Burp Suite
- Użyj Proxy do przechwytywania żądań.
- Zidentyfikuj endpointy zależne od uprawnień użytkownika.
- Użyj Intrudera do fuzzowania parametrów ID/role.
- Sprawdź odpowiedzi HTTP (
200 OK
,403 Forbidden
,401 Unauthorized
).
🔐 Mitigacja
- Zasada minimalnych uprawnień – użytkownicy powinni mieć dostęp tylko do tego, co jest im potrzebne.
- Weryfikacja po stronie serwera – nie ufaj danym z klienta.
- Modele ról i uprawnień – stosuj mechanizmy RBAC (Role-Based Access Control).
- Testy automatyczne uprawnień – integruj z CI/CD.
- Audyt logów – loguj nieudane próby dostępu.
📚 Zadania do wykonania
✅ Zidentyfikuj co najmniej jedną funkcję podatną na Broken Access Control.
✅ Przeprowadź atak (np. IDOR lub dostęp do ukrytego endpointa).
✅ Zapisz wynik testu i dowód (zrzut ekranu, odpowiedź HTTP).
✅ Opracuj rekomendację mitigacji.
✅ Umieść wyniki w raporcie końcowym.
📎 Źródła
🧠 Pro tip
🔁 Automatyzuj testy uprawnień za pomocą ZAP scripts lub Postman tests.
🧪 Używaj JWT debuggerów do analizy tokenów i testów zmiany uprawnień.
📌 Podsumowanie
Broken Access Control to jeden z niewielu błędów, który możesz wykryć w ciągu kilku minut – a jego skutki mogą być krytyczne. Regularne testowanie logiki uprawnień to obowiązek każdej organizacji.
W następnym rozdziale przejdziemy do A02:2025 – Cryptographic Failures
.