38

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

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

4 ответа4

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 с простым hello (и вычисляет все переменные env, включая x)

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

vulnerable
hello

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

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

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

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

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

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

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

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

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

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

    • как сложные команды xargs или псевдонимы git с аргументами
    • стандартные оболочки эмуляторов терминала
    • оболочка пользователей, которым вы судо
    • и т.п.
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
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 недоступен. Ямочный ремонт - лучшее решение.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .