Přeskočit na hlavní obsah

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

  1. 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.
  2. 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.

Kam dál

Cheat sheety

Checklisty