Ein Fehler in der Linux-Shell Bash könnte gravierende Folgen haben, denn das Kommandozeilenprogramm Bash ist ein zentraler Bestandteil von MacOS X und Linux. Experten vergleichen ihn mit dem Heartbleed-Bug.
Kommandozeilen kennen viele Computeranwender nur vom Hörensagen und vielleicht aus Erinnerungen an MS-DOS-Zeiten. Doch auch moderne Betriebssysteme haben in aller Regel eine Möglichkeit, mittels einer Kommandozeile das System einzurichten und zu steuern. Unter den meisten Linux-Systemen und unter Mac OS X wird dazu ein Programm namens Bash genutzt. Bash ist Freeware und wird im Rahmen des GNU-Projekts entwickelt. Seit gestern bereitet es Sicherheitsexperten in aller Welt gewaltige Kopfschmerzen. Eine Sicherheitslücke in der Linux-Shell hat gravierende Auswirkungen, denn dadurch lässt sich von Hackern Code auf Servern aus der Ferne ausführen.
Der Fehler in Bash könnte insbesondere für Server im Internet, aber auch vielen anderen Geräten zum Verhängnis werden. Die Auswirkungen des Bash-Bugs sind nach Einschätzungen vieler Experten ähnlich gravierend wie die des Heartbleed-Bugs in OpenSSL, der im Frühjahr für Aufregung sorgte.
Durch die grosse Sicherheitslücke in der Linux-Shell Bash lässt sich Code in Umgebungsvariablen einfügen, den die Shell beim Starten ungeprüft ausführt. Das eröffnet zahlreiche Angriffsvektoren, am kritischsten ist die Lücke für Webskripte, die mittels CGI ausgeführt werden. Bash ist die am häufigsten genutzte Kommandozeilen-Shell unter Linux.
Das Problem wurde vom französichen Linux-Spezialisten Stephane Chazelas entdeckt und zunächst an die Entwickler der Debian-Distribution gemeldet. Geplant war für den 24. September eine koordinierte Veröffentlichung der Details. Offenbar wurde die Sperrfrist nur bedingt eingehalten, denn einige Details sind vorzeitig durchgesickert.
Bash ermöglicht es, mittels Umgebungsvariablen Funktionen zu definieren. Der Name der Umgebungsvariable dient dabei als Funktionsname, der Inhalt wird ausgeführt.Beispiele von Funktionen in Umgebungsvariablen finden sich auf im Beitrag von Florian Weimer.
Ein einfaches Beispiel haben wir bei Golem.de gefunden:
x=“() { echo Hello; }“ bash -c „x“
In diesem Fall wird eine Funktion x definiert, die die Zeichenkette „Hello“ ausgibt. Das Problem: Wenn Bash eine solche Funktionsvariable entdeckt, parst es die komplette Variable und führt Code, der sich hinter dem Funktionsaufruf befindet, direkt aus. Testen lässt sich dies mit folgendem Beispiel:
test=“() { echo Hello; }; echo gehackt“ bash -c „“
Bei einer verwundbaren Bash-Version wird hier der String „gehackt“ ausgegeben obwohl die Bash-Shell eigentlich überhaupt nichts ausführen soll. Das Problem hierbei: In vielen Fällen hat ein Angreifer die Möglichkeit, den Inhalt von Umgebungsvariablen zu kontrollieren.
Besonders kritisch sind hierbei CGI-Skripte auf Webservern. Denn hier werden beispielsweise Parameter oder Pfade der Webanwendung mittels Umgebungsvariablen übergeben. CGI-Skripte, die in Bash geschrieben sind, lassen sich damit direkt angreifen. Aber auch andere Programmiersprachen können Probleme bekommen. Wie in einem Blogeintrag von Redhat erläutert wird, führen zahlreiche Programmiersprachen indirekt eine Bash-Shell aus, wenn man einen Systembefehl ausführt.
Auch OpenSSH ist ein möglicher Angriffsvektor. OpenSSH und CGI-Skripte sind nur zwei mögliche Angriffsvektoren, verschiedene weitere Szenarien sind denkbar. Ein Update ist insbesondere Serveradministratoren, aber auch allen anderen Nutzern von Linux und anderen Unix-Systemen mit Bash dringend anzuraten. Für die aktuelle Bash-Version 4.3 steht der Patch 025 bereit, für Bash 4.2 der Patch 048. Betroffen ist neben Linux auch MacOS X, welches ebenfalls Bash als Standardshell einsetzt. Das Problem hat die ID CVE-2014-6271 erhalten.
Nachtrag vom 25. September 2014, 12:34 Uhr
Der Google-Entwickler Tavis Ormandy hat entdeckt, dass die Korrektur für die Lücke unvollständig ist. Zwar lässt sich Ormandys Beispielcode nicht direkt für Angriffe nutzen, trotzdem wird wohl ein weiteres Bash-Update notwendig. Die neue Sicherheitslücke hat die ID CVE-2014-7169 erhalten.