Publicerad
HTTPoxy - Sårbarheter/designfel som påverkar CGI/CGI-liknande serverar
Nyligen har ett antal sårbarheter publicerats som påverkar CGI (Common Gateway Interface) servrar av olika slag, under namnet 'HTTPoxy'.
Vad är CGI, och vad är HTTPoxy?
CGI är ett interface som tillåter skapandet av dynamiska websidor, då en klient kan anropa ett skript eller en binär på servern och få resultatet returnerat i form av en webbsida.
Enligt RFC 3875, där CGI servrars funktionalitet definieras, har en klient till en CGI server möjligheten att inkludera en metavariabel i sin förfrågan till servern i form av en header. CGI servern plockar dessa headers, omvandlar dem enligt en standardiserad procedur, och sätter dem i en environmentvariabel som kan användas i skriptet som exekveras.
Sårbarheten
En utav dessa metavariabler kan vara 'Proxy', som definerar vart klienten vill att återkopplingen ska gå.
Enligt RFC 3875 blir 'Proxy' omvandlad till 'HTTP_PROXY', vilket är en känd och ofta använd environmentvariabel för HTTP proxy-inställningar.
Problemet uppstår då skriptet som exekveras kan inte skilja den inkommande HTTP_PROXY-metavariabeln från HTTP_PROXY-variabeln som redan var satt av systemet. Det ursprungliga värdet av HTTP-PROXY-variabeln kan alltså komma att skrivas över av ett externt inkommet värde.
Påverkan
En angripare kan använda denna sårbarhet för att omdirigera utgående trafik som ett CGI-anropet skript genererar till en server efter eget tycke. Exakt hur alvarlig påverkan av detta är beror till en stor del på vad det är för data som skriptet returnerar.
Sårbarheten kan också användas för att belasta andra tjänster eller infrastruktur, då en angripare kan ange en valfri ip-adress som servern returnerar sitt svar till.
Vad är påverkad?
Följande CVE:er har upprättats för HTTPoxy serien av sårbarheter. Observera att även de programmeringspråk och ramverk som sätter HTTP_PROXY-environmentvariablen från en klients Proxy-header omfattas:
CVE-2016-5385 PHP
CVE-2016-5386 Go
CVE-2016-5387 Apache HTTPD
CVE-2016-1000104 mod_fcgi
CVE-2016-1000105 Nginx cgi script
CVE-2016-5388 Tomcat
CVE-2016-1000107 Erlang HTTP Server
CVE-2016-1000108 YAWS
CVE-2016-1000109 HHVM FastCGI
CVE-2016-1000110 Python CGIHandler
CVE-2016-1000111 Python twisted
US-CERT:s advisory om sårbarheten har innehåller också en lista över vilka leverantörer som är påverkade, samt vilka som är misstänka (men ännu ej bekräftade) vara påverkade:
http://www.kb.cert.org/vuls/id/797896
Mitigeringsstrategi
Den föreslagna mitigeringsstrategin har därmed två spår; ett långsiktigt spår för eliminering av sårbarheten i påverkad mjukvara, samt ett kortsiktigt spår för de som kör infrastruktur/servrar som är påverkade redan nu.
Långsiktigt:
Invänta en patch till den sårbara CGI-servern/komponenten där sårbarheten är åtgärdad och PROXY-variabeln inte ställer till med en namnkonflikt med systemets HTTP_PROXY. Ovan nämnda CVE-länkar kommer att uppdateras så fort en patch finns.
Kortsiktigt:
Eliminera PROXY-headern från inkommande förfrågningar innan den hanteras av CGI-servern. PROXY-headern är inte en IANA standardiserad header, och används inte för något känt standardiserat syfte.
Detta kan göras på många olika sätt, och det som är lämpligast beror mycket på vilken infrastruktur som tillämpas.
Säkerhetsforskarna har givit specifika råd för Nginx/FastCGI, Apache, HAproxy, samt Microsoft IIS där PHP används.
Ytterligare läsmaterial:
Diskussion av HTTPoxy på Seclists.org