Nach Heartbleed ist aktuell der Bug Shellshock (CVE-2014-6271) wohl eine der gravierendsten Sicherheitslücken seit langer Zeit. Dadurch sind unter anderem zahlreiche Apache-Webserver auf Linux-Systemen betroffen, die durch das aktivierte Modul mod_cgi Scripte ausführen.
Hierzu gehören unter anderem Shell-Skripte. Hinzu kommt, das dieser Bug seit gut 25 Jahren in der Bash aktiv war und seit jeher Systeme theoretisch kompromittiert werden konnten.
Interessant ist auch der Ansatz von Geoff Walton den er in seinem Blog-Beitrag beschreibt. Die Lücke wird per DHCP-Option vom DHCP-Server an den Client übergeben und somit ist es möglich, auf einem DHCP-Client aus der Ferne Befehle auszuführen.
Um zu prüfen, ob die Bash verwundbar ist, genügt dieser Test:
env var='() { ignore this;}; echo vulnerable' bash -c /bin/true
Ist die Bash betroffen, erhält man folgendes Resultat:
vulnerable
Ist die Bash bereits gepatcht, sieht das ganze so aus:
bash: Warnung: var: ignoring function definition attempt bash: Fehler beim Importieren der Funktionsdefinition für `var'.
Allerdings hat sich bereits herausgestellt, das die Lücke mit etwas kreativ weiterhin ausgenutzt werden kann. Diese Situation wird im CVE-2014-7169 beschrieben.
Um zu prüfen, ob die Bash gegen diese Lücke weiterhin angreifbar ist, hilft folgender Test:
env var='() {(a)=>\' bash -c "echo date"; cat echo
Dieser Test legt die Datei „echo“ an und schreibt die Ausgabe von date hinein. Zum Wiederholen des Tests muss also diese Datei vorher gelöscht werden, ansonsten erhält man einen false positive.
Bei einer angreifbaren Bash sieht das Ergebnis so aus:
bash: var: Zeile 1: Syntaxfehler beim unerwarteten Wort »=« bash: var: Zeile 1: `' bash: Fehler beim Importieren der Funktionsdefinition für »var«. Fr 25. Sep 20:19:48 CEST 2014
Und bei einer gepatchten so:
date cat: echo: Datei oder Verzeichnis nicht gefunden
Wer Interesse an ein Webinar hat, dem ist der Blog-Beitrag von Dr. Cristopher Kunz noch ans Herz zu legen
UPDATE (26.09.2014, 12:08): Scheinbar sind immer noch die aktuell ausgerollten Patches unwirksam. Der zweite Patch prüft zwar „() {„, allerdings beispielsweise nicht auf “ () {“ (Quelle: Bugzilla CVE-2014-6271) . Somit ist es weiterhin möglich, Shellshock auszunutzen:
env -i X=' () { }; echo hello' bash -c 'date'
Und das Ergebnis:
bash: X: line 0: syntax error near unexpected token `}' bash: X: line 0: `X () { }; echo hello' bash: error importing function definition for `X'</pre> Fri Sep 26 12:05:44 CEST 2014