Blog

 

 Tagcloud

 Kalendář akcí

 Twitter

 
15. srpna
2012

Wicket a XSS útoky

Autor: Martin Strejc a Petr Vlasák | upraveno: 26. 9. 2012 | štítky: Wicket, XSS, attack

Technika známá jako Cross Site Scripting (XSS) je poměrně nebezpečná zejména při práci s AJAXem, kde lze často velmi jednoduše nežádoucí script podvrhnout a vykonat v prohlížečí. Framework Apache Wicket, ve kterém lze též vlastní interní AJAX využít, se rovněž může stát cílem zkušenějších útočníků. Přibližme si tedy postupy, které vedou k eliminaci takovéhoto útoku.

Základem útoku, který jsme při penetračních testech objevili, je zaslání nulového bytu v URL, tedy v zakódované podobě např. jako %00, a následně ukončovacích jednoduchý uvozovek, čímž se zakončí provádění JavaScriptu a může se vykonat script útočníkův, který následuje. Při dostatečné šikovnosti útočníka je možné pak poměnit formulářová pole nebo uložit svůj script do databáze a následně jej třeba spustit na jiném počítači, než na kterém byl útok prováděn, pokud uživatel, např. správce portálu, otevře administraci atd. Celá situace pochopitelně vyžaduje, aby útočník měl celkem velké zkušennosti s JavaScriptem a rovněž věděl i něco více o aplikaci i o Wicketu, jinak se nejspíše jeho snaha mine účinkem.

Eliminaci takovýchto parametrů je vhodné ošetřit již na vstupu serveru. Zde záleží na softwareovém vybavení, nad kterým je aplikace provozována. V případě použití Apache HTTPD serveru a proxy_ajp spojujícího Apache HTTPD s Apache Tomcat, která je velmi častou a vhodnou kombinací pro řešení webserveru s Apache Tomcat, je postup patrně nejjednoduší a to vhodným filtrováním vstupních dat ihned po příchodu na Apache HTTPD Server.

Filtrace nástrojem ModSecurity

K filtrování lze využít hned několik nástrojů. Velmi rozsáhlým nástrojem je ModSecurity, který poměrně komplexně umí analyzovat veškerá data tekoucí serverem. V minimální konfiguraci stačí v příchozích požadavích hledat nulový byte a vypořádat se s tímto výskytem ať už přepsáním na jiný znak (např. mezeru) nebo chybovou zprávou. Využívání kompletní filtrace obsahu však představuje větší zátěž pro server a je tedy zapotřebí vyššího výpočetního výkonu, což je nevýhoda této metody.

Změna paramterů pomocí mod_rewrite

Jednodušší eliminaci lze provést běžnou filtrací URL se zapnutým mod_rewrite. Příklad konfigurace Apache HTTPD vypadá asi takto:

config

RewriteCond %{QUERY_STRING} ^.*(%00|\\x00|\\u00).*$
RewriteRule ^.* - [F]

Podrobněji o možnostech náhrad a konfigurací pro zajištění bezpečnosti můžete nalézt na stránkách SecTechno - mod_rewrite to harden Apache

Obecnost postupu filtrace

Oba zmíněné postupy jsou aplikovatelné i na jiné platformy, tedy ve smyslu různých frameworků či programovacích jazyků, lze tedy využít i pro PHP a další. Pokud používáte někdo Tomcat přímo, byť to nepovažuji za nejlepší nápad, doporučuji alespoň napsat filter na úrovni Tomcat, který bude kontrolovat vstupní parametry, zda neobsahují podobné útoky.

Hodně štěstí a klidných nocí při ochraně před útoky XSS :-)