5.7 Open Redirection, Formula Injection a minimalizace PoC

Open Redirection

Open Redirection
K zranitelnosti Open Redirection dochází, pokud aplikace provádí přesměrování uživatele na jinou lokalitu na základě uživatelem kontrolovaného parametru, který předem nesanitizuje či nevaliduje.

Velmi častým místem je proces přihlášení (e.g. zadaný parametr přesměrování po úspěšném přihlášení). Pokud jej aplikace nikde nevaliduje, může útočník vytvořit URL, která uživatele namísto vnitřní domény vyhodí na cizí (podvodnou) stránku.

Ukázka phishingu pomocí Open Redirection
Typická zranitelnost v kódu:
$redirect_url = $_GET['url'];
header("Location: " . $redirect_url);


Útočník vygeneruje a zašle oběti odkaz https://example.com/login?url=https://attacker.com. Oběť si zkontroluje začátek URL, zjistí, že jde o reálnou a legitimní stránku banky (a tím získá důvěru) a po přihlášení je okamžitě odeslána k útočníkovi, který může v tu chvíli sbírat zadané údaje a relace.

Formula Injection (CSV Injection)

Formula Injection
Pokud aplikace přijímá vstupní data z vnějšího nebezpečného zdroje a pak je exportuje jako datové řádky do souborů .xlsx (Excel) nebo .csv bez předchozí sanitizace, hovoříme o Formula Injection (injekci vzorců).

Problémem je to, že znaky na počátku vstupních hodnot (např. =, +, -, nebo @) interpretuje tabulkový procesor (Excel) jako počátek spustitelného vzorce a okamžitě ho automaticky přiřadí do výpočetního enginu. Jakmile tedy uživatel stáhne takový poškozený soubor a pokusí se ho (s aktivovanými makry/funkcemi) spustit, na jeho počítači může proběhnout zákeřný aplikační / systémový kód a případně i Remote Code Execution útok (RCE).

Minimalizace Proof of Concept (PoC)

Proč a jak zmenšit PoC exploit (např. v Burp Repeateru)
Pokud objevíte zranitelný požadavek (vysoký request nesoucí hromadu nepotřebných balastních dat), pro hlášení (např. Bug Bounty) nebo lepší ukázku Proof of Concept je nesmírně důležité jej tzv. minimalizovat. Musíte zjistit, které hlavičky a data jsou opravdu příčinou spuštění zranitelnosti a které tam jsou pouze do počtu. Kroky, co z HTTP požadavku pro účely malého PoC smazat:
  • Odstranit nepotřebné hlavičky: Udržte jen minimum pro to, aby se request neodmítl.
  • Odstranit nepotřebné cookies: Zpravidla ponechejte výhradně klíčové session cookies pro autentizaci, zbytek mažte.
  • Odstranit nepotřebné parametry: Smazat balast, a někdy stačí smazat i jen jejich prázdné hodnoty či nepotřebné konce dlouhých hodnot parametrů.
  • Změnit body encoding: Zjednodušení kódování pro čitelnost.
  • Přesunout injekci (shuffle): Nejnebezpečnější část exploitu přesunout na samotný začátek parametrů.
  • Změnit POST na GET: Kdykoli to situace a server umožní, překlopit složitý POST s daty do podoby URL GET linku. PoC v jednom zkopírovatelném linku vypadá obvykle lépe a je jasnější.