Il bug Shellshock influenza ZSH?


38

Il bug Shellshock Bash ha effetto su ZSH?

L'aggiornamento di Bash è l'unica soluzione?


secondo questa risposta su uno scambio diverso, ZSH non esporta funzioni. Poiché il bug Shellshock è stato causato da questa caratteristica specifica di bash, probabilmente non dovrebbero essere interessate altre shell a cui manca.
lzam,

Risposte:


36

No, non influisce su ZSH.

DEVI comunque aggiornare bash poiché la maggior parte degli script di sistema sono scritti per bash e vulnerabili al bug shellshock.

Per testare il tuo ZSH, procedi come segue:

env x='() { :;}; echo vulnerable' zsh -c 'echo hello'

Cosa fa esattamente questo codice?

  1. env x='() { :;}; echo vulnerable' crea una variabile di ambiente con bug noto usando il comando alla fine della variabile
  2. zsh -c 'echo hello'lancia la shell ZSH con un semplice saluto (e valuta tutte le variabili env tra cui x )

Se vedi l'output:

vulnerable
hello

Quindi il tuo ZSH è vulnerabile. Il mio (5.0.2) non è:

$ env x='() { :;}; echo vulnerable' zsh -c 'echo hello'
hello

1
se usiamo zsh ma abbiamo ancora bash nel nostro sistema! dobbiamo preoccuparci di questo? se no perché?
Dineshkumar,

16
@Dineshkumar: sì, dovresti comunque preoccuparti e rattoppare. Il motivo è che anche se stai usando zsh, altri programmi (è stato menzionato dhcp, probabilmente molte applicazioni PHP lo faranno, e molti altri programmi e script su una tipica macchina Linux) chiameranno comunque bash. (In realtà, non dovrebbero, ma è diventata una cattiva abitudine.)
hans_meine,

2
@stephenmurdoch Ubuntu 10.10 è piuttosto vecchio e non è supportato da oltre 2 anni ...
Izkata,

2
@Ghanima: chiamare bashè una cattiva abitudine per le utility di sistema perché non è garantito che bash sia installato; /bin/shè la shell standard ed è necessario che sia un interprete shell POSIX corretto.
phord,

2
fwiw - Quando bash viene eseguito come / bin / sh, viene eseguito come shell compatibile con POSIX. In questa modalità, tuttavia, ha anche il bug. env x='() { :;}; echo vulnerable' sh -c 'echo hello'
phord,

6

Da questo link :

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

env x='() { :;}; echo vulnerable' bash -c 'echo hello'

Se vedi la parola vulnerabile nell'output di quel comando, bash è vulnerabile e dovresti aggiornarlo. Di seguito è una versione vulnerabile di OS X 10.8.5:

env x='() { :;}; echo vulnerable' bash -c 'echo hello'
vulnerable
hello

Il seguente output è un esempio di una versione bash non vulnerabile.

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

Si noti inoltre che durante l'applicazione di patch bash seguendo le istruzioni sul collegamento zshell ha smesso di essere vulnerabile, il che mi fa pensare che zshell usi bash al suo interno.
vettori

9
Nota che c'è stato un follow-up : env X='() { (a)=>\' bash -c "echo date"produrrà un file chiamato echoche contiene la data su una bash patchata e nonostante abbia lanciato molti errori . Non voglio sapere perché.
Jonas Schäfer,

@Jonas Aspetta, produci un file ?! Capisco la vulnerabilità, ma è solo bizzarro.
Doorknob,

5
@vectorsize zshfa non usa bashal suo interno. bashviene esplicitamente chiamato nei tuoi esempi. Non importa quale shell stai usando per eseguire queste linee. Questa vulnerabilità interessa la shell bash appena avviata, non la shell da cui è stata eseguita.
Adaephon,

2
@Adaephon Quindi uno vorrebbe sostituire bash negli esempi con $SHELL.
Jonas Schäfer,

6

Il binario non è interessato

Non influisce zshsull'eseguibile della shell, poiché il suo codice sorgente non ha mai contenuto l'errore.
Esistono molte somiglianze tra bashe zsh, ma sono state implementate in modo indipendente l'una dall'altra. La stessa funzionalità è implementata in due modi diversi e, cosa più importante in questo contesto, di solito con errori diversi.

Ma l'uso interattivo è

Indirettamente influenza il lavoro interattivo con la zshshell in un terminale quasi quanto il lavorare con bash.

L'uso di bashè così comune che difficilmente si può evitare di chiamarlo.

Troppi usi da evitare

  • script che conosci e ti aspetti di usare zsh, ma che in realtà contengono bash.
  • molti script di shell che usano #!/bin/bashper specificare bashcome interprete.
  • molti comandi che presumi sono binari, ma sono script di shell, alcuni dei quali utilizzano bash.

  • in molti luoghi in cui una shell viene eseguita in modo esplicito, bashpuò essere utilizzata e eventualmente richiesta.

    • come complesso xargs comandi o gitalias che coinvolgono argomenti
    • shell predefinite di emulatori terminali
    • shell di utenti a cui sudo
    • eccetera.

4

No, Shellshock non influisce direttamente su zsh.

Tuttavia, molti ambienti che usano zsh come shell predefinita hanno anche installato bash. Qualsiasi shell, incluso zsh, può essere usata per generare una shell bash compromessa:

zsh  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'
Fri 26 Sep 2014 12:05:57 BST

Per difendersi da ciò, è necessario applicare patch, disinstallare o disabilitare eventuali versioni ridondanti di bash. È possibile disabilitare l'installazione di bash di sistema con chmod:

$ chmod a-x /bin/bash

Tuttavia, è comune che gli script chiamino esplicitamente bash. Gli script che eseguono questa operazione e quelli che utilizzano funzionalità di scripting specifiche di bash non funzioneranno se bash non è disponibile. Patching è la soluzione migliore.


sembra che zsh usi implicitamente bash per " importing function definition"? Ho anche provato con l'iniezione di ssh-server: ssh testuser@localhost '() { :;}; echo "$SHELL"'dove ho impostato la testusershell di login /bin/zsh, ed echeggia/bin/zsh
Bossliaw,
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.