Che cos'è la vulnerabilità bash CVE-2014-6271 (Shellshock) e come posso risolverlo?


141

Di recente, ci sono state notizie in merito a "CVE-2014-6271" (Vedi USN-2362-1 ), che è una vulnerabilità in Bash. Come faccio a sapere se ne sono affetto, come posso ripararlo e perché dovrei preoccuparmene?

Questo è concepito come una risposta canonica per questa vulnerabilità, a causa della sua portata e gravità.


18
"come lo aggiusto?" -> esegui il tuo gestore aggiornamenti! Davvero, Ubuntu rilascia aggiornamenti di sicurezza, c'è un team di sicurezza dedicato. Si prega di non pubblicare risposte sulla costruzione di Bash dalla fonte! ; è inutilmente complicato e difficile mantenere il sistema in futuro.
gertvdijk,

5
Inoltre, anche il CVE aggiuntivo per la correzione incompleta. CVE-2014-7169
gertvdijk,

18
Si prega di fare risposte pubblicare di costruire dai sorgenti. Sia che debbano o meno, alcune persone hanno antichi server Ubuntu e la costruzione dalla fonte potrebbe essere la loro unica opzione.
GaryO,

3
oops, scusami ho appena realizzato che ho messo bash invece di dash nel test. Non importa, va bene.
Matt H,

4
Leggi: oss-sec: Re: CVE-2014-6271: esecuzione di codice remoto tramite bash . Il bug di Bash non è stato ancora corretto
blade19899,

Risposte:


126

Che cos'è Bash?

Bash è la shell interattiva predefinita in Ubuntu. Quando si interfaccia con il terminale (tramite l'emulatore di terminale, su tty o ssh), in genere si digitano comandi che bashleggeranno ed eseguiranno. Anche se non usi affatto il terminale, hai ancora Bash.

Su Ubuntu, /bin/shnon è bash (è trattino). Questa vulnerabilità interessa solo bash.

In che modo l'exploit mi influenza?

Bash e il sistema operativo tengono traccia di una serie di variabili di ambiente che descrivono l'utente attualmente connesso, dove cercare programmi sul disco rigido e altre funzioni simili. Creando una variabile d'ambiente con una struttura specifica, un utente malintenzionato potrebbe essere in grado di eseguire il codice al successivo avvio di Bash.

L'attaccante può impostare la variabile di ambiente in diversi modi:

  • Connettiti in remoto a un servizio come SSH con una configurazione specifica come git over ssh. Come avverte Mitre, l'uso ForceCommanddell'opzione sshd è un vettore di attacco. Gli account la cui shell non è bash non sono interessati.
  • Ti induce a impostare la variabile di ambiente.
  • Causare un altro programma per impostare una variabile d'ambiente per avere quel valore elaborato. Ad esempio, potresti avere un server web e uno script che devono impostare una variabile di ambiente con contenuto utente specifico. Anche se quello script crea il proprio e non tocca altre variabili d'ambiente, è abbastanza. Una singola variabile d'ambiente con qualsiasi nome e un valore predisposto è sufficiente affinché l'exploit abbia successo .
  • Altri modi che non ho menzionato qui.

Una volta impostata questa variabile, la volta successiva si bashapre per qualsiasi motivo, verrà eseguito il codice del tuo aggressore. Ciò è particolarmente spaventoso in sudo -squanto si genera bash come superutente (una regola utente amministrativa che ha il pieno controllo dei dati e dei programmi del computer). Anche se avvii bash solo come utente standard, i file di quell'utente possono essere eliminati.

È importante notare che anche se non usi bash da solo, molti programmi genereranno bash da soli come parte del loro funzionamento. Anche in questo caso, sei vulnerabile. Tuttavia, Ubuntu /bin/shnon è bash, quindi sono interessati solo i programmi che invocano esplicitamente bash e non la shell di script predefinita.

Secondo Mitre:

vettori che coinvolgono la funzione ForceCommand in OpenSSH sshd, i moduli mod_cgi e mod_cgid nel server HTTP Apache, script eseguiti da client DHCP non specificati e altre situazioni in cui l'impostazione dell'ambiente avviene oltre un limite di privilegi dall'esecuzione di Bash.

Sono vulnerabile?

Utilizzare dpkg per verificare la versione del pacchetto installato:

dpkg -s bash | grep Version

Questo cercherà informazioni sul bashpacchetto e filtrerà l'output per mostrarti solo la versione. Le versioni fisse sono 4.3-7ubuntu1.4, 4.2-2ubuntu2.5e 4.1-2ubuntu3.4.

Ad esempio, vedo:

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

e posso determinare che non sono vulnerabile.

Come faccio ad aggiornare?

Il gestore aggiornamenti standard ti offrirà questo aggiornamento. Questo è un ottimo esempio di quanto siano importanti gli aggiornamenti di sicurezza, indipendentemente dal sistema operativo utilizzato o dalla sua manutenzione.

Il Bollettino USN afferma che sono state rilasciate nuove versioni per Ubuntu 14.04 Trusty Tahr, 12.04 Precise Pangolin e 10.04 Lucid Lynx. Se non ti trovi in ​​una di queste versioni LTS, ma in una versione relativamente recente, molto probabilmente sarai in grado di trovare un pacchetto con patch.

Innanzitutto, controlla se

Se sei vulnerabile, dovresti prima prendere gli elenchi di pacchetti più recenti:

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

Il primo comando si assicura di disporre dell'elenco dei pacchetti più recente che include la versione fissa e il secondo comando installa la versione più recente (fissa) di bash.

Mentre il bug sembra entrare in gioco solo quando viene generato bash, è comunque una buona idea riavviare immediatamente se possibile.


20
Siamo spiacenti, sei vulnerabile . La patch originale non risolve l'intero problema. Vedi cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-7169 AFAIAA, al momento non sono disponibili soluzioni pubblicamente disponibili. Vedi ad esempio people.canonical.com/~ubuntu-security/cve/pkg/bash.html
Mormegil,

4
@hexafraction Dove leggi che 12.10 riceve un aggiornamento per questo? Non penso proprio, 12.10, 13.04, 13.10 sono davvero End-of-Life ! Inoltre, i repository di backport non vengono utilizzati per gli aggiornamenti di sicurezza .
gertvdijk,

2
@hexafraction No, non lo fanno! Questo è il punto centrale dell'essere End-of-Life: nessun supporto.
gertvdijk,

1
@ MichaelHärtl Se usi Ubuntu 12.10, puoi scaricare la versione 12.04 di bash da pacchetti.ubuntu.com/precise/bash e installarla manualmente.
David,

2
La correzione per CVE-2014-7169 è disponibile nel gestore aggiornamenti (per me).
Calmarius,

27

L' ho rubato di nascosto alla Hacker News . Se hai problemi con i tuoi repository come me (Odroid-XU), allora dovrebbe funzionare bene se vuoi patch / build dal sorgente.

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

Quindi eseguire:

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

E se ottieni:

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

Allora siete tutti bravi!


ATTENZIONE: make install installerà bash in /usr/local/bin, quindi /bin/bashnon viene modificato e può essere richiamato da curl !!


1
Ecco come compilare
Matt White

13
-1. Non è necessario compilare dalla fonte. Ubuntu ha una patch di sicurezza nei repository. Se hai "problemi con il tuo repository", risolvilo invece. Probabilmente sarai vulnerabile in molti altri modi se non ricevi aggiornamenti di sicurezza!
gertvdijk,

1
@Matt White Grazie! Mi hai appena salvato un paio d'ore :)
Florian Fida,

5
@FlorianFida Questo è AskUbuntu! Tutti su questo sito dovrebbero pubblicare risposte nell'ambito dell'uso di Ubuntu.
gertvdijk,

6
@ MichaelHärtl 12.10 è End-of-Life. Non riceve più aggiornamenti di sicurezza da molto tempo. Aggiornamento !!!
gertvdijk,

9

Nota: la patch di sicurezza per CVE-2014-7169 è stata rilasciata come aggiornamento di sicurezza standard. Non è necessario aggiungere ulteriori ppa per ricevere questa patch. È necessario solo quanto segue.

sudo apt-get update

sudo apt-get upgrade

Per assicurarsi di aver corretto correttamente la patch bash, eseguire il comando seguente

dpkg -s bash | grep Version

Se sei su 14.04 LTS, dovresti vedere un output di:

Version: 4.3-7ubuntu1.4

Se sei su 12.04 LTS, il tuo output dovrebbe essere:

 Version: 4.2-2ubuntu2.5

1
Ciò era corretto, ma ora è stata resa disponibile una patch ufficiale, quindi è stato rilasciato l'aggiornamento di sicurezza. Di conseguenza questi passaggi non sono più necessari.
Robie Basak,

Questo è corretto. Modificherò il post sopra. Grazie.
branch.lizard,

1

Se sei su 11.04: usa i passaggi seguenti (ha funzionato per me)

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

se non viene scaricato patche richiesto, installare il pacchetto ftp

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

Per vedere se la patch è stata applicata:

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

0

Sto usando Natty 11.04, che è EOL (e ho aggiornato /etc/apt/sources.list per usare old-releases.ubuntu.com), quindi devo compilare dal sorgente. Volevo creare un .deb, quindi almeno il pacchetto gestito è "consapevole" che la versione bash non è quella predefinita. Non ho successo al 100%, tuttavia, il pacchetto è registrato come "più recente" e il file bashbinario finisce fisso, quindi ecco cosa ho fatto:

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/

Ora, nella (sotto) directory bash-4.2/, c'è: un file bash-4.2.tar.xz, che deve essere decompresso per arrivare al bashsorgente; e una sottodirectory chiamata debian.

Ho apportato le seguenti modifiche per evitare dipendenze da texlive: in 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

... e 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
        ...

Per modificare la versione, in questa bash-4.2/directory, eseguire:

bash-4.2$ dch --local patchCVE

... e compilare le note nel log delle modifiche quando richiesto. Questo assicurerà che il .deb (e i relativi metadati) sia chiamato (nel mio caso) bash_4.2-0ubuntu3patchCVE1_i386.deb.

Quindi puoi provare a costruire con dpkg-buildpackage -us -uco debuildcomando. Nota: uno di questi disimballerà l'origine dalla zip, ignorando così tutte le patch che potresti aver avuto! Tuttavia, esegui uno di questi una volta in modo che l'origine sia decompressa e debuildcompilata (la nota potrebbe comunque non riuscire alla fine a causa di texlive, ma dovrebbe decomprimere e costruire l'origine).

Quindi, applicare le patch; nota che dovresti usare -p1qui, perché attualmente sei nella bash-4.2/directory:

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

Quindi ricostruire la versione corretta eseguendo:

bash-4.2$ fakeroot debian/rules build 

Ciò ricostruirà l'eseguibile; per testarlo:

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

Per creare i file .deb, eseguire:

bash-4.2$ fakeroot debian/rules binary

Ciò salverà i file .deb nella directory padre; per elencare i loro contenuti:

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

Per installare il .deb:

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

Tuttavia, per qualche motivo, questo .deb contiene un binario senza patch (?!), Quindi ho dovuto anche fare:

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

... e successivamente il test ha iniziato a passare correttamente per me:

$ 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

Domanda: La domanda originale indica 1 possibile vettore di attacco come "script eseguiti da client DHCP non specificati". Cosa significa questo? Questo significa che Ubuntu / sbin / dhclient <- è vulnerabile?
Crusca

Penso che forse i client non specificati significhino che Ubuntu ha un / sbin / dhclient infetto, che quindi esegue comandi che portano allo script bash che avvia shellshock. È questo che i client DHCP sono vulnerabili allo shellshock? (Spero che abbia un senso, vedi il mio messaggio sopra del 10 ottobre)
Bran
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.