¿El error Shellshock afecta a ZSH?

38

¿El error Shellshock Bash afecta a ZSH?

¿La actualización de Bash es la única solución?

marflar
fuente
De acuerdo con esta respuesta en un intercambio diferente, ZSH no exporta funciones. Dado que el error Shellshock fue causado por esta característica específica de bash, otros shells que carecen de ella probablemente no deberían verse afectados.
lzam

Respuestas:

36

No, no afecta a ZSH.

Todavía DEBE actualizar bash como la mayor parte de los scripts del sistema están escritos para bash y vulnerables al error shellshock.

Para probar tu ZSH haz esto:

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

¿Qué hace exactamente este código?

  1. env x='() { :;}; echo vulnerable' crea una variable de entorno con error conocido usando el comando al final de la variable
  2. zsh -c 'echo hello'lanza el shell ZSH con un simple saludo (y evalúa todas las variables env, incluida x )

Si ve salida:

vulnerable
hello

Entonces tu ZSH es vulnerable. El mío (5.0.2) no es:

$ env x='() { :;}; echo vulnerable' zsh -c 'echo hello'
hello
mente
fuente
1
si usamos zsh pero todavía tenemos bash en nuestro sistema! ¿tenemos que preocuparnos por eso? si no por qué
Dineshkumar
16
@Dineshkumar: sí, aún debes preocuparte y parchear. La razón es que incluso si usted está utilizando zsh, otros programas (DHCP se mencionó, muchas aplicaciones PHP probablemente va a hacer, y un montón de otros programas y scripts en una máquina Linux típico) todavía fiesta llamada. (De hecho, no debería, pero se ha convertido en un mal hábito.)
hans_meine
2
@stephenmurdoch Ubuntu 10.10 es bastante antiguo y no ha sido compatible por más de 2 años ...
Izkata
2
@Ghanima: llamar bashes un mal hábito para las utilidades del sistema porque no se garantiza la instalación de bash; /bin/shes el shell estándar y se requiere que sea un intérprete de shell POSIX correcto.
Phord
2
fwiw: cuando bash se ejecuta como / bin / sh, se ejecuta como un shell compatible con POSIX. En este modo, sin embargo, también tiene el error. env x='() { :;}; echo vulnerable' sh -c 'echo hello'
phord
6

Desde este enlace :

Puede determinar si es vulnerable al problema original en CVE-2014-6271 ejecutando esta prueba:

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

Si ve la palabra vulnerable en la salida de ese comando, su bash es vulnerable y debería actualizarlo. A continuación se muestra una versión vulnerable de OS X 10.8.5:

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

El siguiente resultado es un ejemplo de una versión bash no vulnerable.

$ env x='() { :;}; echo vulnerable' bash -c 'echo hello'
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
hello
vectoresize
fuente
También tenga en cuenta que cuando parchea bash siguiendo las instrucciones en el enlace, zshell dejó de ser vulnerable, lo que me hace pensar que zshell usa bash en su núcleo.
vectoresize
9
Tenga en cuenta que ha habido un seguimiento : env X='() { (a)=>\' bash -c "echo date"en un bash parcheado ya pesar de arrojar muchos errores, producirá un archivo llamado echoque contiene la fecha. No quiero saber por qué.
Jonas Schäfer
@Jonas ¡Espera, produce un archivo ! Entiendo la vulnerabilidad, pero eso es extraño.
Pomo de la puerta
55
@vectorsize zshno se usa bashen su núcleo. bashse llama explícitamente en tus ejemplos. No importa qué shell esté utilizando para ejecutar estas líneas. Esta vulnerabilidad afecta al shell bash recién iniciado, no al shell desde el que se ejecuta.
Adaephon
2
@Adaephon Entonces, uno quisiera reemplazar bashen los ejemplos por $SHELL.
Jonas Schäfer
6

El binario no se ve afectado.

No afecta zshcomo el ejecutable del shell, porque su código fuente nunca contuvo el error.
Hay muchas similitudes entre bashy zsh, pero se implementaron independientemente entre sí. La misma característica se implementa de dos maneras diferentes y, lo que es más importante en este contexto, generalmente con diferentes errores.

Pero el uso interactivo es

Indirectamente, afecta el trabajo interactivo con el zshshell en un terminal casi tanto como trabajar con él bash.

El uso de bashes tan común que difícilmente se puede evitar llamarlo.

Demasiados usos para evitar

  • guiones que conoce y espera usar zsh, pero que en realidad contienen bash.
  • muchos scripts de shell que se usan #!/bin/bashpara especificar bashcomo intérprete.
  • muchos de los comandos que asume son binarios, pero son scripts de shell, algunos de los cuales usan bash.

  • en muchos lugares donde un shell se ejecuta explícitamente, bashse puede usar y posiblemente sea necesario.

    • como xargscomandos complejos o gitalias que involucran argumentos
    • shells predeterminados de emuladores de terminal
    • shell de usuarios que sudo a
    • etc.
Volker Siegel
fuente
4

No, Shellshock no afecta a zsh directamente.

Sin embargo, muchos entornos que usan zsh como shell predeterminado también tienen instalado bash. Cualquier shell, incluido zsh, se puede utilizar para generar un 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 defenderse de esto, debe parchear, desinstalar o deshabilitar cualquier versión redundante de bash. Puede deshabilitar la instalación de bash del sistema con chmod:

$ chmod a-x /bin/bash

Sin embargo, es común que los scripts llamen explícitamente a bash. Los scripts que hacen esto, y aquellos que usan funciones de scripting específicas de bash, fallarán si bash no está disponible. Parchear es la mejor solución.

joews
fuente
parece que zsh usa implícitamente bash para " importing function definition"? También probé con la inyección de servidor ssh: ssh testuser@localhost '() { :;}; echo "$SHELL"'donde configuré el testusershell de inicio de sesión /bin/zshy hace eco/bin/zsh
Bossliaw