Влияет ли ошибка Shellshock Bash на ZSH?
Является ли обновление Bash единственным решением?
Влияет ли ошибка Shellshock Bash на ZSH?
Является ли обновление Bash единственным решением?
Ответы:
Нет, это не влияет на ZSH.
Вы по-прежнему ДОЛЖНЫ обновлять bash, так как большинство системных сценариев написаны для bash и уязвимы для ошибки «shellshock».
Чтобы проверить свой ZSH, сделайте это:
env x='() { :;}; echo vulnerable' zsh -c 'echo hello'
Что именно делает этот код?
env x='() { :;}; echo vulnerable'
создает переменную окружения с известной ошибкой, используя команду в конце переменнойzsh -c 'echo hello'
запускает оболочку ZSH с простым приветом (и оценивает все переменные env, включая x )Если вы видите вывод:
vulnerable
hello
Тогда ваш ZSH уязвим. Мой (5.0.2) не является:
$ env x='() { :;}; echo vulnerable' zsh -c 'echo hello'
hello
bash
- плохая привычка для системных утилит, потому что bash не гарантированно будет установлен; /bin/sh
является стандартной оболочкой и должна быть корректным интерпретатором оболочки POSIX.
env x='() { :;}; echo vulnerable' sh -c 'echo hello'
По этой ссылке :
Вы можете определить, уязвимы ли вы к исходной проблеме в 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
env X='() { (a)=>\' bash -c "echo date"
будет, на исправленном bash и, несмотря на большое количество ошибок, создать файл с именем echo
date. Я не хочу знать почему.
zsh
вовсе не использует bash
в своей основе. bash
явно вызывается в ваших примерах. Не имеет значения, какую оболочку вы используете для запуска этих строк. Эта уязвимость касается только что запущенной оболочки bash, а не оболочки, из которой она запускается.
bash
в примерах на $SHELL
.
Он не влияет zsh
как исполняемый файл оболочки, потому что его исходный код никогда не содержал ошибку.
Есть много сходств между bash
и zsh
, но они были реализованы независимо друг от друга. Одна и та же функция реализована двумя различными способами и, что более важно в этом контексте, обычно с разными ошибками.
Косвенно это влияет на работу в интерактивном режиме с zsh
оболочкой в терминале почти так же, как на работу с ним bash
.
Использование bash
настолько распространено, что вряд ли можно этого не называть.
zsh
, но на самом деле содержат bash
. #!/bin/bash
для указания bash
в качестве интерпретатора.многие команды, которые вы предполагаете, являются двоичными, но являются сценариями оболочки, некоторые из них используют bash
.
во многих местах, где оболочка выполняется явно, bash
может использоваться и, возможно, требуется.
xargs
команды или git
псевдонимы, включающие аргументыНет, 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 недоступен. Ямочный ремонт - лучшее решение.
importing function definition
"? Я также проверил с помощью инъекции ssh-сервера: ssh testuser@localhost '() { :;}; echo "$SHELL"'
где я установил testuser
оболочку входа в систему /bin/zsh
, и она повторяется/bin/zsh