Влияет ли ошибка 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 и, несмотря на большое количество ошибок, создать файл с именем echodate. Я не хочу знать почему.
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