O bug do Shellshock afeta o ZSH?

38

O bug do Shellshock Bash afeta o ZSH?

A atualização do Bash é a única solução?

marflar
fonte
de acordo com esta resposta em uma troca diferente, o ZSH não exporta funções. Como o bug do Shellshock foi causado por esse recurso específico do bash, outros shells que faltam provavelmente não devem ser afetados.
Lzam 29/09/14

Respostas:

36

Não, isso não afeta o ZSH.

Você ainda DEVE atualizar o bash, pois a maioria dos scripts do sistema são escritos para o bash e vulneráveis ​​ao bug do shellshock.

Para testar seu ZSH, faça o seguinte:

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

O que exatamente esse código faz?

  1. env x='() { :;}; echo vulnerable' cria uma variável de ambiente com erro conhecido usando o comando no final da variável
  2. zsh -c 'echo hello'lança shell ZSH com hello simples (e avalia todas as variáveis ​​env incluindo x )

Se você vir a saída:

vulnerable
hello

Então seu ZSH está vulnerável. O meu (5.0.2) não é:

$ env x='() { :;}; echo vulnerable' zsh -c 'echo hello'
hello
mente
fonte
1
se usarmos o zsh, mas ainda tivermos o bash em nosso sistema! precisamos nos preocupar com isso? se não por que?
Dineshkumar 26/09/14
16
@ Dineshkumar: sim, você ainda deve se preocupar e corrigir. O motivo é que, mesmo se você estiver usando o zsh, outros programas (o dhcp foi mencionado, muitos aplicativos PHP provavelmente o farão e muitos outros programas e scripts em uma máquina Linux típica) ainda chamarão bash. (Na verdade, eles não devem, mas tornou-se um mau hábito.)
hans_meine
2
@stephenmurdoch Ubuntu 10.10 é bastante antigo e não foi apoiada por mais de 2 anos ...
Izkata
2
@ Ghanima: chamar bashé um mau hábito para os utilitários de sistema, porque não é garantido que o bash esteja instalado; /bin/shé o shell padrão e é necessário que seja um interpretador de shell POSIX correto.
phord
2
fwiw - Quando o bash é executado como / bin / sh, é executado como um shell compatível com POSIX. Nesse modo, no entanto, ele também possui o bug. env x='() { :;}; echo vulnerable' sh -c 'echo hello'
phord
6

A partir deste link :

Você pode determinar se você está vulnerável ao problema original no CVE-2014-6271 executando este teste:

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

Se você vir a palavra vulnerável na saída desse comando, seu bash está vulnerável e você deve atualizar. Abaixo está uma versão vulnerável do OS X 10.8.5:

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

A saída a seguir é um exemplo de uma versão do bash não vulnerável.

$ env x='() { :;}; echo vulnerable' bash -c 'echo hello'
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
hello
vectorsize
fonte
Observe também que, quando o patch do bash, seguindo as instruções no link, o zshell deixou de ser vulnerável, o que me faz pensar que o zshell usa o bash em seu núcleo.
vectorsize
9
Observe que houve um acompanhamento : env X='() { (a)=>\' bash -c "echo date"em uma festança corrigida e, apesar de gerar muitos erros, produzirá um arquivo chamado echoque contém a data. Eu não quero saber o porquê.
Jonas Schäfer
@ Jonas Espere, produza um arquivo ?! Eu entendo a vulnerabilidade, mas isso é bizarro.
Doorknob
5
@vectorsize zshque não usar bashem seu núcleo. bashé explicitamente chamado em seus exemplos. Não importa qual shell você está usando para executar essas linhas. Essa vulnerabilidade afeta o shell bash recém-iniciado, não o shell do qual é executado.
Adaephon
2
@ Adaephon Então, gostaria de substituir bashnos exemplos por $SHELL.
Jonas Schäfer
6

O binário não é afetado

Não afeta zshcomo executável do shell, porque seu código-fonte nunca continha o erro.
Existem muitas semelhanças entre bashe zsh, mas elas não foram implementadas independentemente uma da outra. O mesmo recurso é implementado de duas maneiras diferentes e - mais importante neste contexto - geralmente com erros diferentes.

Mas o uso interativo é

Indiretamente, ele afeta o trabalho interativo com o zshshell em um terminal quase tanto quanto o trabalho com ele bash.

O uso de bashé tão comum que dificilmente se pode evitar chamá-lo.

Muitos usos para evitar

  • scripts que você conhece e espera usar zsh, mas que realmente contém bash.
  • muitos scripts de shell usados #!/bin/bashpara especificar bashcomo intérprete.
  • muitos comandos que você assume serem binários, mas são scripts de shell, alguns deles usando bash.

  • em muitos lugares onde um shell é executado explicitamente, bashpode ser usado e possivelmente necessário.

    • como xargscomandos complexos ou gitaliases envolvendo argumentos
    • invólucros padrão de emuladores de terminal
    • shell de usuários que você sudo
    • etc.
Volker Siegel
fonte
4

Não, o Shellshock não afeta o zsh diretamente.

No entanto, muitos ambientes que usam o zsh como shell padrão também possuem o bash instalado. Qualquer shell, incluindo zsh, pode ser usado para gerar um shell bash comprometido:

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

Para se defender, você deve corrigir, desinstalar ou desativar qualquer versão redundante do bash. Você pode desativar a instalação do sistema bash com chmod:

$ chmod a-x /bin/bash

No entanto, é comum que os scripts chamem explicitamente bash. Os scripts que fazem isso e os que usam recursos de script específicos do bash falharão se o bash não estiver disponível. Patching é a melhor solução.

joews
fonte
parece que o zsh usa implicitamente o bash para " importing function definition"? Eu também testado com injeção ssh-server: ssh testuser@localhost '() { :;}; echo "$SHELL"'onde eu definir o testuser's shell de login para /bin/zsh, e ecos/bin/zsh
Bossliaw