Zranitelnost v Apache umožňuje přístup do interních sítí

27. 11. 2011

Sdílet

 Autor: © gluke - Fotolia.com
Chybu objevenou v Apache HTTP serverech mohou útočníci zneužít pro přístup k chráněným zdrojům uvnitř interních sítí.

Zranitelnost se týká všech instalací Apache, které pracují v režimu reverzní proxy, což je typ konfigurace používaný pro vyrovnávání zátěže, ukládání do vyrovnávací paměti a další operace, které se nějakým způsobem týkají distribuce zdrojů v rámci většího počtu serverů. Aby mohl Apache HTTP server v tomto režimu běžet, musí jeho administrátoři použít specializované moduly mod_proxy a mod_rewrite.   

Bezpečnostní výzkumníci ze společnosti Qualys však varují, že pokud nejsou určité parametry správně nakonfingurované, mohou útočníci servery zneužít k provádění neoprávněných požadavků na přístup k interním zdrojům. Nejde přitom o žádnou novinku, protože podobné útoky byly zaznamenány již v říjnu letošního roku. Pro zranitelnost byl tehdy dokonce vydán opravný patch. Výzkumník Prutha Parikh si však nyní všiml, že opravu lze obejít díky chybě ve schématu identifikátoru URI (Uniform Resource Identifier). Schéma je ta část řetězce URI, po kterém následuje dvojtečka, například http, ftp či file.

Jedním z často používaných příkazů je „^(.*) http://internal_host$1“, který příkaz přesměruje na internal_host. Pokud je však takový příkaz použit v takové formě, že server obdrží například požadavek na „host::port“, tedy s dvěma dvojtečkami, část „host:“ je odstraněna a zbytek je připojen k „http://internal_host.“ Problém představuje zbývající části „:port“ z toho důvodu, že se požadavek transformuje do tvaru „http://internal_host:port“. Takové chování je nežádoucí a může mít za následek odkrytí chráněného zdroje.

Vývojáři Apache si jsou problému dobře vědomi a v současné době diskutují o nejlepším způsobu, jak jej vyřešit. Jednou z možností by bylo posílení předchozí opravy tak, aby server dané požadavky odmítal. Není však jisté, že se neobjeví další metody, které opravu dokáží obejít. V současné době mohou administrátoři problém zmírnit alespoň tím, že před $1 přidají lomítko, takže výsledný tvar bude „^(.*) http://internal_host/$1“.