Влияет ли ошибка Shellshock на ZSH?

38

Влияет ли ошибка Shellshock Bash на ZSH?

Является ли обновление Bash единственным решением?

marflar
источник
согласно этому ответу на другом обмене, ZSH не экспортирует функции. Так как ошибка Shellshock была вызвана этой специфической функцией bash, другие оболочки, у которых ее нет, вероятно, не должны быть затронуты.
Изам

Ответы:

36

Нет, это не влияет на ZSH.

Вы по-прежнему ДОЛЖНЫ обновлять bash, так как большинство системных сценариев написаны для bash и уязвимы для ошибки «shellshock».

Чтобы проверить свой ZSH, сделайте это:

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

Что именно делает этот код?

  1. env x='() { :;}; echo vulnerable' создает переменную окружения с известной ошибкой, используя команду в конце переменной
  2. zsh -c 'echo hello'запускает оболочку ZSH с простым приветом (и оценивает все переменные env, включая x )

Если вы видите вывод:

vulnerable
hello

Тогда ваш ZSH уязвим. Мой (5.0.2) не является:

$ env x='() { :;}; echo vulnerable' zsh -c 'echo hello'
hello
Мент
источник
1
если мы используем zsh, но в нашей системе все еще есть bash! мы должны беспокоиться об этом? если не почему?
Динешкумар
16
@Dineshkumar: да, вы все равно должны волноваться и исправлять. Причина в том, что даже если вы используете zsh, другие программы (упоминалось о dhcp, вероятно, подойдут многие PHP-приложения и множество других программ и сценариев на типичной машине с Linux) будут по-прежнему вызывать bash. (На самом деле, они не должны этого
делать
2
@stephenmurdoch Ubuntu 10.10 довольно старая и не поддерживается более 2 лет ...
Изката,
2
@Ghanima: вызов bash- плохая привычка для системных утилит, потому что bash не гарантированно будет установлен; /bin/shявляется стандартной оболочкой и должна быть корректным интерпретатором оболочки POSIX.
phord
2
fwiw - когда bash запускается как / bin / sh, он работает как POSIX-совместимая оболочка. В этом режиме, однако, также есть ошибка. env x='() { :;}; echo vulnerable' sh -c 'echo hello'
phord
6

По этой ссылке :

Вы можете определить, уязвимы ли вы к исходной проблеме в CVE-2014-6271, выполнив этот тест:

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

Если вы видите слово уязвимое в выходных данных этой команды, ваш bash уязвим, и вам следует обновить его. Ниже приведена уязвимая версия от OS X 10.8.5:

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

Следующий вывод является примером неуязвимой версии bash.

$ env x='() { :;}; echo vulnerable' bash -c 'echo hello'
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
hello
vectorsize
источник
Также обратите внимание, что при исправлении bash, следуя инструкциям по ссылке, zshell перестал быть уязвимым, что заставляет меня думать, что zshell использует bash в своей основе.
векторное изображение
9
Обратите внимание, что было выполнено продолжение : env X='() { (a)=>\' bash -c "echo date"будет, на исправленном bash и, несмотря на большое количество ошибок, создать файл с именем echodate. Я не хочу знать почему.
Йонас Шефер
@Jonas Подожди, создай файл ?! Я понимаю уязвимость, но это просто странно.
Дверная ручка
5
@vectorsize zshвовсе не использует bashв своей основе. bashявно вызывается в ваших примерах. Не имеет значения, какую оболочку вы используете для запуска этих строк. Эта уязвимость касается только что запущенной оболочки bash, а не оболочки, из которой она запускается.
Adaephon
2
@Adaephon Так что хотелось бы заменить bashв примерах на $SHELL.
Йонас Шефер
6

Двоичный файл не затронут

Он не влияет zshкак исполняемый файл оболочки, потому что его исходный код никогда не содержал ошибку.
Есть много сходств между bashи zsh, но они были реализованы независимо друг от друга. Одна и та же функция реализована двумя различными способами и, что более важно в этом контексте, обычно с разными ошибками.

Но интерактивное использование

Косвенно это влияет на работу в интерактивном режиме с zshоболочкой в ​​терминале почти так же, как на работу с ним bash.

Использование bashнастолько распространено, что вряд ли можно этого не называть.

Слишком много применений, чтобы избежать

  • сценарии, которые вы знаете и ожидаете использовать zsh, но на самом деле содержат bash.
  • множество сценариев оболочки, которые используют #!/bin/bashдля указания bashв качестве интерпретатора.
  • многие команды, которые вы предполагаете, являются двоичными, но являются сценариями оболочки, некоторые из них используют bash.

  • во многих местах, где оболочка выполняется явно, bashможет использоваться и, возможно, требуется.

    • как сложные xargsкоманды или gitпсевдонимы, включающие аргументы
    • стандартные оболочки эмуляторов терминала
    • оболочка пользователей, которым вы судо
    • и т.п.
Volker Siegel
источник
4

Нет, Shellshock не влияет на zsh напрямую.

Однако во многих средах, которые используют zsh в качестве оболочки по умолчанию, также установлен bash. Любая оболочка, включая zsh, может быть использована для создания скомпрометированной оболочки bash:

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

Чтобы защититься от этого, вы должны исправить, удалить или отключить любые избыточные версии bash. Вы можете отключить установку системы bash chmod:

$ chmod a-x /bin/bash

Однако для сценариев характерно явное обращение к bash. Сценарии, которые делают это, и те, которые используют специфичные для bash функции сценариев, потерпят неудачу, если bash недоступен. Ямочный ремонт - лучшее решение.

joews
источник
кажется, что zsh неявно использует bash для " importing function definition"? Я также проверил с помощью инъекции ssh-сервера: ssh testuser@localhost '() { :;}; echo "$SHELL"'где я установил testuserоболочку входа в систему /bin/zsh, и она повторяется/bin/zsh
Bossliaw