Kritische Sicherheitslücke in CGI-Umgebungen (Apache, IIS, ...)
18. Juli 2016
Es wurde ein Designfehler in diversen Implementationen des CGI Standards gefunden, der
schwerwiegende Folgen für die Sicherheit der Webserver haben kann.
CERT.at bittet daher um Beachtung der folgenden Hinweise.
Informationsquelle(n):
httpoxy Webseite
https://httpoxy.org/
Apache-Dev Archiv von 2015
http://www.gossamer-threads.com/lists/apache/dev/443863
Apache Advisory
https://www.apache.org/security/asf-httpoxy-response.txt
Beschreibung
CGI ist ein Standard, mit dem Webseiten dynamisch mit Hilfe von Scripten serverseitig erstellt werden können. Dazu werden die Informationen über den Client und zur Anfrage in Umgebungsvariablen an das Script übergeben. Enthält der HTTP-Request einen Header "Proxy:", dann wird der Inhalt dieses Headers in die Umgebungsvariable HTTP_PROXY geschrieben. Setzt nun seinerseits das Script einen Webrequest (etwa an ein Backend-System) ab, dann kann ein gesetztes HTTP_PROXY dazu führen, dass dieser Proxy benutzt wird.Auswirkungen
Ein Angreifer kann einem Webserver eine Proxy-Konfiguration vorgeben und so einen Man-in-the-Middle Angriff durchführen. Mögliche Szenarien sind etwa:- Information Disclosure der Daten, die von Frontend-Webservern an das Backend übermittelt werden
- Information Injection: der angegebene Proxy kann Daten liefern, die Fehlverhalten im Webserver auslöst
Betroffene Systeme
Eine vollständige Liste aller betroffenen Systeme liegt noch nicht vor. Es ist daher bis zum Beweis des Gegenteils davon auszugehen, dass jede CGI Umgebung betroffen ist. Details werden auf der eigens dafür angelegten Webseite zu httpoxy angegeben. Ob ein gesetztes HTTP_PROXY eine Wirkung auf das ausgeführte Script hat, variiert je nach Programmiersprache (PHP, Python, Perl, Go, ...) und hängt auch davon ab welche weiteren Programme (etwa "wget") aufgerufen werden.Abhilfe
Als erste Notmaßnahme sollten folgende HTTP Header nicht mehr an Scripte weitergegeben werden:- Proxy
- Proxy_Host
- Proxy_Port
- Proxy_User
- Proxy_Pass
- Proxy_Password
Apache
Mittels des Moduls mod_headers können die kritischen Header leicht ausgefiltert werden:RequestHeader unset Proxy RequestHeader unset Proxy_Host RequestHeader unset Proxy_Port RequestHeader unset Proxy_User RequestHeader unset Proxy_Pass RequestHeader unset Proxy_Password
Nginx/FastCGI
fastcgi_param HTTP_PROXY "";
HAProxy
http-request del-header Proxy http-request del-header Proxy_Host http-request del-header Proxy_Port http-request del-header Proxy_User http-request del-header Proxy_Pass http-request del-header Proxy_Password
IS/FastCGI component for IIS 6.0 and IIS 7.0
Folgende Regeln in apphost.config sollte die Umgebungsvariable ausfiltern:<system.webServer> <rewrite> <rules> <rule name="Erase HTTP_PROXY" patternSyntax="Wildcard"> <match url="*.*" /> <serverVariables> <set name="HTTP_PROXY" value="" /> </serverVariables> <action type="None" /> </rule> </rules> </rewrite> </system.webServer>
Hinweis
Generell empfiehlt CERT.at, wo möglich die "automatisches Update"-Features von Software zu nutzen, für alle Arten von Browser-Plugins (Flash, Java, ...) auf die "Click-to-play"-Funktionalitäten von Internet-Browsern zurückzugreifen, sowie parallel Firewall-Software aktiv und den Virenschutz aktuell zu halten.Informationsquelle(n):
httpoxy Webseite
https://httpoxy.org/
Apache-Dev Archiv von 2015
http://www.gossamer-threads.com/lists/apache/dev/443863
Apache Advisory
https://www.apache.org/security/asf-httpoxy-response.txt