Frage Was ist die CVE-2014-6271-Schwachstelle (Shellshock) und wie kann ich sie beheben?


In letzter Zeit gab es Neuigkeiten bezüglich "CVE-2014-6271" (Siehe USN-2362-1), was eine Schwachstelle in Bash ist. Woher weiß ich, ob ich davon betroffen bin, wie kann ich es beheben und warum sollte es mich interessieren?

Dies ist aufgrund seines Umfangs und Schweregrads als kanonische Antwort auf diese Sicherheitsanfälligkeit konzipiert.


140
2017-09-24 21:48


Ursprung


"Wie repariere ich es?" -> Führen Sie einfach Ihren Upgrade-Manager aus! Wirklich, Ubuntu veröffentlicht Sicherheitsupdates, es gibt ein dediziertes Sicherheitsteam. Bitte posten Sie keine Antworten zum Erstellen von Bash aus der Quelle!; Es ist unnötig kompliziert und schwieriger, Ihr System in Zukunft zu warten. - gertvdijk
Plus, auch der zusätzliche CVE für die unvollständige Lösung. CVE-2014-7169 - gertvdijk
Bitte machen posten Sie Antworten über das Bauen von der Quelle. Ob sie sollten oder nicht, einige Leute haben uralte Ubuntu-Server, und das Bauen von der Quelle kann ihre einzige Wahl sein. - GaryO
oops, tut mir leid, ich habe gerade gemerkt, dass ich bash anstelle von strich in den test gesetzt habe. Es macht nichts, es ist in Ordnung. - Matt H
Lesen: oss-sec: Betreff: CVE-2014-6271: Remotecodeausführung über Bash. Bash Bug wurde noch nicht behoben - blade19899


Antworten:


Was ist Bash?

Bash ist die standardmäßige interaktive Shell in Ubuntu. Wenn Sie mit dem Terminal kommunizieren (entweder über den Terminal-Emulator, über ein tty oder ssh), geben Sie im Allgemeinen Befehle ein, die bash wird lesen und ausführen. Selbst wenn Sie das Terminal überhaupt nicht benutzen, haben Sie immer noch Bash.

Auf Ubuntu, /bin/sh ist nicht Bash (es ist Strich). Nur Bash ist von dieser Sicherheitsanfälligkeit betroffen.

Wie beeinflusst mich der Exploit?

Bash und das OS verfolgen eine Reihe von Umgebungsvariablen Dies beschreibt den aktuell angemeldeten Benutzer, wo nach Programmen auf der Festplatte gesucht wird, und andere solche Funktionen. Durch die Erstellung einer Umgebungsvariablen mit einer bestimmten Struktur kann ein Angreifer möglicherweise Code beim nächsten Start von Bash ausführen.

Der Angreifer kann diese Umgebungsvariable auf mehrere Arten festlegen:

  • Remote-Verbindung zu einem Dienst wie SSH mit einem bestimmten Setup wie Git über SSH. Wie Mitre warnt, die Verwendung der sshd ForceCommand Option ist ein Angriffsvektor. Konten, deren Shell nicht bash ist, sind nicht betroffen.
  • Sie in die Einstellung der Umgebungsvariablen tricksen.
  • Ein anderes Programm verursachen, um eine Umgebungsvariable so einzustellen, dass sie diesen Wert hat. Zum Beispiel haben Sie möglicherweise einen Webserver und ein Skript, die eine Umgebungsvariable mit bestimmten Benutzerinhalten festlegen müssen. Selbst wenn dieses Skript seine eigenen erstellt und andere Umgebungsvariablen nicht berührt, ist es genug. Eine einzelne Umgebungsvariable mit einem beliebigen Namen und einem präparierten Wert reicht aus, damit der Exploit erfolgreich ist.
  • Andere Möglichkeiten habe ich hier nicht erwähnt.

Sobald sie diese Variable beim nächsten Mal gesetzt haben bash öffnet für irgendein Grund, der Code Ihres Angreifers wird ausgeführt. Dies ist besonders beängstigend mit sudo -s, da es bash als Super-Benutzer hervorbringt (eine Benutzerregel mit Administratorrechten) voll Kontrolle über die Daten und Programme Ihres Computers). Selbst wenn Sie bash nur als Standardbenutzer starten, können die Dateien dieses Benutzers gelöscht werden.

Es ist wichtig zu beachten, dass selbst wenn Sie nicht selbst Bash verwenden, viele Programme bash selbst als Teil ihrer Operation spawn. Selbst in diesem Fall sind Sie verwundbar. Allerdings Ubuntu /bin/sh ist nicht bash, daher sind nur Programme betroffen, die explizit bash und nicht die Standard-Skript-Shell aufrufen.

Laut Mitre:

Vektoren, die die ForceCommand-Funktion in OpenSSH sshd, die Module mod_cgi und mod_cgid im Apache HTTP-Server, Skripts, die von nicht angegebenen DHCP-Clients ausgeführt werden, und andere Situationen, in denen die Umgebung über eine Berechtigungsgrenze von Bash ausgeführt wird, ausführen.

Bin ich verletzlich?

Verwenden Sie dpkg, um Ihre installierte Paketversion zu überprüfen:

dpkg -s bash | grep Version

Dies wird Informationen auf Ihrem suchen bash Paket und filtern Sie die Ausgabe, um Ihnen nur die Version zu zeigen. Die festen Versionen sind 4.3-7ubuntu1.4, 4.2-2ubuntu2.5, und 4.1-2ubuntu3.4.

Zum Beispiel sehe ich:

wlan1-loopback% dpkg -s bash | grep Version
Version: 4.3-7ubuntu1.4

und kann feststellen, dass ich nicht verletzlich bin.

Wie aktualisiere ich?

Der Standard-Update-Manager wird Ihnen dieses Update anbieten. Dies ist ein hervorragendes Beispiel dafür, wie Sicherheitsupdates wichtig sind, unabhängig davon, welches Betriebssystem Sie verwenden oder wie gut es gewartet wird.

Das USN Bulletin gibt an, dass neue Versionen für Ubuntu 14.04 Trusty Tahr, 12.04 Precise Pangolin und 10.04 Lucid Lynx veröffentlicht wurden. Wenn Sie sich nicht in einer dieser LTS-Versionen befinden, sich aber in einer relativ aktuellen Version befinden, können Sie höchstwahrscheinlich ein gepatchtes Paket finden.

Überprüfen Sie zuerst, ob Sie

Wenn Sie verwundbar sind, sollten Sie zuerst die neuesten Paketlisten abrufen:

sudo apt-get update && sudo apt-get install bash

Der erste Befehl stellt sicher, dass Sie die neueste Paketliste haben, die die feste Version enthält, und der zweite Befehl installiert die neueste (feste) Version von bash.

Während der Fehler nur dann ins Spiel kommt, wenn Bash erzeugt wird, ist es immer noch eine gute Idee, sofort neu zu booten, wenn es machbar ist.


127
2017-09-24 21:48



Es tut uns leid, Du bist verwundbar. Der ursprüngliche Patch behebt das ganze Problem nicht. Sehen cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-7169 AFAIAA gibt es derzeit Nein öffentlich verfügbares Update Siehe z.B. people.canonical.com/~ubuntu-security/cve/pkg/bash.html - Mormegil
@hexafraction Wo liest du, dass 12.10 dafür ein Update erhält? Ich denke nicht, 12.10, 13.04, 13.10 sind sehr viel End-of-Life! Und auch Backport-Repositories sind Wird nicht für Sicherheitsupdates verwendet. - gertvdijk
@hexafraction Nein, das tun sie nicht! Das ist der Sinn von End-of-Life: überhaupt keine Unterstützung mehr. - gertvdijk
@ MichaelHärtl Wenn du auf Ubuntu 12.10 bist, kannst du die 12.04 Version von Bash aus herunterladen packages.ubuntu.com/precise/bash und installieren Sie es manuell. - David
Fix für CVE-2014-7169 ist im Update Manager (für mich) verfügbar. - Calmarius


Stehlte das ab über Hacker News. Wenn Sie Probleme mit Ihren Repos wie mir (Odroid-XU) haben, dann sollte dies gut funktionieren, wenn Sie aus der Quelle patchen / bauen wollen.

TMPDIR=/tmp/bash-src
mkdir $TMPDIR
cd $TMPDIR
#download bash
wget http://ftp.gnu.org/gnu/bash/bash-4.3.tar.gz
#download all patches
for i in $(seq -f "%03g" 1 999); do 
  wget http://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-$i
  if [[ $? -ne "0" ]]; then
    MAX=$(expr $i - 1)
    break;
  fi
done
tar zxf bash-4.3.tar.gz 
cd bash-4.3
#apply all patches
for i in $(seq -f "%03g" 1 $MAX);do
  echo apply patch bash43-$i
  patch -p0 < ../bash43-$i
done
#build and install
./configure && make
sudo make install
cd ../..
rm -r $TMPDIR

Dann renne:

env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

Und wenn du bekommst:

bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
this is a test

Dann bist du alle gut!


WARNUNG: make install wird bash installieren /usr/local/bin, damit /bin/bash ist nicht modifiziert und kann von curl aufgerufen werden !!


27
2017-09-25 02:30



So bauen Sie Bash 3.2 mit dem Patch auf debian lenny: gist.github.com/mattwhite/86de50d30134129e44ef - Matt White
-1. Keine Notwendigkeit, aus der Quelle zu bauen. Ubuntu hat einen Sicherheitspatch in den Repositories. Wenn Sie Probleme mit Ihrem Repo haben, beheben Sie das stattdessen. Sie werden wahrscheinlich in vielerlei Hinsicht anfällig sein, wenn Sie keine Sicherheitsupgrades erhalten! - gertvdijk
@Matt Weiß Danke! Du hast mir gerade ein paar Stunden gerettet :) - Florian Fida
@FlorianFida Das ist AskUbuntu! Jeder auf dieser Seite wird erwartet, dass er seine Antworten im Rahmen der Verwendung von Ubuntu veröffentlicht. - gertvdijk
@ MichaelHärtl 12.10 ist End-of-Life. Es erhält seit längerer Zeit keine Sicherheitsupdates mehr. Aktualisierung!!! - gertvdijk


Hinweis: Der Sicherheitspatch für CVE-2014-7169 wurde als Standardsicherheitsupdate veröffentlicht. Es müssen keine zusätzlichen PPAs hinzugefügt werden, um diesen Patch zu erhalten. Nur das Folgende wird benötigt.

sudo apt-get update

sudo apt-get upgrade

Um sicherzustellen, dass Sie die bash korrekt gepatcht haben, führen Sie den folgenden Befehl aus

dpkg -s bash | grep Version

Wenn Sie auf 14.04 LTS sind, sollten Sie eine Ausgabe von sehen:

Version: 4.3-7ubuntu1.4

Wenn Sie auf 12.04 LTS sind, sollte Ihre Ausgabe:

 Version: 4.2-2ubuntu2.5

9
2017-09-25 18:30



Das war richtig, aber ein offizieller Patch wurde jetzt zur Verfügung gestellt, so dass das Sicherheitsupdate veröffentlicht wurde. Folglich sind diese Schritte nicht mehr notwendig. - Robie Basak
Das ist richtig. Ich werde den obigen Beitrag bearbeiten. Vielen Dank. - branch.lizard


Wenn du am 11.04 bist: benutze die untenstehenden Schritte (es hat für mich funktioniert)

cd ~/
mkdir bash
wget https://ftp.gnu.org/gnu/bash/bash-4.3.tar.gz
for i in $(seq -f "%03g" 0 25); do wget https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-$i; done

Wenn es nicht heruntergeladen werden benötigt Patch dann installieren Sie das FTP-Paket

apt-get install ftp
for i in $(seq -f "%03g" 0 25); do wget https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-$i; done
tar zxvf bash-4.3.tar.gz
cd bash-4.3
for i in $(seq -f "%03g" 0 25);do patch -p0 < ../bash43-$i; done
./configure && make && make install
apt-get install build-essential
./configure && make && make install

Um zu sehen, ob der Patch angewendet wurde:

env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

1
2017-09-25 17:13





Ich benutze Natty 11.04, was EOL ist (und ich habe /etc/apt/sources.list aktualisiert, um old-releasesubuntu.com zu verwenden), also muss ich aus der Quelle bauen. Ich wollte ein .deb erstellen, also ist zumindest die Paketverwaltung "bewusst", die Bash-Version ist nicht die Standardversion. Ich bin nicht 100% erfolgreich - allerdings ist das Paket als "neuer" registriert und der bash Binär endet behoben, also hier ist, was ich getan habe:

apt-get source bash
wget https://gist.githubusercontent.com/drj11/e85ca2d7503f28ebfde8/raw/31bd53ed2e47b220d3c728f5440758e0f76769de/gistfile1.c -O bash_CVE-2014-6271.patch
wget https://gist.githubusercontent.com/drj11/239e04c686f0886253fa/raw/046e697da6d4491c3b733b0207811c55ceb9d927/gistfile1.c -O bash_CVE-2014-6271_plus.patch
cd bash-4.2/

Jetzt im (Unter) Verzeichnis bash-4.2/, gibt es: eine Datei bash-4.2.tar.xz, die entpackt werden müssen, um an die bash Quelle; und ein Unterverzeichnis namens debian.

Ich habe die folgenden Änderungen vorgenommen, um Abhängigkeiten zu vermeiden texlive: im bash-4.2/debian/control:

Source: bash
...
Build-Depends: autoconf, autotools-dev, patch, bison, libncurses5-dev,
# texinfo, debhelper (>= 5), texi2html, locales, gettext, sharutils, time, xz-ut
ils
 debhelper (>= 5), locales, gettext, sharutils, time, xz-utils
# Build-Depends-Indep: texlive-latex-base, ghostscript
Build-Depends-Indep: ghostscript

... und in bash-4.2/debian/rules:

binary-doc: bash-install #bash-doc-build
        dh_testdir
        dh_testroot
        mkdir -p $(d_doc)/usr/share/doc/$(p)
        dh_installdocs -p$(p_doc) 
ifeq ($(with_gfdl),yes)
        #cp -p build-bash/doc/bashref.pdf $(d_doc)/usr/share/doc/$(p)/.
        #dh_link -p$(p_doc) \
        #    /usr/share/doc/$(p)/bashref.pdf /usr/share/doc/$(p_doc)/bashref.pdf
else
        rm -f $(d_doc)/usr/share/doc-base/bashref
endif
        rm -f $(d_doc)/usr/share/info/dir*
        #cp -p build-bash/doc/bash.html build-bash/doc/bash.pdf \
        #    $(d_doc)/usr/share/doc/$(p)/
        #dh_link -p$(p_doc) \
        #    /usr/share/doc/$(p)/bash.html /usr/share/doc/$(p_doc)/bash.html \
        #    /usr/share/doc/$(p)/bash.pdf /usr/share/doc/$(p_doc)/bash.pdf
        dh_installchangelogs -p$(p_doc) bash/CWRU/changelog
        ...

Um die Version zu ändern, in diesem bash-4.2/ Verzeichnis, tun:

bash-4.2$ dch --local patchCVE

... und füllen Sie die Notizen im Changelog, wenn Sie gefragt werden. Dadurch wird sichergestellt, dass das .deb (und verwandte Metadaten) aufgerufen wird (in meinem Fall) bash_4.2-0ubuntu3patchCVE1_i386.deb.

Dann können Sie versuchen, mit zu bauen dpkg-buildpackage -us -uc oder debuild Befehl. Hinweis - Beide entpacken die Quelle aus der Zip-Datei und übergehen damit eventuell vorhandene Patches! Führen Sie eine davon einmal aus, damit die Quelle entpackt und erstellt wird (Hinweis debuild kann am Ende immer noch aufgrund texlive scheitern, aber es sollte entpacken und die Quelle aufbauen).

Wenden Sie dann die Patches an; Beachten Sie, dass Sie verwenden sollten -p1 hier, weil du gerade in der bash-4.2/ Verzeichnis:

bash-4.2$ patch -p1 < ../bash_CVE-2014-6271.patch 
bash-4.2$ patch -p1 < ../bash_CVE-2014-6271_plus.patch 

Erneutes Wiederherstellen der gepatchten Version durch Ausführen von:

bash-4.2$ fakeroot debian/rules build 

Dies würde die ausführbare Datei neu erstellen. um es zu testen:

bash-4.2$ env VAR='() { :;}; echo Bash is vulnerable!' ./build-bash/bash -c "echo Bash Test"

Führen Sie zum Erstellen der .deb-Dateien Folgendes aus:

bash-4.2$ fakeroot debian/rules binary

Dadurch werden die .deb-Dateien im übergeordneten Verzeichnis gespeichert. um ihren Inhalt aufzulisten:

bash-4.2$ dpkg -c ../bash_4.2-0ubuntu3patchCVE1_i386.deb

So installieren Sie das .deb:

bash-4.2$ sudo dpkg -i ../bash_4.2-0ubuntu3patchCVE1_i386.deb

Aus irgendeinem Grund enthält dieses .deb jedoch eine nicht gepatchte Binärdatei (?!), Also musste ich zusätzlich tun:

bash-4.2$ sudo cp bash-4.2/build-bash/bash /bin/

... und danach begann der Test für mich richtig zu verlaufen:

$ env VAR='() { :;}; echo Bash is!' bash -c "echo Bash Test"
bash: warning: VAR: ignoring function definition attempt
bash: error importing function definition for `VAR'
Bash Test

0
2017-09-28 10:16



Frage: Die Originalfrage gibt 1 möglichen Angriffsvektor als "Skripte, die von nicht spezifizierten DHCP-Clients ausgeführt werden" an. Was bedeutet das? Bedeutet dies, dass Ubuntus / sbin / dhclient <- anfällig ist? - Bran
Ich denke, dass die unspezifizierten Clients bedeuten, dass Ubuntu einen infizierten / sbin / dhclient hat, der dann Befehle ausführt, die dazu führen, dass das Bash-Skript Shellshock startet. Sind DHCP-Clients anfällig für Shellshock? (Hoffnung, die Sinn macht, siehe meine obige Nachricht vom 10. Oktober) - Bran