A4 - Nezabezpečený přímý odkaz na objekt
A4 - Nezabezpečený přímý odkaz na objekt (Insecure Direct Object References)
Chyby umožňující neoprávněné přístupy k datům nezabezpečeným přístupem k vnitřnímu objektu aplikace (souboru, adresáři, databázovému klíči).
- 1. V případě přímých odkazů ke zdrojům s omezeným přístupem: ověří aplikace, že uživatel je oprávněn přistoupit přesně k požadovanému zdroji?
- 2. Pokud je odkaz nepřímý: omezí aplikace při mapování na přímé odkazy přístup aktuálnímu uživateli na hodnoty, k nimž má oprávnění?
- 1. Používejte nepřímé odkazy na objekty pro každého uživatele nebo relaci zvlášť. Zabráníte tím v přístupu útočníkům, kteří se zaměřují na neautorizované zdroje. Například místo databázového klíče zdroje použijte rozbalovací seznam šesti hodnot schválených pro aktuálního uživatele. K označení hodnoty, kterou si uživatel vybral, můžete použít čísla 1-6. Aplikace musí namapovat nepřímý odkaz specifický pro uživatele zpět na skutečný databázový klíč na serveru. V OWASP ESAPI jsou uvedeny mapy odkazů jak pro sekvenční, tak pro libovolný přístup, a ty mohou vývojáři použít místo přímých odkazů na objekt.
- 2. Zkontrolujte přístup. Každé použití přímého odkazu na objekt z nedůvěryhodného zdroje musí obsahovat kontrolu přístupu a musí zaručit, že uživatel má práva k požadovanému objektu.
- OWASP Top 10-2007 on Insecure Dir Object References
- ESAPI Access Reference Map API
- ESAPI Access Control API (Viz isAuthorizedForData(), isAuthorizedForFile(), isAuthorizedForFunction() )
Původce hrozby | Vektor útoku | Bezpečnostní slabina | Technické dopady | Obchodní dopady | |
Aplikační specifikum | Zneužitelnost snadná |
Rozšíření běžné |
Zjistitelnost snadná |
Dopad střední |
Aplikační / obchodní specifikum |
Vezměte v úvahu typy uživatelů v systému. Nemají mít někteří uživatelé k určitým druhům dat pouze částečný přístup? | Útočník, který je oprávněným uživatelem systému, jednoduše změní hodnotu parametru, který přímo odkazuje na objekt systému, na jiný objekt, k němuž nemá mít oprávnění. Je mu přístup udělen? | Aplikace často používají při generování (vytváření) webových stránek skutečný název nebo klíč nějakého objektu. Ne vždy ověřují, že je uživatel oprávněn přistupovat k cílovému objektu. To má za následek nezabezpečený přímý přístup k objektu. Takovéto chyby mohou snadno odhalit testeři, když budou manipulovat s hodnotami parametrů. Zda jsou autorizace řádně kontrolovány, rychle ukáže analýza kódu. | Takové chyby mohou ohrozit veškerá data, na která odkazuje parametr. Pokud je odkaz na objekt předvídatelný, útočník snadno získá přístup ke všem datům tohoto typu. |
Zvažte obchodní hodnotu odhalených dat. Také zvažte obchodní dopad zveřejnění zranitelnosti. |
Jsem zranitelný vůči „nezabezpečeným přímým odkazům na objekty“? |
Nejlepší způsob, jak zjistit, zda je aplikace je zranitelná vůči nezabezpečeným přímým odkazům na objekty, je ověřit, zda všechny odkazy na objekt mají odpovídající ochranu. K dosažení tohoto cíle vezměte v úvahu: Kontrola kódu (code review) aplikace může rychle ověřit, zda je přístup implementován bezpečně. K identifikaci odkazů na přímé zdroje a k posouzení, zda jsou bezpečné, je účinné též testování. Automatizované nástroje obvykle takovéto nedostatky nehledají, protože nejsou schopny rozpoznat, jaký zdroj vyžaduje ochranu, ani co je bezpečné nebo nebezpečné. |
Jak mohu předejít „nezabezpečeným přímým odkazům na objekty“? |
Prevence vyžaduje vhodný výběr metody ochrany každého objektu, který je dostupný uživatelům (např. číslo objektu nebo název souboru): |
Příklady možných útoků |
Aplikace používá neověřené údaje v dotazu SQL, který přistupuje k informacím o uživatelských účtech:
String query = "SELECT * FROM accts WHERE account = ?"; Útočník může jednoduše ve svém prohlížeči změnit parametr 'acct' a odeslat jakékoliv číslo účtu. Pokud není jeho požadavek ověřen, může útočník získat přístup nejen ke svému, ale k jakémukoliv účtu. http://example.com/app/accountInfo?acct=notmyacct |
Odkazy |
OWASP:
Další informace ohledně požadavků na kontrolu přístupu viz ASVS requirements area for Access Control (V4). Externí: |