Le bogue Shellshock affecte-t-il ZSH?


38

Est-ce que le bogue Shellshock Bash affecte ZSH?

La mise à niveau de Bash est-elle la seule solution?


Selon cette réponse sur un échange différent, ZSH n'exporte pas de fonctions. Étant donné que le bogue Shellshock a été provoqué par cette fonctionnalité spécifique à bash, les autres shells qui en sont dépourvus ne devraient probablement pas être affectés.
Lzam

Réponses:


36

Non, cela n'affecte pas ZSH.

Vous DEVEZ quand même mettre à jour bash car la plupart des scripts système sont écrits pour bash et vulnérables au bogue shellshock.

Pour tester votre ZSH, procédez comme suit:

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

Que fait exactement ce code?

  1. env x='() { :;}; echo vulnerable' crée une variable d'environnement avec un bogue connu en utilisant la commande à la fin de la variable
  2. zsh -c 'echo hello'lance le shell ZSH avec un simple salut (et évalue toutes les variables env, y compris x )

Si vous voyez une sortie:

vulnerable
hello

Ensuite, votre ZSH est vulnérable. Mine (5.0.2) n'est pas:

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

1
si nous utilisons zsh mais que nous avons toujours bash dans notre système! Avons-nous besoin de nous en préoccuper? sinon pourquoi?
Dineshkumar

16
@Dineshkumar: oui, vous devriez toujours vous inquiéter et vous mettre à jour. La raison en est que même si vous utilisez zsh, d’autres programmes (dhcp a été mentionné, de nombreuses applications PHP le feront probablement et beaucoup d’autres programmes et scripts sur une machine Linux typique) continueront d’appeler bash. (En fait, ils ne devraient pas, mais c'est devenu une mauvaise habitude.)
hans_meine

2
@stephenmurdoch Ubuntu 10.10 est assez vieux et n'a plus été supporté depuis plus de 2 ans ...
Izkata

2
@Ghanima: appeler bashest une mauvaise habitude pour les utilitaires système, car l'installation de bash n'est pas garantie; /bin/shest le shell standard et doit être un interpréteur de shell POSIX correct.
phord

2
fwiw - Lorsque bash est exécuté en tant que / bin / sh, il s'exécute en tant que shell compatible POSIX. Dans ce mode, cependant, il a aussi le bogue. env x='() { :;}; echo vulnerable' sh -c 'echo hello'
phord

6

De ce lien :

Vous pouvez déterminer si vous êtes vulnérable au problème d'origine dans CVE-2014-6271 en exécutant ce test:

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

Si vous voyez le mot vulnérable dans le résultat de cette commande, votre bash est vulnérable et vous devez le mettre à jour. Vous trouverez ci-dessous une version vulnérable d'OS X 10.8.5:

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

La sortie suivante est un exemple de version de bash non vulnérable.

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

Notez également que lors de l'application de bash aux correctifs, suivre les instructions du lien zshell a cessé d'être vulnérable, ce qui me fait penser que zshell utilise bash en tant que tel.
Vectoriser

9
Notez qu'il y a eu un suivi : env X='() { (a)=>\' bash -c "echo date"sur une bash corrigée et malgré beaucoup d'erreurs générées, produira un fichier appelé echocontenant la date. Je ne veux pas savoir pourquoi.
Jonas Schäfer

@ Jonas Attendez, produisez un fichier ?! Je comprends la vulnérabilité, mais c'est juste bizarre.
Poignée de porte

5
@vectorsize zshne pas utiliser bashà sa base. bashest explicitement appelé dans vos exemples. Peu importe le shell que vous utilisez pour exécuter ces lignes. Cette vulnérabilité concerne le shell bash récemment démarré, pas le shell à partir duquel il est exécuté.
Adaephon

2
@Adaephon On voudrait donc remplacer bashdans les exemples par $SHELL.
Jonas Schäfer

6

Le binaire n'est pas affecté

Cela n’affecte pas zshl’exécutable du shell, car son code source n’a jamais contenu l’erreur.
Il existe de nombreuses similitudes entre bashet zsh, mais ils ne sont pas implémentés indépendamment les uns des autres. La même fonctionnalité est implémentée de deux manières différentes et, plus important encore dans ce contexte, avec généralement des erreurs différentes.

Mais l'utilisation interactive est

Indirectement, cela affecte zshpresque autant le travail interactif avec le shell dans un terminal que le travail avec bash.

L'utilisation de of bashest tellement courante que l'on peut difficilement éviter de l'appeler.

Trop d'utilisations à éviter

  • les scripts que vous connaissez et que vous comptez utiliser zsh, mais qui contiennent réellement bash.
  • beaucoup de scripts shell qui utilisent #!/bin/bashpour spécifier bashcomme interprète.
  • de nombreuses commandes que vous supposez être des fichiers binaires, mais des scripts de shell, que certains utilisent bash.

  • dans de nombreux endroits où un shell est exécuté explicitement, bashpeut être utilisé et éventuellement requis.

    • comme des xargscommandes complexes , ou des gitalias impliquant des arguments
    • coquilles par défaut des émulateurs de terminaux
    • shell d'utilisateurs vous sudo à
    • etc.

4

Non, Shellshock n'affecte pas directement zsh.

Cependant, de nombreux environnements utilisant zsh comme shell par défaut ont également installé bash. N'importe quel shell, y compris zsh, peut être utilisé pour générer un shell bash compromis:

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

Pour vous protéger contre cela, vous devez installer un correctif, désinstaller ou désactiver toute version redondante de bash. Vous pouvez désactiver l'installation bash du système avec chmod:

$ chmod a-x /bin/bash

Cependant, il est courant que les scripts appellent explicitement bash. Les scripts effectuant cette opération, ainsi que ceux utilisant des fonctionnalités de script spécifiques à bash, échoueront si bash n'est pas disponible. Patching est la meilleure solution.


il semble que zsh utilise implicitement bash pour " importing function definition"? J'ai également testé avec l'injection ssh-server: ssh testuser@localhost '() { :;}; echo "$SHELL"'où je règle le testusershell de connexion sur /bin/zsh, et cela résonne/bin/zsh
Bossliaw
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.