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

8214
marflar

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

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

38
согласно [этому ответу] (http://unix.stackexchange.com/a/59431/81612) на другом обмене, ZSH не экспортирует функции. Так как ошибка Shellshock была вызвана этой специфической функцией bash, другие оболочки, у которых ее нет, вероятно, не должны быть затронуты. lzam 10 лет назад 0

4 ответа на вопрос

36
mente

No, it doesn't affect ZSH.

You still MUST update bash as most of the system scripts are written for bash and vulnerable to the shellshock bug.

To test your ZSH do this:

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

What exactly does this code do?

  1. env x='() { :;}; echo vulnerable' creates an environment variable with known bug using command in the end of variable
  2. zsh -c 'echo hello' launches ZSH shell with simple hello (and evaluating all env variables including x)

If you see output:

vulnerable hello 

Then your ZSH is vulnerable. Mine (5.0.2) is not:

$ env x='() { :;}; echo vulnerable' zsh -c 'echo hello' hello 
Большое спасибо. Я обнаружил, что мои машины Ubunutu 10.10 все уязвимы, но мои Centos 6.4 не ... marflar 10 лет назад 0
если мы используем zsh, но в нашей системе все еще есть bash! мы должны беспокоиться об этом? если не почему? Dineshkumar 10 лет назад 1
@Dineshkumar: да, вы все равно должны волноваться и исправлять. Причина в том, что даже если * вы * используете zsh, другие программы (упомянутый dhcp, вероятно, подойдут многие PHP-приложения и многие другие программы и скрипты на типичной машине с Linux) будут по-прежнему вызывать bash. (На самом деле, они не должны, но это стало плохой привычкой.) hans_meine 10 лет назад 16
@hans_meine, почему это плохая привычка? Если кто-то пишет скрипт, используя, скажем, специальный синтаксис / функцию определенной оболочки, не будет ли неуместно вызывать `#! / Bin / sh` вместо интерпретатора, для которого ваш скрипт? Ghanima 10 лет назад 0
@stephenmurdoch Ubuntu 10.10 довольно старая и не поддерживается более 2 лет ... Izkata 10 лет назад 2
@Ghanima: вызывать `bash` - плохая привычка для системных утилит, потому что bash не гарантированно устанавливается; `/ bin / sh` является стандартной оболочкой и должна быть корректным интерпретатором оболочки POSIX. phord 10 лет назад 2
@phord, конечно, по поводу системных утилит, но если бы я написал сценарий, основанный на некоторых особенностях `bash` (что само по себе можно считать плохой привычкой), было бы разумно называть` bash` интерпретатором, а не `/ bin / sh`. Ghanima 10 лет назад 0
fwiw - когда bash запускается как / bin / sh, он работает как POSIX-совместимая оболочка. В этом режиме, однако, он также имеет ошибку. `env x = '() {:;}; эхо уязвимо 'sh -c' эхо привет'` phord 10 лет назад 2
Кроме того, я думаю, что где-то здесь стоит отметить, что вполне возможно, что у zsh есть * различные * уязвимости, которые могут быть выявлены в будущем. lindes-hw 10 лет назад 0
@ lindes-hw Вполне возможно, что для каждого компонента программного обеспечения он имеет одинаковые или различные уязвимости, которые могут быть выявлены в будущем. OJFord 10 лет назад 0
@Ghanima Я назвал использование bash «плохой привычкой», потому что частое использование / bin / sh и * ограниченного набора функций оболочки POSIX * (без раковины) было бы вполне достаточным и заставляло бы скрипты работать в системах с оболочками не-bash. Многие люди небрежны в этом отношении и просто предполагают «стандартную систему Linux» с bash. Во-вторых, я бы всегда пытался напрямую вызывать другие программы, а не проходить через оболочку. Часто оболочка используется излишне (например, из PHP или Python) для вызова какой-либо внешней программы («выполнить команду»), когда было бы намного безопаснее не проходить через оболочку. hans_meine 10 лет назад 1
@phord Спасибо за то, что указали на то, что bash также содержит ошибку «шеллшок» при вызове в режиме POSIX. Я надеялся, что это не будет (но не сделал бы никакой ставки ;-)). hans_meine 10 лет назад 0
@OllieFord: Да, именно к этому я и стремился. По сути, я хотел убедиться, что этот ответ не интерпретировался как «Нет, zsh не уязвим для атаки», а вместо этого интерпретировался как «Нет, у zsh нет этой конкретной уязвимости». lindes-hw 10 лет назад 0
6
vectorsize

From this link:

You can determine if you are vulnerable to the original problem in CVE-2014-6271 by executing this test:

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

If you see the word vulnerable in the output of that command your bash is vulnerable and you should update. Below is a vulnerable version from OS X 10.8.5:

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

The following output is an example of a non-vulnerable bash version.

$ env x='() { :;}; echo vulnerable' bash -c 'echo hello' bash: warning: x: ignoring function definition attempt bash: error importing function definition for `x' hello 
Также обратите внимание, что при исправлении bash, следуя инструкциям по ссылке, zshell перестал быть уязвимым, что заставляет меня думать, что zshell использует bash в своей основе. vectorsize 10 лет назад 0
Обратите внимание, что было [продолжение] (https://twitter.com/taviso/status/514887394294652929): `` env X = '() {(a) => \' bash -c "дата эха" `` В исправленном bash, несмотря на большое количество ошибок, создаст файл с именем `` echo``, содержащий дату. Я не хочу знать почему. Jonas Schäfer 10 лет назад 9
@Jonas Подожди, создай * файл * ?! Я понимаю уязвимость, но это просто странно. Doorknob 10 лет назад 0
@ Doorknob Мое предположение (я не смотрел на код или патчи), синтаксический анализатор сохраняет некоторое состояние при сбое в определении сломанной функции в переменной окружения. А именно,> и \ (или их значение), похоже, сохраняются. Кажется, что \ что-то ускользает, поэтому все сводится к выполнению ``> эхо-даты``. [См. Также этот пост о безопасности oss] (http://www.openwall.com/lists/oss-security/2014/09/24/40) Jonas Schäfer 10 лет назад 0
@vectorsize `zsh` * не * не использует` bash` в своей основе. `bash` явно вызывается в ваших примерах. Неважно, какую оболочку вы используете для запуска этих строк. Эта уязвимость касается только что запущенной оболочки bash, а не оболочки, из которой она запускается. Adaephon 10 лет назад 5
@Adaephon Так что хотелось бы заменить `` bash`` в примерах на `` $ SHELL``. Jonas Schäfer 10 лет назад 2
@adaephon конечно !! ты прав, как глупо с моей стороны ^^ vectorsize 10 лет назад 0
6
Volker Siegel

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

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

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

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

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

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

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

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

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

Нет, 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 недоступен. Ямочный ремонт - лучшее решение.

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