Same-Site Scripting (SSS)

Zdroj: SOOM.cz [ISSN 1804-7270]
Autor: .cCuMiNn.
Datum: 17.9.2014
Hodnocení/Hlasovalo: 1.31/29

Ne, nebojte se, tento článek opravdu nebude o Cross-Site Scriptingu :) Povíme si o jedné nepříliš známé, ale zato poměrně rozšířené zranitelnosti, způsobené zapomenutou tečkou v DNS záznamu. Útoky Same-Site Scripting ohrožují hlavně uživatele víceuživatelských systémů, kteří mohou snadno podlehnout phishingovému útoku, nebo přijít o svá cookies. To vše i bez použití JavaScriptu a bez sniffingu sítě.

Metoda útoků známá jako Same-Site Scripting (zkráceně SSS) byla poprvé zmíněna Tavisem Ormandem v roce 2008, kdy informaci o ní zveřejnil v mailové konferenci Bugtrack. Zpráva o její existenci ale není příliš rozšířena, a jen málokdo tedy ví, co si pod výrazem Same-Site Scripting vlastně představit.

Hledá se viník

Pokud zjistíte, že i Vaše webová aplikace (doména) je na Same-Site Scripting náchylná, nehledejte viníka mezi vývojáři. Najdete jej totiž mezi administrátory, kteří mají na starosti správu DNS záznamů. Je běžná praxe uvádět v DNS záznamech také Áčkový záznam pro localhost směřující na IP adresu 127.0.0.1. Na tom by nebylo nic zvláštního. Když už se takový záznam do DNS ale vkládá, měl by správně obsahovat tečku za slovem localhost, čili správně by měl být záznam uveden takto:

localhost.	IN	A	127.0.0.1


Ve chvíli, kdy administrátor na tečku na konci zapomene, což je bohužel téměř vždy, když je tento záznam do DNS přidáván, umožní tím útočníkům atakovat uživatele právě skrze Same-Site Scripting.

Proč tečka

Ptáte-li se, proč je tečka na konci jména tak důležitá, pak vězte, že naprosto mění význam samotného záznamu. DNS záznamy jsou totiž uloženy v tzv. doménových souborech, jejichž součástí je také direktiva $ORIGIN, která zpravidla obsahuje název domény s tečkou na svém konci. Tečka představuje doménový root, před kterým je uvedeno TLD a před ním doména druhého řádu. Příklad $ORIGINu pro doménu xyz.cz by tedy vypadal takto:

$ORIGIN xyz.cz.


Domény třetího řádu (subdomény) se následně uvádí již bez tečky, což znamená, že se za ně automaticky přilepí obsah direktivy $ORIGIN, např.

www	IN	A	55.66.77.88

www.xyz.cz.	=>	55.66.77.88


Pokud se však tečka za názvem uvede, obsah direktivy $ORIGIN se již za něj nebude přilepovat. Proto rozdíl mezi oběma zápisy:

localhost	IN	A	127.0.0.1
=>	localhost.xyz.cz.	=>	127.0.0.1
======================================
localhost.	IN	A	127.0.0.1
=>	localhost	=>	127.0.0.1


Jak zjistit, zda je konkrétní web na SSS náchylný

Zjištění, zda je určitá aplikace na Same-Site Scripting zranitelná, je velice jednoduché. Můžete použít například nástroje jako nslookup, nebo reverzní ping.

C:\>nslookup localhost.rozhlas.cz
Nazev:   localhost.rozhlas.cz
Address:  127.0.0.1

C:\>ping localhost.rozhlas.cz –a
Příkaz PING na localhost.rozhlas.cz [127.0.0.1] - 32 bajtů dat:
Odpověď od 127.0.0.1: bajty=32 čas < 1ms TTL=128
...


Použít můžete i některý z online nástrojů pro zjišťování DNS záznamů, např. http://centralops.net/co/

Pokud zjistíte, že IP adresa odpovídající jménu localhost.xyz.cz má hodnotu 127.0.0.1, je aplikace na Same-Site Scripting náchylná.

Jak to funguje

Představte si web, který má chybně zapsaný záznam v DNS (například xyz.cz), pokud byste do adresního řádku prohlížeče zapsali URL localhost.xyz.cz, pak by prohlížeč vyslal dotaz na DNS server, aby zjistil, jaká IP adresa náleží uvedenému URL. DNS server by odpověděl hodnotou 127.0.0.1 a browser by tedy webovou aplikaci hledal na této adrese, tedy v samotném počítači uživatele.

Praktické využití

Phishing

Ve chvíli, kdy by se jednalo o multiuživatelský operační systém, ze kterého na web přistupuje více uživatelů a na tomto počítači bychom měli možnost spustit Apache nebo jiný webový server, pak bychom mohli také krásně vytvořit phishingovou aplikaci, která by mohla sklízet hesla uživatelů po té, co bychom je nalákali k návštěvě webové stránky localhost.xyz.cz.

Cross-Site Scripting (XSS)

Phishingem to ale zdaleka nekončí, to nejlepší na celé věci je to, že i když aplikace běží na localhostu, stále je prohlížeč přesvědčen o tom, že je načten dokument z domény xyz.cz a lze tak obejít některé restrikce Same Origin Policy. Prohlížeč například naší fake aplikaci, která běží na lokálu, s klidem odešle cookies náležející doméně xyz.cz. Fake aplikace může tato cookies přečíst a uložit.

Logujeme cookies

Same-Site Scripting nám dokonce umožňuje získat uživatelská cookies i v případě, kdy jsou chráněny příznakem HttpOnly, nebo i bez použití JavaScriptu (vlastně i bez jakéhokoli fake webu). Stačí, když uživatel odešle požadavek na neexistující zdroj, čehož lze docílit například vložením img tagu do jakékoliv stránky, kterou uživatel navštíví.

případně s přidáním protokolu

Pokud má OS nebo lokální webový server nastaveno vhodné logování, pak ve chvíli, kdy uživatel navštíví webovou stránku s takovýmto obrázkem, automaticky se do logů na uživatelově počítači uloží požadavek včetně HTTP hlavičky Cookie.

Příklady zranitelných aplikací