Autor: .cCuMiNn. | 17.9.2014 |
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.
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:
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.
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:
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ř.
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:
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.
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á.
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.
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.
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.
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í.
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.