Porušení oprávnění na úrovni funkce
- Jde o autorizační zranitelnost, podobně jako v případě Porušení oprávnění na úrovni objektu a Porušení oprávnění na úrovni property objektu.
- Mnoho administrativních endpointů je veřejně přístupných.
- Položte si následující otázky ke zjištění zranitelnosti:
- Může běžný uživatel přistoupit k administrátorským funkcím?
- Může uživatel vykonat citlivé akce, ke kterým by neměl mít přístup / oprávnění?
- Může uživatel ze skupiny X přistupovat k funkcím, které by měly být přístupné jen skupině Y?
Jak zranitelnosti předcházet
🔴 Vytvořte autorizační modul, který bude jednoduchý na analýzu.
🔴 Použijte autorizační logiku z modulu ve všech byznys funkcích (nejlépe jako middleware).
🔴 Vypněte veškerý přístup by default (dokud není přístup explicitně povolený, je zamítnutý).
🔴 Zkontrolujte, zda všechny funkce podléhají autorizaci a dodržují stanovená pravidla pro přístup (do administrace může jen admin, uživatelská data může vidět jen jejich vlastník…)
Příklady zneužití zranitelnosti
-
Aplikace umožňuje registraci pouze na základě pozvánky.
- Endpoint
GET /api/invites/{invite_guid}
vrací pozvánku s uživatelskou rolí a e-mailem. - Útočník pomocí slovníku objeví endpoint
POST /api/invites
, který vytváří novou pozvánku, ale měl by být přístupný jen administrátorovi. - Tato kontrola ale chybí a útočník tak může snadno vytvořit pozvánku:
POST /api/invites/new
{
"email": "attacker@somehost.com",
"role": "admin"
}- Díky tomu je útočník nejen registrovaný, ale má roli
admin
.
- Endpoint
-
Aplikace obsahuje endpoint, který by měl být přístupný jen administrátorům -
GET /api/admin/v1/users
.- Endpoint vrací veškeré údaje o uživatelích aplikace.
- Endpoint není opatřený autorizací a útočník ho zjistí pomocí slovníku.
- Dostane se tak k osobním a citlivým údajům, což je považováno za jejich únik a porušení GDPR.