Come ricompilare Bash per evitare Shellshock (l'exploit remoto CVE-2014-6271 e CVE-2014-7169)?


368

Dato che Bash 3.2 (la versione fornita da OS X) è vulnerabile all'exploit di esecuzione remota noto come "Shell Shock" ( CVE-2014-6271 e CVE-2014-7169 ) come posso ricostruire Bash e proteggere il mio sistema prima di un patch ufficiale di Apple?

AGGIORNAMENTO: Nota che Apple ha ora rilasciato la patch ufficiale. Vedi sotto per i dettagli.


5
Apple ha rilasciato una correzione: support.apple.com/kb/DL1769
AL

1
La patch di aggiornamento 1.0 per OS X bash sopra menzionata è specifica per OS X 10.9.5 o successivo - Ecco tutti: OS X 10.7.5 (Lion), OS X 10.8.5 (Mountain Lion), OS X 10.9.5 ( Mavericks).
L'L

Sì, i link sono stati aggiunti 9 ore fa ma sono stati eliminati in modo errato. apple.stackexchange.com/revisions/146849/10
AlBlue,

creato un gist gist.github.com/dnozay/395dcdef05c6b4b1836a che ha la maggior parte dei passaggi e ha già le patch incluse (e dovrebbe funzionare su OSX 10.6).
dnozay,

@dnozay Grazie per la tua idea! Si prega di aggiornarlo per includere le patch 55 e 56 (già in uscita) e 57 (in uscita a breve).
Old Pro,

Risposte:


429

Stato

Apple ha rilasciato le correzioni di sicurezza di Bash per Shellshock e le relative vulnerabilità come " Aggiornamento OS X bash 1.0 ". Possono essere installati tramite il normale aggiornamento del sistema per le persone che utilizzano OS X Mountain Lion v10.8.5 o OS X Mavericks v10.9.5 (sono inclusi nell'aggiornamento della sicurezza 2014-005 ) e possono anche essere installati manualmente. Le correzioni Apple ufficiali sono disponibili anche per OS X Lion v10.7.5 e OS X Lion Server v10.7.5 ma sono disponibili solo tramite download manuale. Le correzioni di sicurezza sono disponibili tramite diversi URL in base alla versione del sistema operativo:

(Se vengono rilasciate nuove patch, inseriscile qui ma ti preghiamo di conservare anche quelle esistenti come riferimento.)

La patch Apple si prende cura di Shellshock e di molte altre vulnerabilità e va bene per la maggior parte delle persone. tl; dr la gente può smettere di leggere qui.

TUTTAVIA, l'attenzione attirata da Bash dal bug Shellshock ha indotto molti ricercatori a dare un'occhiata dura a Bash e continuano a essere scoperte sempre più vulnerabilità (difficili da sfruttare). Se sei molto preoccupato per la sicurezza (perché forse stai eseguendo OS X Server per ospitare un sito Web disponibile pubblicamente), allora potresti voler (provare a) tenere il passo con le vulnerabilità e le patch mentre continuano a scorrere compilando tu stesso. Altrimenti, non preoccuparti.

Cerca Apple per rilasciare un altro aggiornamento per colpire un po 'di tempo in futuro quando la polvere si depositerà sulla ricerca di ulteriori vulnerabilità.


È disponibile un set ufficiale di patch di bash per bash 3.2, patch 52, 53 e 54 (che corrispondono alle patch 25, 26 e 27 di Bash 4.3) che risolvono sia CVE-2014-6271 che CVE-2014-7169, così come il "Game over" visualizzato di seguito. Questo è stato testato da me ( @alblue ) e il post è stato aggiornato di conseguenza (e quindi sono stati apportati ulteriori aggiornamenti: vedere la revisione 41 per il post che si interrompe alla patch 54).

Molte vulnerabilità aggiuntive sono state segnalate contro bash. Secondo il post di Michal Zalewski se hai la patch 54 (e presumibilmente la patch ufficiale di Apple) "non ha senso ossessionare lo stato di questi singoli bug, perché non dovrebbero più rappresentare un rischio per la sicurezza:"

  • CVE-2014-6271 - RCE originale trovato da Stephane. Risolto da bash43-025 e corrispondenti voci del 24 settembre per altre versioni.

  • CVE-2014-7169 - bug di creazione file / consumo token trovato da Tavis. Risolto da bash43-026 & co (26 set)

  • CVE-2014-7186 - un incidente qui-doc 10+ probabilmente senza rischi per secondi trovato da Florian e Todd. Risolto da bash43-028 & co (1 ottobre).

  • CVE-2014-7187 - un off-by-one non-crash, probabilmente senza rischi al secondo trovato da Florian. Risolto da bash43-028 & co (1 ottobre).

  • CVE-2014-6277 - problema di memoria non inizializzato, quasi sicuramente RCE trovato da Michal Zalewski. Nessuna patch specifica ancora.

  • CVE-2014-6278 - Iniezione comando RCE trovata da Michal Zalewski. Nessuna patch specifica ancora.

Diventa piuttosto confuso. Fortunatamente Chet Ramey, il manutentore ufficiale di bash, ha pubblicato un CVE per mappare le patch . Il suo post fa riferimento alle patch per bash 4.3, io (@OldPro) le ho tradotte in patch per bash 3.2, che è ciò che è applicabile a OS X. Inoltre, da questo post ha rilasciato la patch 57, quindi l'ho aggiunto di seguito:

 bash32-052      CVE-2014-6271                           2014-09-24
 bash32-053      CVE-2014-7169                           2014-09-26
 bash32-054      exported function namespace change      2014-09-27 ("Game Over")
 bash32-055      CVE-2014-7186/CVE-2014-7187             2014-10-01
 bash32-056      CVE-2014-6277                           2014-10-02
 bash32-057      CVE-2014-6278                           2014-10-05

Vedi il post di David A. Wheeler per una sequenza temporale e maggiori dettagli.

@alblue ha pubblicato le istruzioni di build tramite la patch 55. I (@OldPro) ho aggiunto le patch 56 e 57 alle istruzioni ma non l'ho testato.

Test per la vulnerabilità originale

È possibile determinare se si è vulnerabili al problema originale in CVE-2014-6271 eseguendo questo test:

$ env x='() { :;}; echo vulnerable' bash -c 'echo hello'
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
hello

L'output di cui sopra è un esempio di una bashversione non vulnerabile . Se vedi la parola vulnerablenell'output di quel comando, sei bashvulnerabile e dovresti aggiornarlo. Di seguito è una versione vulnerabile di OS X 10.8.5:

Schermata del terminale bash che mostra la vulnerabilità in 10.8.5

Test per la nuova vulnerabilità

C'è stato un aggiornamento al post originale e Bash 3.2.52 (1) è ancora vulnerabile a una variazione della vulnerabilità, definita in CVE-2014-7169

$ rm -f echo
$ env X='() { (a)=>\' sh -c "echo date"; cat echo
sh: X: line 1: syntax error near unexpected token `='
sh: X: line 1: `'
sh: error importing function definition for `X'
Thu 25 Sep 2014 08:50:18 BST

L'output di cui sopra è un esempio di una bashversione vulnerabile . Se vedi una data nell'output di quel comando, sei bashvulnerabile.

Disabilitazione delle funzioni di importazione automatica per impedire "Game Over"

I ricercatori hanno notato, senza classificarlo come una vulnerabilità, che uno script potrebbe dirottare una funzione in una subshell usando le funzioni di importazione automatica:

$ env ls="() { echo 'Game Over'; }" bash -c ls
Game over

Il codice sopra riportato su un sistema interessato verrà visualizzato al Game Overposto dell'elenco di directory che ti aspetteresti ls. Ovviamente, echo 'Game Over'potrebbe essere sostituito da qualsiasi codice nefasto che desideri. Questo divenne noto come bug "Game Over".

Prima della disponibilità della patch 54, sia NetBSD che FreeBSD disabilitavano automaticamente le funzioni bash di importazione automatica, in parte per impedire "Game Over" ma principalmente per contenere ulteriori errori nel parser (come CVE-2014-7169 ) così come erano continuando a essere scoperto e aggiunto un nuovo flag della riga di comando--import-functionsper riattivare il vecchio comportamento predefinito. Io (@alblue) ho preparato una patch (contro la 3.2.53) da usare per gli altri se vogliono adottare anche questo comportamento e l'ho inclusa di seguito. Per impostazione predefinita, questa patch non è abilitata nello script di compilazione di seguito. Io (@OldPro) credo che questa patch non sia più necessaria o una buona idea, perché rompe la compatibilità con le versioni precedenti e le vulnerabilità contro cui è protetta sono molto ben affrontate dalla patch 54 e dalle patch precedenti, e abilitando questa patch non ufficiale si impedisce l'applicazione di patch future .

(Nota per gli editor delle domande; per favore non abilitarlo per impostazione predefinita, in quanto si tratta di una patch non ufficiale.)

a0c5c4d66742fddd0a35001cb91798a5fbf8a2f5 import_functions.patch

La patch può essere abilitata eseguendo export ADD_IMPORT_FUNCTIONS_PATCH=YESprima di eseguire la build. Notare che abilitando questa patch si disabiliteranno la patch 54 e eventuali patch future poiché non è possibile garantire che le patch future siano compatibili con la patch non ufficiale.

Apple Patch ha una vulnerabilità legata al Game Over, una sorta di

Come sottolineato da @ake_____ su Twitter, la patch ufficiale di Apple è ancora vulnerabile all'ambiente che blocca gli eseguibili:

$ env '__BASH_FUNC<ls>()'="() { echo Game Over; }" bash -c ls
Game Over

Gli utenti dovrebbero decidere da soli quanto sia importante. Io (@OldPro) penso che non ci sia nulla di cui preoccuparsi perché non esiste un exploit noto per questo comportamento (non è stato nemmeno assegnato un identificatore CVE) perché in generale gli attaccanti remoti senza privilegi non possono impostare il nome di una variabile di ambiente e gli attaccanti con privilegi non possono usalo per ottenere i privilegi che non hanno già (almeno non senza sfruttare una vulnerabilità aggiuntiva).

Per fornire un piccolo background, bash consente di definire funzioni e inoltre consente di esportare tali funzioni in sottoshell tramite il export -fcomando. Questo veniva implementato creando una variabile d'ambiente con lo stesso nome della funzione con il suo valore impostato sulla definizione della funzione. Così

$ ls () { echo 'Game Over'; }
$ export -f ls
$ echo $ls
Game Over

Ciò è accaduto perché ha export -f lscreato una variabile di ambiente denominata ls. La vulnerabilità "Game Over" era che si poteva creare direttamente questa variabile d'ambiente senza dover prima definire la funzione, il che significava che se si potesse iniettare il nome della variabile giusta si potrebbe dirottare un comando. Apple ha provato a risolvere questo problema rendendo difficile la creazione di una variabile con il nome giusto. La patch 54 ufficiale di bash rende in realtà impossibile creare una variabile con il nome giusto usando nomi di variabili che includono %quale carattere non è permesso in un nome di variabile, inserendo effettivamente le definizioni delle funzioni esportate in un diverso spazio dei nomi riservato.

Se nessuna delle precedenti ha senso per te, non preoccuparti. Per ora stai bene con la patch Apple.

File binari di sistema

OS X 10.9.5 (l'ultima versione stabile al momento) viene fornita con Bash v3.2.51:

$ bash --version
GNU bash, version 3.2.51(1)-release (x86_64-apple-darwin13)
Copyright (C) 2007 Free Software Foundation, Inc.

Puoi ottenere e ricompilare Bash come segue , a condizione che tu abbia installato Xcode (e che tu abbia eseguito xcodebuildalmeno una volta prima di accettare la licenza):

$ # If you want to disable auto-imported functions, uncomment the following
$ # export ADD_IMPORT_FUNCTIONS_PATCH=YES
$ mkdir bash-fix
$ cd bash-fix
$ curl https://opensource.apple.com/tarballs/bash/bash-92.tar.gz | tar zxf -
$ cd bash-92/bash-3.2
$ curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-052 | patch -p0    
$ curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-053 | patch -p0  
$ # See note above about ADD_IMPORT_FUNCTIONS_PATCH
$ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] && curl http://alblue.bandlem.com/import_functions.patch | patch -p0
$ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] || curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-054 | patch -p0
$ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] || curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-055 | patch -p0
$ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] || curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-056 | patch -p0
$ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] || curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-057 | patch -p0
$ cd ..
$ # Note: DO NOT ADD SUDO TO XCODEBUILD HERE
$ xcodebuild
$ build/Release/bash --version # GNU bash, version 3.2.57-release
$ build/Release/sh --version   # GNU bash, version 3.2.57-release
$ sudo cp /bin/bash /bin/bash.old
$ sudo cp /bin/sh /bin/sh.old
$ sudo cp build/Release/bash /bin
$ sudo cp build/Release/sh /bin

(Nota: puoi eseguirlo copiando e incollando il blocco di codice sopra, andando su Terminale e quindi eseguendolo pbpaste | cut -c 2- | sh. Fai sempre attenzione quando esegui script casuali da Internet però ...)

Successivamente, la versione di Bash dovrebbe essere v3.2.57:

$ bash --version
GNU bash, version 3.2.57-release (x86_64-apple-darwin13)
Copyright (C) 2007 Free Software Foundation, Inc.

Per motivi di sicurezza e dopo i test, ti consiglio di utilizzare chmod -xle versioni precedenti per assicurarti che non vengano riutilizzate o di spostarle in un sito di backup.

$ sudo chmod a-x /bin/bash.old /bin/sh.old

Altre risposte hanno soluzioni per chi utilizza MacPorts o Homebrew; questi non risolvono il problema, installano solo versioni aggiuntive di Bash. Si prega di vedere quelle risposte se si desidera aggiornare quelle in particolare.

Grazie

Grazie a Chet, che si occupa di bash e ha reso disponibili queste patch. Grazie a tutti gli altri che hanno commentato questo e migliorato nel tempo.

Ora Apple ha rilasciato la vera correzione, anche se questo potrebbe essere ancora utile. Poiché hanno rilasciato solo una correzione per Lion e versioni successive e la patch ufficiale fornisce GNU bash, versione 3.2.53 (1)-release (x86_64-apple-darwin13), tuttavia, il bug di Game over è ancora piuttosto vulnerabile. A questo punto, ricostruire la tua versione di Bash su 3.2.57 è probabilmente più sicuro che fare affidamento sulla patch di Apple, a meno che tu non lo faccia in modo sbagliato.


18

macports

Questo ti dà una versione bash 4.3.28 (1) che ha corretto sia le vulnerabilità (CVE-2014-6271 e CVE-2014-7169) sia alcune scoperte successivamente. Questo è utile se hai cambiato shell per usare Macports bash per ottenere le funzionalità della versione 4.

Non risolverà il problema degli script OS standard come have #!/bin/sho #!/bin/bashcome prima riga. Questo tipo di problema è il motivo per cui Macports tenta di non utilizzare le versioni dei programmi fornite da Apple poiché Macports tende ad essere aggiornato più rapidamente, ad esempio ha una versione più recente di bash)

Puoi fare in modo che il terminale lo usi come nella risposta Homebrew

Per installare macports segui queste istruzioni che sono
1. Installa Xcode e Xcode Command Line Tools
2. Accetta la licenza Xcode nel Terminale: sudo xcodebuild -license
3. Scarica MacPorts pkg per la tua versione di OS X: i collegamenti sono nella pagina
4. Esegui il pkg

Quando hai installato Macport, devi eseguire le versioni più recenti, eseguendolo

sudo port selfupdate

e ricompilare o ottenere gli ultimi binari da

sudo port upgrade outdated

5
Poiché si tratta di correggere una vulnerabilità di sicurezza nei file binari esistenti e ciò non sostituisce / corregge i file binari vulnerabili, non riesco a vedere come ciò risolva il problema.
AlBlue,

Utilizza la versione per Macport - ed è stato davvero richiesto dal commento di IanC
Mark

Sì. Dovremmo elencare le correzioni per tutti i luoghi di bashsolito su OS X - quindi la correzione di sistema, la correzione di Homebrew e MacPorts. Forse anche Fink. Personalmente lo preferirei se questo fosse fatto come una modifica alla risposta di @AlBlue. Quindi è tutta una, la più corretta, risposta.
Ian C.

2
@InaC questi dovrebbero essere separati poiché le risposte differiscono e una grande non può essere verificata; ad esempio, vedimi dire che questo non risolve il problema di Apple e la risposta fatta in casa copiando Homebrew Bash su OSX. In effetti sono domande separate
Marco,

Vedi la mia modifica alla risposta di @ AlBlue. Non sono d'accordo che questi dovrebbero essere separati.
Ian C.

17

NOTA relativa all'aggiornamento 1.0 ufficiale di Apple OS X bash: questo aggiornamento software porta la versione ufficiale di Apple bash a 3.2.53. La revisione della patch 3.2.54 offre le seguenti modifiche:

Questa patch modifica la codifica utilizzata da bash per le funzioni esportate per evitare scontri con variabili di shell ed evitare di dipendere solo dal contenuto di una variabile di ambiente per determinare se interpretarla o meno come una funzione di shell.

Per gli utenti che hanno già patchato il sistema con i file binari 3.2.54, è possibile sostituire i file binari compilati con la patch Apple oppure è possibile lasciare le cose come sono, ma è sconsigliato. Sebbene Apple abbia lasciato la versione binaria a 3.2.53, la patch Apple contiene la correzione per il test di exploit di seguito:

env X='() { (a)=>\' sh -c "echo date"; cat echo

Ciò significa che il binario ufficiale 3.2.53 di Apple contiene una sicurezza equivalente al binario vaniglia GNU 3.2.54. Uno sfortunato punto di confusione, ma è quello che è. La correzione di Apple non è semicotta. Sembra essere una soluzione completa al problema. Pertanto, la tabella di marcia di seguito per la compilazione della vaniglia bashe shdalla fonte GNU dovrebbe essere considerata un artefatto storico e, eventualmente, consultata come modello per come eseguire le patch in futuro, qualora fossero necessarie.

NOTA: con l'origine GNU vaniglia, shpresenta problemi di elevazione dei privilegi che causano errori in vari programmi di installazione, ad esempio Adobe Flash. Consiglio vivamente di attenersi ai binari con patch Apple. Considera questo schema di patch deprecato e sconsiderato.

Esiste una nuova patch GNU bash 3.2.55 che descrive la seguente correzione:

Bug-Descrizione:

Esistono due overflow del buffer locale in parse.y che possono causare lo scaricamento del core della shell quando vengono dati molti documenti qui allegati a un singolo comando o molti loop nidificati.

Lasciamo al gentile lettore la possibilità di decidere se sedersi con i binari ufficiali patchati di Apple o lanciare i propri per gestire i nuovi possibili exploit. Personalmente, seguirò i binari di Apple.


Questo post descrive in dettaglio come compilare e installare una vaniglia bashe shsu OS X. Ho scelto questa route poiché i seguenti esempi dettagliati usando un sorgente specifico di Apple non mi hanno lasciato con la corretta revisione della patch. YMMV. Questa installazione alla vaniglia è, tuttavia, mirata a sostituire i file binari di OS X in modo tale che quando Apple rilascia finalmente un aggiornamento di sicurezza, queste sostituzioni alla vaniglia saranno usurpate dalle loro corrispondenti controparti Apple.

La mia configurazione di base è:

OS X Lion 10.7.5 e Xcode 4.6.3 con tutte le utility da riga di comando installate.

I miei passi per risolvere questo sono stati:

Scarica il codice sorgente bash di base per 3.2.48 da:

https://ftp.gnu.org/gnu/bash/bash-3.2.48.tar.gz

Scarica le patch bash3.2.49, .50, .51, .52, .53, .54 e .55 da:

https://ftp.gnu.org/gnu/bash/bash-3.2-patches/

Li ho salvati come $ nomefile.patch, ad esempio bash3.2.50.patch.

CD nella directory di download e ...

Decomprimere il ramo di origine principale:

tar xzvf bash-3.2.48.tar.gz

cd bash-3.2.48

Supponendo di aver rinominato i file patch scaricati come descritto in precedenza,

cp ../*.patch .

Poi …

for file in *.patch ; do
  patch -p0 < $file
done

Questo dovrebbe mostrare patch di successo di vari file. In caso contrario, preparati a fare alcune esplorazioni e indagini.

Il prossimo:

sudo cp /bin/bash /bin/bash_old
sudo cp /bin/sh /bin/sh_old
sudo chmod -x /bin/bash_old
sudo chmod -x /bin/sh_old

Questo fondamentalmente ha eseguito il backup delle tue vecchie e vulnerabili bash e sh shell e ha rimosso il loro privilegio eseguibile. Ciò ti dà la capacità di ripristinare i comandi secondo necessità, ma rimuove la loro capacità di fare danni nel frattempo.

Il prossimo:

./configure --prefix=/ ; make ; sudo make install

Questo dovrebbe configurare, compilare e installare correttamente il nuovo binario bash in / bin. Al termine, esci da Terminal e riapri.

Dovresti, tutte le cose felici e sorridenti, essere in grado di bash --versione ora vedere 3.2.55, ad esempio:

Gaia:Downloads trane$ bash --version
GNU bash, version 3.2.55(1)-release (i386-apple-darwin11.4.2)
Copyright (C) 2007 Free Software Foundation, Inc.

L'output esatto nel comando sopra sarà diverso a seconda della versione di OS X.

Dovresti anche essere in grado di testare la tua vulnerabilità bashe scoprire che va bene.

NOTA: Finora abbiamo risolto solo bash, ma l' /bin/sheseguibile è ancora nel suo stato vulnerabile. Copiare semplicemente in bashcima shè uno stile Linux di fare le cose. L' shimplementazione di OS X presenta tuttavia alcune differenze bash, quindi ti consigliamo di trascinare nuovamente il compilatore. Ulteriori informazioni su come bashe shdifferire in OS X sono disponibili qui:

https://apple.stackexchange.com/a/89327/91441

Nella tua directory di download:

make clean

Nel tuo editor preferito, apri il file Makefile.ine scorri fino alla riga 99. Modificheremo la riga del Programma in modo che il binario che emettiamo sia shinvece bashcosì:

Program = sh$(EXEEXT)

Salvalo e poi

./configure --prefix=/ --enable-xpg-echo-default --enable-strict-posix-default
make ; sudo make install

Ora avrai costruito shquasi esattamente come farebbe Apple.

Un'ultima nota: su alcuni sistemi (tutti?), In genere Apple sembra posizionare l' bashbugeseguibile /usr/bin. La nostra compilazione lo avrà inserito /bin. Quindi, i passaggi finali qui:

sudo mv /usr/bin/bashbug /usr/bin/bashbug_old
sudo chmod -x /usr/bin/bashbug_old
sudo mv /bin/bashbug /usr/bin/bashbug

1
Non per lamentarsi o altro, ma quando la domanda è "come fare per ricompilare bash" e la mia risposta è "fai clic sul seguente link per rispondere a quella domanda, sembra che i requisiti di riepilogo siano validi.
Trane Francks,

2
Capito: la libreria readline inclusa in bash non è compatibile con 10.6. Installare invece GNU readline e quindi hackerare il makefile bash per usarlo. Installa readline: ftp.cwru.edu/pub/bash/readline-6.3.tar.gz In bash, dopo aver effettuato la configurazione, in Makefile, imposta READLINE_LIB = /usr/local/lib/libreadline.aed esegui una compilazione pulita. Quindi rimuovere e copiare il nuovo binario bash sopra /bin/bashe/bin/sh
Seth Noble il

2
Addendum: nel bash Makefile, è anche necessario impostare HISTORY_LIB = /usr/local/lib/libhistory.a. Altrimenti bash sarà dinamicamente collegato alla versione / usr / local di libhistory.
Seth Noble,

1
Nota che la versione scaricabile dalla pagina opensource di Apple ha delle modifiche personalizzate per farlo funzionare su OSX. Non consiglierei di usare la vanilla bash a monte, altrimenti non sostituirai like-for-like.
AlBlue,

1
Apple apporta molte modifiche per ottimizzare i programmi di utilità open source sul sistema. Detto questo, non riesco a vedere dove una vaniglia bashnon riesca in qualche modo a comportarsi da sola perché il kernel è diverso. In ogni caso, considero la mia soluzione temporanea; alla fine, Apple riuscirà a correggere il problema e i miei binari compilati verranno sostituiti (che è la mia ragione principale per la compilazione in /binprimo luogo.
Trane Francks,

15

Per chiunque abbia problemi con la compilazione dal sorgente, a partire dal 29 settembre, Apple ha rilasciato ufficialmente le patch per Mac OS X 10.9.5, 10.8.5 e 10.7.5:


1
Grazie! Questo potrebbe essere più semplice della ricompilazione per molti / molti.
AlBlue,

@AlBlue concordato. Anche se non completamente pulito nelle sue patch - come alcuni hanno sottolineato - questo è molto meglio di niente. E molto più sicuro di un codice sorgente compilante per principianti in preda al panico.
Jake Gould il

2
Come al solito, il ritardo di propagazione dell'aggiornamento software è in vigore. Mi chiedo quanto tempo ci vorranno per mostrare i pacchetti. È rinfrescante vedere che Apple ha risposto abbastanza rapidamente a questo problema!
Trane Francks,

2
@TraneFrancks “Come al solito, il ritardo di propagazione dell'aggiornamento software è in pieno effetto.” Non capisco davvero come un'organizzazione che, spingendo l'intero album degli U2 a tutti gli utenti iOS, possa in qualche modo soffocare con un aggiornamento di sicurezza inferiore a 4 MB.
Jake Gould il

@JakeGould: Heh. Sì, è una risatina. Ho appena controllato l'aggiornamento del software su questo sistema Lion e afferma che il sistema è aggiornato. Lo stesso con un altro sistema Mountain Lion qui.
Trane Francks,

5

Innanzitutto, è probabile che l'applicazione di patch bash e sh per questa vulnerabilità rompa alcuni script sul tuo Mac. Non hai davvero bisogno di farlo a meno che tu non stia offrendo servizi web a Internet pubblico direttamente dal tuo Mac. Quindi, se non è davvero necessario, attendi fino a quando non vi sarà un aggiornamento di sicurezza ufficiale da parte di Apple.

Attenzione, ecco alcune istruzioni su come eseguire questo aggiornamento usando Brew on Mavericks 10.9.

Per prima cosa conferma che stai usando un bash obsoleto:

$ which bash
/bin/bash
$ /bin/bash --version
GNU bash, version 3.2.51(1)-release (x86_64-apple-darwin13)
Copyright (C) 2007 Free Software Foundation, Inc.

La bash più recente è 4.3.25

Se Xcode non è installato, sono necessari gli strumenti della riga di comando Xcode, che possono essere installati da

$ xcode-select --install

O dal portale degli sviluppatori .

Per installare Brew ( http://brew.sh ):

$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Quindi fa:

$ brew doctor

Seguire le istruzioni in caso di problemi. Qui vengono affrontati molti problemi comuni .

Quindi aggiorna brew all'ultimo elenco di pacchetti:

$ brew update

Per ottenere l'ultima bash 4.3.25:

$ brew install bash

Questo installa bash in /usr/local/Cellar/bash/4.3.25/bin/bash

Il vecchio bashe shancora esiste /bin, così dopo l'installazione potrai rinominare i vecchi eseguibili in un nuovo file.

$ sudo mv /bin/bash /bin/bash_old
$ sudo mv /bin/sh /bin/sh_old

Se sei molto paranoico, puoi rimuovere i permessi di esecuzione su bash_old

$ sudo chmod a-x /bin/bash_old /bin/sh_old

Quindi creare un collegamento simbolico al nuovo bash 4.3.25 che viene installato.

$ sudo ln -s /usr/local/Cellar/bash/4.3.25/bin/bash /bin/bash
$ sudo ln -s /usr/local/Cellar/bash/4.3.25/bin/bash /bin/sh

Riavvia ed è completo.

Un avvertimento: questo potrebbe interrompere alcuni script di shell esistenti che potrebbero basarsi su bash 3.2 o sulle differenze che il Mac shha rispetto a Linux sh. C'è una risposta molto più sofisticata alla sostituzione di bash e sh dalle fonti, da una risposta di @TraneFranks in questo stesso thread.


4
L'applicazione di patch da 3.2.51 a 3.2.52 provocherà molti meno danni rispetto all'aggiornamento a 4.3.
AlBlue,

Ti avverto che potrebbe rompere alcuni script, ma 4.3.25 è ciò che Brew installa come attuale: sto cercando di offrire una versione che è facile (e) da installare che lo fa da zero. E puoi sempre ripristinare rinominando i vecchi eseguibili.
Christopher Allen,

2
Questo bug è sfruttabile da un server DHCP dannoso (ad es. Hotspot WiFi) e può completamente sviluppare il tuo computer, quindi vale la pena sistemarlo al più presto. Altre risposte hanno istruzioni migliori per la sostituzione /bin/bashe /bin/shciò probabilmente causerà meno problemi rispetto all'aggiornamento all'ultima bash di Brew.
Old Pro,

Il Mac potrebbe non essere vulnerabile all'attacco DHCP.
Christopher Allen,

10
L'attacco al server DCHP è possibile solo se il client DHCP utilizza script Bash, mentre l'implementazione OSX non lo fa.
AlBlue,

5

OS X 10.6.8 - Snow Leopard

Il post di @AlBlue è molto completo. Tuttavia, sul mio server OS X 10.6.8 la sua correzione non funzionerà. Apple non ha una correzione per 10.6.8 e i passaggi spiegati da @AlBlue non funzionano con Xcode 3.2.6 (che è l'ultima versione di Snow Leopard). Ricevo un errore:

** BUILD FAILED **

The following build commands failed:
sh:
    CodeSign /Users/bas/bash-fix/bash-92/build/Release/sh
bash:
    CodeSign /Users/bas/bash-fix/bash-92/build/Release/bash
(2 failures)

Per questo motivo sto usando brew.sh . Commenta i tuoi pensieri quando hai una soluzione migliore per OS X 10.6.8 Snow Leopard. Vedi anche il commento di @Jerome, ha avuto una patch di successo su OS X 10.6.8 Snow Leopard usando la soluzione di @ AlBlue. Comunque:

Prima installa brew con il seguente oneliner:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Aggiornare brew

brew update

Ora basta installare l'ultima versione di bashe sostituire quella corrente:

brew install bash
sudo sh -c 'echo "/usr/local/bin/bash" >> /etc/shells'
chsh -s /usr/local/bin/bash
sudo mv /bin/bash /bin/bash-backup
sudo ln -s /usr/local/bin/bash /bin/bash

È possibile impostare la shell di accesso predefinita ' Command (complete path)' per Terminal.app nelle sue preferenze ( Command,) inserisci qui la descrizione dell'immagine


nota: nei commenti alcuni utenti non pensano che questo metodo sia appropriato. Ma per me questo è l'unico metodo comprensibile per aggiornare BASH su OS X 10.6.8 Snow Leopard.


1
inoltre alcuni script si basano su bash 3 e non funzionano con bash 4 (macports ha corretto bash 4.3.25 a cui presumo che la birra fatta in casa sia stata aggiornata a
Mark

2
Non stai aggiornando sh, devi farlo anche tu. /bin/sh! = /bin/bash. Molti strumenti escono /bin/shquando si eseguono comandi di sistema. La system()chiamata di Ruby , ad esempio, viene utilizzata /bin/shquando si dispone di un carattere di espansione della shell che deve essere espanso nella stringa. Stai giocando a una partita persa usando Homebrew per aggiornare i file binari di sistema IMO. Dovresti aggiornare Homebrew bash oltre a fare un aggiornamento adeguato dei file binari di sistema.
Ian C.

1
Ricorda che OSX 10.8 e 10.9 usano Bash 3.2, quindi per coerenza diretta sono andato con 3.2 come versione. Questo si basava anche sulla build ufficiale di Apple per la versione precedente, che potrebbe includere extra come la consapevolezza estesa degli attributi ecc.
AlBlue,

1
Sto eseguendo 3.2.6 da solo su tutti i casi. Capisco che la compilazione fallisce durante l'esecuzione xcodebuild? Se è così, non l'ho provato. Ho alcuni solidi suggerimenti da darti da parte: controlla se hai più build bash, considera la pulizia (disinstalla brew) e possibilmente reinstalla xcode ... quindi riavvia il processo di patch.
Girolamo

1
Ho avuto seri problemi di controllo del lavoro con lo stock bash-4.3 creato a mano su Snow Leopard (se avvio emacs e poi lo sospendo, non posso riprenderlo con 'fg'). Da allora ho scaricato il sorgente Snow Leopard per bash da opensource.apple.com/release/mac-os-x-1068 , applicato le patch da ftp.gnu.org/gnu/bash/bash-3.2-patches e ricostruito su effetto molto migliore.
mormegil,

-6

Puoi seguire le istruzioni qui: https://github.com/tjluoma/bash-fix Fondamentalmente, procedi come segue in un Terminale:

curl -s https://raw.githubusercontent.com/tjluoma/bash-fix/master/bash-fix.sh | zsh -f

5
L'esecuzione di script shell casuali da account github casuali non è il modo in cui si arriva a una situazione più sicura su qualsiasi macchina. Vuoi fidarti dell'end point.
Ian C.

Devo essere d'accordo con Ian qui. È davvero facile introdurre alcuni danni drammatici attraverso script shell non attendibili, come i problemi descritti da questi CVE.
Trane Francks,

Sono in forte disaccordo con questa diffusione di FUD. LEGGI tutti gli script di shell prima di eseguirli e solo da https: //.
dhchdhd,
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.