Il bug Shellshock Bash ha effetto su ZSH?
L'aggiornamento di Bash è l'unica soluzione?
Il bug Shellshock Bash ha effetto su ZSH?
L'aggiornamento di Bash è l'unica soluzione?
Risposte:
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?
env x='() { :;}; echo vulnerable'
crea una variabile di ambiente con bug noto usando il comando alla fine della variabilezsh -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
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.
env x='() { :;}; echo vulnerable' sh -c 'echo hello'
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
env X='() { (a)=>\' bash -c "echo date"
produrrà un file chiamato echo
che contiene la data su una bash patchata e nonostante abbia lanciato molti errori . Non voglio sapere perché.
zsh
fa non usa bash
al suo interno. bash
viene 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.
bash
negli esempi con $SHELL
.
Non influisce zsh
sull'eseguibile della shell, poiché il suo codice sorgente non ha mai contenuto l'errore.
Esistono molte somiglianze tra bash
e 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.
Indirettamente influenza il lavoro interattivo con la zsh
shell in un terminale quasi quanto il lavorare con bash
.
L'uso di bash
è così comune che difficilmente si può evitare di chiamarlo.
zsh
, ma che in realtà contengono bash
. #!/bin/bash
per specificare bash
come 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, bash
può essere utilizzata e eventualmente richiesta.
xargs
comandi o git
alias che coinvolgono argomentiNo, 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.
importing function definition
"? Ho anche provato con l'iniezione di ssh-server: ssh testuser@localhost '() { :;}; echo "$SHELL"'
dove ho impostato la testuser
shell di login /bin/zsh
, ed echeggia/bin/zsh