Podvržení HTTP hlavičky Host – zranitelnost

Michal S.
Člen | 3
+
0
-

Zdravím,

měli jsme ve firmě penetrační testy a odhalili zranitelnost v Nette.
Sice máme aktuálně ještě stařičné Nette 2.0 ale koukal jsem že i v nových verzích jsou požadavky řešeny stejně.
Jde o možnost podvržení HTTP_HOST a které si potom nette bere a používá ho pro odpověd.
Poté odpověď od serveru přesměruje uživatele na stránku definovanou v podvržené hlavičce.

Vyřešit se to nechá tím, že se na startu prostě HTTP_HOST smaže, či se bude kontrolovat.

Místo využití HTTP_HOST : Nette\Http\RequestFactory::getServer()

Výsledek z penetračních testů:
Závažnost: střední
Pravděpodobnost: střední
OWASP kategorie: OTG-CONFIG-001 – Test Network/Infrastructure Configuration

Riziko:
Pokud by útočník byl schopný manipulovat s hlavičkou „Host“, mohl by zranitelnost zneužít
k přesměrování uživatele na podvodnou webovou stránku.
Přesměrování může předávat citlivá data, např. hesla uživatelů. Vzhledem k tomu, že
k přesměrování dochází z důvěryhodné aplikace (na URL zadanou útočníkem), může být
důvěra uživatelů k aplikaci využita k úspěšnějšímu phishingovému útoku

Doporučení:
Doporučujeme, aby aplikace vždy používala hodnotu ze SERVER_NAME nastavení
webového serveru namísto hlavičky Host a příchozí dotazy s pozměněnou hlavičkou Host
zamítla.

Nicméně chci zjistit váš názor na tento problém.
Děkuji za odpověď/názor či smysluplnější řešení.

Michal

mystik
Člen | 312
+
+1
-

Aby utocnik podvrhl HTTP_HOST musel by uz mit primo kontrolu nad browserem uzivatele, ktery posila request a tim padem by si stejne mohl presmerovavat podle libosti. Pokud teda komunikace probiha pres HTTPS jinak by to bylo realne riziko ze hlavicku zmeni utocnik cestou, ale s HTTPS tam moc riziko nevidim.

mystik
Člen | 312
+
+1
-

Navic s podvodnou Host hlavickou by server nejspis ani request nezpracooval, protoze by neodpovidal zadne site kterou server zna. Takze by takovy request bud uplne odmitl nebo by to padlo do default site. Pokud tedy server neni nakonfigutovany tak ze aplikace bezi na default site (bez kontroly domeny) tak to taky nelze zneuzit. A pokud by to bezelo na dafault site tak zase nejspis nebudes mit spravne hodnotu v SERVER_NAME pokud nemas nejakou hodne nestandardni konfiguraci.

mystik
Člen | 312
+
0
-

Zajimave je ze podle toho vystupu testu aplikace asi ty pripojeni zda se nezamitla. Bylo to testovane na realnem serveru nebo v nejake localhost konfiguraci? Pokud na realnem serveru tak by to imho chtelo spis zkontrolovat nastaveni serveru.

Václav Pávek
Backer | 100
+
0
-

Přikláněl bych se popisu co psal @mystik. Pokud bych chtěl manipulovat s obsahem webu (phishing) tak bych se uživatele snažil dostat na svůj proxy server a obešel tím případné komplikace na straně aplikace či aplikačního serveru. Nicméně jsem se snažil vymyslet různé scénáře a vždy jsem skončil na konfiguraci webserveru. Ve vašem případě musel aplikace běžet jako default site tj. je jedno s jakým hostem jsem se dostal na webserver, třeba i skrze IP adresu.

Ohledně hlavičky HOST, jedná se o standardní hlavičku pro HTTP request kdy na jednu IP mohu dotazovat několik hostů.

Editoval Václav Pávek (12. 1. 13:02)

Michal S.
Člen | 3
+
0
-

Běželo to na našem testovacím IIS serveru nad HTTPS.
Hlavičku se jim podařilo podvrhnout a jelikož se používá pro redirect, tak odpoved ze serveru přesměruje uživatele na podvrženou stránku.
Nicméně nevím jak a jestli je možné v reálném provozu uživateli podstrčit hlavičku.

Pokusím se tedy ještě podívat na nastavení IIS.
Myslíte tedy že by to mohlo být jen tím, že není na serveru v bindings nastaveno HOST_NAME a je tam pouze IP adresa serveru a o DN se tedy stará asi jen DNS a není řešeno v rámci IIS (nebo tak nějak)?

PS: V nastavení IIS se moc nevyznám.

Editoval Michal S. (12. 1. 17:54)

mystik
Člen | 312
+
0
-

V realnem provozu na HTTPS hlavicku nepodstrcis a pokud mas nejakou moznost ji podstrcit tak mas soucasne jednodussi moznosti jak ten redirect udelat primo.

Musite mit IIS nastaveny tak, ze prijima jakekoli prichozi spojeni bez ohledu na domenu. V beznem provozu by kazda site mela byt nastavena jen pro konkretni domeny a neprijmat jakekoli pripojeni.

Michal S.
Člen | 3
+
0
-

Mockrát děkuji :)