Porušení oprávnění na úrovni objektu
- Autorizace na úrovni objektu = mechanismus na úrovni kódu, který ověřuje, zda má uživatel oprávnění k přístupu k danému objektu.
- Každé API, které pracuje s objektem na základě obdrženého ID, by mělo implementovat autorizaci na úrovni objektu.
- Zranitelnost dále vede k neautorizovanému přístupu a manipulaci s daty, úniku informací nebo jejich zničení.
Jak zranitelnosti předcházet
🔴 Implementujte autorizační logiku na bázi atributů (ABAC) nebo BOLA.
🔴 Ověřte, zda má uživatel oprávnění k vykonání požadované akce nad daným záznamem, a to v každé funkci, která používá vstupní data pro přístup k záznamu.
🔴 Použijte náhodná a nepředvídatelná ID (např. UUID).
🔴 Napište automatické testy pro celý autorizační mechanismus.
🔴 Nedeployujte změny, které zapříčiní selhání testů.
Příklady zneužití zranitelnosti
- E-shop platforma obsahuje URL, na které jsou zobrazeny odměny partnerských obchodů.
- Útočník URL jednoduše objeví pomocí automatizovaného nástroje (
/partners/<name>/revenue.json
). - Útočník může jednotlivé stránky procházet změnou
<name>
parametru (/partners/tchibo/revenue.json
).
- Útočník URL jednoduše objeví pomocí automatizovaného nástroje (
- Automobilka vytvořila funkci pro vzdálené ovládání vozidla.
- Vozidlo je možné ovládat mobilní aplikací, která komunikuje se serverem přes API.
- API umožňuje auto nastartovat, odemknout dvěře nebo kufr.
- Aby to bylo možné, musí uživatel zadat VIN kód svého vozidla.
- API nekontroluje, jestli VIN kód patří danému uživateli, díky čemuž je možné manipulovat s cizím vozidlem.
- Podívejte se na reálné zneužití tohoto příkladu.
- Online úložiště umožňuje uživatelům sledovat, editovat a mazat soubory.
- Pro smazání dokumentu se používá GraphQL dotaz, který používá ID dokumentu jako parametr.
- Aplikace nekontroluje, jestli je uživatel vlastníkem dokumentu, a tak může kdokoli smazat jakýkoli dokument.
- I přes to, že frontend aplikace neumožňuje změnit ID, útočník může použít např. Postman a GraphQL dotaz spustit bez ohledu na frontend aplikaci.