CVE-2016-7543: gravierende Schwachstelle in Bash < 4.4

Durch eine fehlerhafte Auswertung von Umgebungsvariablen, kann ein lokaler Angreifer beliebigen Code als Root ausführen.

Wichtig sind zwei Parameter:

A) Er muß die Umgebungsvariablen beeinflussen aka. setzen können.

B) Er muß ein Programm starten können, daß Root gehört und das „+s“ (SetUID) Flag hat.

Mehr Infos Link: http://seclists.org/oss-sec/2016/q3/617

Wer ist betroffen ?

Betroffen ist u.a. die gesamte Fedora Palette:

Red Hat Fedora 23
Red Hat Fedora 24
Red Hat Fedora 25

Es dürften aber alle, die Bash < 4.4 einsetzen von dem Problem betroffen sein und betrifft wohl jeden Desktopnutzer.

Warum melde ich das heute, ist doch nur eine Sicherheitslücke unter vielen ?

Ohne Bashing betreiben zu wollen, aber im OSBN tauchte heute folgender Beitrag auf :  Defektes Piwik nach Update auf 2.16.3

Kurzfassung: Weil Piwik (Webanalysesoftware wie Google Analytics) plötzlich nach einem Update  500er Fehler geworfen hat, entfernte der Serverbetreiber einfach Kurzerhand die paar Restsicherheitsmaßnahmen des Apachewebservers und erlaubte es dem Piwik unnötige und sehr gefährliche Apache-Directiven in der .htaccess  auszuführen. (Wie ich grade gesehen habe, ist mein Protest auf fruchtbaren Boden gefallen und er hat es korregiert 😀 )

Hintergrund des Protestes ist, daß mit der Anweisung „AllowOverride All“ in einer Htaccess auch AddHandler und Action Anweisungen erlaubt sind.  Mit denen kann u.a. das machen :

AddHandler php-script .php .pl .rb .py .exe .cgi .sh 
Action php-script /cgi-sys/cgiwrap

Mit „/cgi-sys/cgiwrap“, was ein CGIWrapper wie FastCGI oder ein Eigenbau wie bei uns sein kann, sorgt der Webserverbetreiber normalerweise dafür, daß Prozesse als User und in einer Chroot ausgeführt werden, statt als Apachebenutzer und mit Zugriff auf “ / „. Kann ich die Optionen als Angreifer frei setzen, kann ich eigene Kommandos statt des Cgiwrappers ausführen und damit auch außerhalb der Chrootumgebung. ( Klar das Ausführen von Programmen geht beim Webangriff auch anders, gehen wir mal davon aus, daß das der einzige Weg wäre).

Wenn ich eigene Kommandos ausführen kann, kann ich obige Schwachstelle ausnutzen und Root werden. Da die obige Schwachstelle der Bash darauf beruht, daß man eine SETUID Programm ausführen muß und in einer CHROOT keine SetUID Programme von Root sind, weil es keinen Root User gibt(der ist da prinzipbedingt unnötig), kann man trotz verwundbarer Version von Bash, den Angriff nicht durchführen.  Kann ich aber den Wrapper umgehen und im Realsystem arbeiten, finde ich auch Root-SetUID Programme und der Hack gelingt.

Und deswegen trägt man in seinen Vhost das hier ein : „AllowOverride AuthConfig Indexes Limit FileInfo“ und nichts anderes.

So tragen verschiedene Mechanismen dazu bei, daß ansonsten verwundbare Systeme doch nicht geknackt werden. Die Bash braucht man oft auch in der Chroot, außer man hat keine generelle Hostingumgebung, sondern läßt da genau eine Sache drin ablaufen, was auch legitim wäre.

 

Directcopy mit SSH

Für alte SSH Hasen ist es nichts Unbekanntes, daß man von einem dritten PC aus, direkt Files zwischen zwei anderen SSH-Servern hinundher kopieren kann. Dazu muß lediglich zwei vollständige Logins angeben:

scp user@server1:/path/foo user@server2:/path/

Solange man die schwache Passwortauthentifizierung benutzt, bekommt man zwei Abfragen zu den Passwörtern der beiden Zugänge. Nachvollziehbar, weil Server 1 das Passwort für Server 2 nicht kennt.

Was aber, wenn man das nicht mehr benutzen kann, weil man sich nur noch mit Key authentifizieren kann ?

Der erste Server, dem man das Kommando zum Kopieren von Daten gibt, akzeptiert klaglos den Schlüssel den unser SSH-Agent ( das ist der Gnome-Keyring-Manager der bei Euch auf dem Desktop läuft ) zur Verfügung stellt. Damit kann man zwar das Kopieren starten, wird sofort ausgebremst, weil Server 1 das Passwort von Server 2 wissen will.

Wenn Server 2 jetzt auch nur noch Keys akzeptiert, weil die PasswortAuth im SSHD deaktiviert wurden, und das solltet Ihr immer einstellen:

PermitRootLogin without-password

Dann habt Ihr ein Problem, denn den nötigen Key kann man nicht vom heimischen PC zum ersten Server senden und dann zur Auth bei Server 2 nutzen.  Um das zu umschiffen gibt es eine unschöne Lösung, die „mal“ geht, wenn es sich um wenige Daten handelt: die Option “ -3 “ (Minus Drei) .

Diese Option sagt SCP , daß es die Daten erst zum eigenen PC überträgt und dann erst zum Server 2. Man kann also nicht mehr von einem Directcopy reden. Am spart sich so lediglich, daß die Dateien erstmal im Temp-Ordner vom System landen und später von Hand gelöscht werden müssen. So gesehen, macht es den Kopierprozess schon einfacher.

Die Lösung mit den Bauchschmerzen

Das es SSH-Agenten gibt, hatte ich ja schon erwähnt. Auf einem normalen Server kann man das Tool auch mit genau dem Namen starten : ssh-agent . Das Programm installieren wir auf Server 1 und rufen es auf. Es gibt uns einige Umgebungsvariablen aus :

#!/bin/bash
SSH_AUTH_SOCK=/tmp/ssh-tqJtR00AWwOq/agent.2040; export SSH_AUTH_SOCK;
SSH_AGENT_PID=2048; export SSH_AGENT_PID;

Die müssen wir z.B. mit „export“ aktivieren, damit ssh den ssh-agent findet. Das obige Beispiel ist aus einem kleinen Script, daß beim Starten der Root-Shell ausgeführt wird. Damit ist man dann als Root automatisch an den ssh-agenten gebunden und muß sich nicht mehr um diese Details kümmern. Da man dem ssh-agent sagen kann, wie lange die Authentifizierungsdaten gecached werden sollen, kann man z.B. den ganzen Tag ohne Eingabe von Passwörtern für Keys arbeiten.

Auszug aus der /root/.bashrc

# Source ssh user agent
if [ -f /root/.sshagent ]; then
        .  /root/.sshagent
fi

Damit eröffnet sich eine Möglichkeit, die Daten von Server 1 auf Server 2 direkt zu kopieren, ohne schwache Passwörter benutzen zu müssen.  Man aktiviert also auf dem Server 1 den RSA/DSA – Schlüssel/key  für Server 2 im ssh-agent und kann dann mit SCP den ganzen Tag Aufträge verteilen.

ssh-add -i /path/foo/key.rsa

Wenn man Keys nutzt, sollte der jeweilige Key noch mit einem Passwort gesichert sein, damit nicht jeder den Key, so er denn erbeutet wurde, benutzen kann.

Und wieso Bauchschmerzen ?

Wenn man vernünftig Arbeiten will, muß der Agent die Authdaten mal min. für einen Arbeitstag cachen. Je länger desto mehr Bauchschmerzen sollte man bekommen, denn in der Zeit könnte jeder, der auf dem Server root wird, sich ungestört in allen Systemen einloggen oder Daten kopieren, zu denen der Schlüssel Einlass gewährt. Der Vorgang das einer Root wird, ist natürlich schon Horror pur, aber wenn die ganze Serverfarm betroffen ist, also wer bei dem Gedanken keine Bauchschmerzen bekommt, dem kann man nicht mehr helfen.

Wenn so ein Server sicher ist, braucht man natürlich keine Bauchschmerzen haben, aber bei den vielen Bugs die in allem möglichen drin ist…. puhh.. Ein bisschen Angst schwingt immer mit. Das mich keiner falsch versteht, ich liebe meinen ssh-agent, aber ich nutze ihn nur, wenn es unbedingt sein muß 🙂

Der logistische Teil

Der ssh-agent müßte auf allen Servern laufen und dort den Schlüssel aktiviert haben, von dem Daten irgendwohinanders kopiert werden sollen. Das kann im Detail recht aufwendig werden, wenn man nicht überall den gleichen Key benutzt.

Das es keine so gute Idee ist, überall den gleichen Key in jede Richtung zu benutzen, sollte Euch klar sein.

DDOS Angriff auf Brian Krebs Webpage

Wie Brian Krebs, ein bekannter Security Journalist, auf seiner Webseite bekannt gab, fand gestern der größte je von Akamai gemessene DDOS Angriff auf seine Webseite statt. Die von den Angreifern eingesetzte Bandbreite lag bei erstaunlichen 620 GigaBit / s . Der Angriff konnte von Akamai soweit abgewehrt werden, war aber wohl „dicht“ am Limit.

Mehr dazu gibt bei Brian Krebs im Blog.