6.4 Insecure Direct Object Reference (IDOR)

Když webová aplikace umožňuje uživatelům interakci s databázovými záznamy či objekty pomocí identifikátorů, musí také kontrolovat autorská/přístupová práva. Selhání této validace je podstatou IDOR.

Insecure Direct Object Reference (IDOR)
Druh zranitelnosti (součást širší kategorie Broken Access Control), při které aplikace nedostatečně ověřuje práva uživatele na přístup k odkazovanému objektu. Útočník může např. změnou parametru (id, uživatelské jméno, token) v HTTP požadavku získat neoprávněný přístup k datům ostatních uživatelů.

Identifikátory v praxi

Nejčastější problémy vznikají s předvídatelnými číselnými identifikátory.

Inkrementální celá čísla (Integers)
Nejbanálnějším případem je, když uživatel vidí URL například s &invoiceId=123. Pouhou změnou čísla na 122 nebo 124 dostane přístup k fakturám ostatních uživatelů, protože systém za oponou nekontroluje, zda je přihlášený uživatel k dotyčné faktuře skutečně oprávněn přistupovat.
Útok hrubou silou na číselné identifikátory
Co když čísla nejsou sekvenční (inkrementální), ale stále relativně krátká? Například parametr &lotteryNumber=833215. Pomocí nástrojů (jako např. Turbo Intruder pro Burp Suite), které zvládají udělat i desítky tisíc požadavků za sekundu, může útočník kompletní prostor šestimístných čísel ([0-9]{6}) prolomit metodou brute-force za desítky vteřin.

Obrana pomocí GUID / UUID

Z bezpečnostního hlediska je lepší nahradit predikovatelná či vyčíslitelná celá čísla takzvanými GUID (Globally Unique Identifier) / UUID (Universally Unique Identifier). Nicméně, ani zde není obrana zaručena, pakliže nejsou použity správně.

Generace UUID (RFC 4142 / RFC 9562)
UUID specifikuje různé verze, které mají naprosto rozdílný stupeň entropie a zranitelnosti:
  • UUIDv1: Je vysoce předvídatelné, neboť využívá kombinaci timestampu (času generování) a MAC adresy. Může vést k IDOR a Replay útokům. Pomocí nástroje guidtool lze u těchto tokenů zjistit přesný čas a MAC adresu.
  • UUIDv3: Deterministické na bázi MD5 haše, pokud známe vstup (např. email), jsme schopni jej vygenerovat.
  • UUIDv5: Obdoba v3, ovšem s lepším hashem SHA-1 (přesto uhádnutelné/slabé).
  • UUIDv4: Plně náhodné a pro útočníka v podstatě nemožné předpovědět (silné vůči výčtu).
  • UUIDv7: Náhodnost jako v4, avšak uspořádatelné v čase (vhodné pro primární klíče v databázích).
Masový IDOR na Facebooku
I u UUID je třeba validovat oprávnění na straně serveru! Pokud je parametr např. /passwordReset?token=UUIDv1... uhodnutelný nebo je použitelný s jiným kontextem (kdy uživatel zjistí tokeny pro jiné uživatele – například na Facebooku v roce 2019 byly iterováním odhaleny stovky miliónů čísel telefonů).

Okrajové (Edge-case) chyby s IDOR