Blind Cross-Site Scripting

Lexikon webových zranitelností

zpět
Název: Blind Cross-Site Scripting
Zařazení: Útoky proti uživatelům, Validace vstupu a výstupu
Závažnost: Nízká - Vysoká

Popis:

Zranitelnost Cross-Site Scripting je založena na možnosti spustit vlastní kód Javascriptu v kontextu cílové aplikace, čímž se obejdou restrikce bezpečnostní politiky Same Origin Policy. Kód Javascriptu spuštěný ve webovém prohlížeči uživatele pak může přistupovat k libovolnému obsahu, který se nachází na stejné doméně, jako spuštěný skript. Díky tomu může takový skript měnit uživateli před očima obsah zobrazené webové stránky, číst z domény důvěrná data, nebo může vyplňovat a odesílat obsažené formuláře.

Aby bylo možné injektovat skript na cílovou doménu, je nutné, aby aplikace nedostatečně validovala vstup/výstup uživatelských dat a umožnila tak útočníkovi vložit metaznaky, které budou mít spuštění injektovaného kódu na svědomí.

Někdy se ale takový zranitelný výstup vyskytuje na místě, které není útočníkovi dostupné. Například proto, že jeho uživatelský účet nemá pro zobrazení stránky s injektovaným skriptem dostatečná přístupová práva. Uveďme si dva možné příklady, kde se lze s uvedeným chováním setkat:

  • 1) Aplikace může obsahovat rozhraní pro prohlížení logů, ke kterému má přístup pouze správce aplikace. Útočník je sice schopen vkládat do všech vstupů útočné řetězce, ale nedokáže již ověřit, jak se tyto promítají na výstupu při prohlížení logů. Útočník dokonce ani nemusí vědět nic o tom, že se jeho vstupy logují, a že zde existuje potenciální možnost spustit skripty během auditu.
  • 2) E-shop po odeslání objednávky založí do databáze nový záznam, který obsahuje informaci o objednaném zboží a adresu, na kterou má být zboží dodáno. Pracovníci e-shopu vyřizují každý den nové objednávky, které se jim zobrazují přes administrační rozhraní aplikace. Pokud útočník vytvoří novou objednávku a do doručovací adresy vloží kód Javasriptu, existuje zde možnost, že se tento kód vykoná ve chvíli, kdy si objednávku zobrazí pracovník e-shopu.

Protože útočník není schopen zjistit, jak se jeho vstupy promítají na výstupech, ke kterým nemá přístup, bude aplikaci testovat "naslepo". Odtud název tohoto typu útoku: Blind Cross-Site Scripting. Aby útočník zjistil, zda se jím vložené skripty spustily v něčím prohlížeči, musí jeho testovací vstup obsahovat externí volání na server útočníka. Ve chvíli, kdy se skript spustí, dojde k vyvolání requestu ze strany serveru, a útočník bude o této skutečnosti informován. Pro zachytávání těchto requestů je možné využít náš projekt GET2MAIL.

Při testování počítejte s dlouhou reakční dobou, protože nikdy nevíte, kdy si Váš vstup někdo prohlédne. Do logů se například může správce aplikace podívat jen jedenkrát za rok. Také si dejte pozor na false positive requesty, kdy se Váš kód sice nespustí, ale protože bude správce zvědavý, co mu to tam kdo vložil za odkaz, tak jej ručně zkopíruje a načte webovým prohlížečem. Tuto skutečnost je možné (ne však stoprocentně) odhalit díky chybějící HTTP hlavičce Referer v obdrženém requestu. Doporučuji ale raději ve skriptu odkaz nějakým způsobem zakódovat, aby se podobným false positive requestům zcela předešlo.

Jak z uvedeného vyplývá, nemůže se skutečnost, že útočník nemá přístup ke stránce s výstupem, stát záminkou pro vynechání validace dat. Všechny výstupy, včetně těch, ke kterým mají přístup pouze důvěryhodní uživatelé, musí být řádně ošetřen proti XSS.

Související: