Est-ce que le bogue Shellshock Bash affecte ZSH?
La mise à niveau de Bash est-elle la seule solution?
Est-ce que le bogue Shellshock Bash affecte ZSH?
La mise à niveau de Bash est-elle la seule solution?
Réponses:
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?
env x='() { :;}; echo vulnerable'
crée une variable d'environnement avec un bogue connu en utilisant la commande à la fin de la variablezsh -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
bash
est une mauvaise habitude pour les utilitaires système, car l'installation de bash n'est pas garantie; /bin/sh
est le shell standard et doit être un interpréteur de shell POSIX correct.
env x='() { :;}; echo vulnerable' sh -c 'echo hello'
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
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é echo
contenant la date. Je ne veux pas savoir pourquoi.
zsh
ne pas utiliser bash
à sa base. bash
est 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é.
bash
dans les exemples par $SHELL
.
Cela n’affecte pas zsh
l’exécutable du shell, car son code source n’a jamais contenu l’erreur.
Il existe de nombreuses similitudes entre bash
et 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.
Indirectement, cela affecte zsh
presque autant le travail interactif avec le shell dans un terminal que le travail avec bash
.
L'utilisation de of bash
est tellement courante que l'on peut difficilement éviter de l'appeler.
zsh
, mais qui contiennent réellement bash
. #!/bin/bash
pour spécifier bash
comme 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, bash
peut être utilisé et éventuellement requis.
xargs
commandes complexes , ou des git
alias impliquant des argumentsNon, 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.
importing function definition
"? J'ai également testé avec l'injection ssh-server: ssh testuser@localhost '() { :;}; echo "$SHELL"'
où je règle le testuser
shell de connexion sur /bin/zsh
, et cela résonne/bin/zsh