¿El error Shellshock Bash afecta a ZSH?
¿La actualización de Bash es la única solución?
¿El error Shellshock Bash afecta a ZSH?
¿La actualización de Bash es la única solución?
Respuestas:
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?
env x='() { :;}; echo vulnerable'
crea una variable de entorno con error conocido usando el comando al final de la variablezsh -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
bash
es un mal hábito para las utilidades del sistema porque no se garantiza la instalación de bash; /bin/sh
es el shell estándar y se requiere que sea un intérprete de shell POSIX correcto.
env x='() { :;}; echo vulnerable' sh -c 'echo hello'
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
env X='() { (a)=>\' bash -c "echo date"
en un bash parcheado ya pesar de arrojar muchos errores, producirá un archivo llamado echo
que contiene la fecha. No quiero saber por qué.
zsh
no se usa bash
en su núcleo. bash
se 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.
bash
en los ejemplos por $SHELL
.
No afecta zsh
como el ejecutable del shell, porque su código fuente nunca contuvo el error.
Hay muchas similitudes entre bash
y 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.
Indirectamente, afecta el trabajo interactivo con el zsh
shell en un terminal casi tanto como trabajar con él bash
.
El uso de bash
es tan común que difícilmente se puede evitar llamarlo.
zsh
, pero que en realidad contienen bash
. #!/bin/bash
para especificar bash
como 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, bash
se puede usar y posiblemente sea necesario.
xargs
comandos complejos o git
alias que involucran argumentosNo, 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.
importing function definition
"? También probé con la inyección de servidor ssh: ssh testuser@localhost '() { :;}; echo "$SHELL"'
donde configuré el testuser
shell de inicio de sesión /bin/zsh
y hace eco/bin/zsh