Как мне перекомпилировать Bash, чтобы избежать Shellshock (удаленный эксплойт CVE-2014-6271 и CVE-2014-7169)?

368

Учитывая, что Bash 3.2 (версия, поставляемая OS X) уязвима для эксплойта удаленного выполнения, известного как «Шок оболочки» ( CVE-2014-6271 и CVE-2014-7169 ), как мне перестроить Bash и защитить свою систему перед официальный патч Apple?

ОБНОВЛЕНИЕ: Обратите внимание, что Apple выпустила официальный патч. Смотрите ниже для деталей.

AlBlue
источник
5
Apple , выпустила исправление: support.apple.com/kb/DL1769
AT
1
Упомянутое выше исправление OS X bash Update 1.0 относится к OS X 10.9.5 или более поздней версии. Вот все из них: OS X 10.7.5 (Lion), OS X 10.8.5 (Mountain Lion), OS X 10.9.5 ( Mavericks).
L'L'л
Да, ссылки были добавлены 9 часов назад, но они были удалены неправильно. apple.stackexchange.com/revisions/146849/10
AlBlue,
создал gist gist.github.com/dnozay/395dcdef05c6b4b1836a, в котором есть большинство шагов и уже включены патчи (и он должен работать на OSX 10.6).
dnozay
@dnozay Спасибо за Вашу суть! Пожалуйста, обновите его, чтобы включить патчи 55 и 56 (уже вышли) и 57 (скоро выйдет).
Old Pro

Ответы:

429

Статус

Apple выпустила исправления безопасности Bash для Shellshock и связанных с ними уязвимостей как « OS X bash Update 1.0 ». Они могут быть установлены через обычное обновление системы для людей, использующих OS X Mountain Lion v10.8.5 или OS X Mavericks v10.9.5 (они включены в Обновление безопасности 2014-005 ), а также могут быть установлены вручную. Официальные исправления Apple также доступны для OS X Lion v10.7.5 и OS X Lion Server v10.7.5, но доступны только при ручной загрузке. Исправления безопасности доступны по различным URL-адресам в зависимости от версии операционной системы:

(Если выпущены новые патчи, разместите их здесь, но, пожалуйста, сохраните их и для справки.)

Патч Apple заботится о Shellshock и некоторых других уязвимостях и подходит для большинства людей. TL; д-р люди могут перестать читать здесь.

ОДНАКО внимание, привлеченное к bash из-за ошибки Shellshock, заставило многих исследователей внимательно взглянуть на bash, и все больше и больше (трудно эксплуатируемых) уязвимостей продолжают обнаруживаться. Если вы очень обеспокоены безопасностью (потому что, возможно, вы используете OS X Server для размещения общедоступного веб-сайта), вы можете (попытаться) не отставать от уязвимостей и исправлений, поскольку они продолжают действовать, компилируя bash самостоятельно. В противном случае, не беспокойтесь об этом.

Ищите, что Apple выпустит еще одно обновление, которое выйдет в будущем, когда пыль осядет в поисках новых уязвимостей.


Доступен официальный набор патчей самого bash для bash 3.2, патчей 52, 53 и 54 (которые соответствуют патчам 25, 26 и 27 Bash 4.3), исправляющих как CVE-2014-6271, так и CVE-2014-7169, а также «Игра окончена», показанная ниже. Это было проверено мной ( @alblue ), и пост был обновлен соответствующим образом (и затем были сделаны дополнительные обновления: см. Редакцию 41 для поста, который останавливается на патче 54).

Сообщалось о множестве дополнительных уязвимостей в отношении bash. По словам Михала Залевский посту , если у вас есть участок 54 (и , предположительно , официальный патч от Apple) «нет никакого смысла увлеченно о статусе этих индивидуальных ошибок, потому что они больше не должны представлять угрозу безопасности:»

  • CVE-2014-6271 - оригинальная RCE, найденная Стефаном. Исправлено bash43-025 и соответствующими записями 24 сентября для других версий.

  • CVE-2014-7169 - ошибка создания файла / использования токена, найденная Тависом. Исправлено bash43-026 & co (26 сентября)

  • CVE-2014-7186 - вероятный сбой 10-ти с лишним риска здесь и сейчас, обнаруженный Флорианом и Тоддом. Исправлено bash43-028 & co (1 октября).

  • CVE-2014-7187 - Флориан обнаружил безаварийный, вероятно, без риска второй раз. Исправлено bash43-028 & co (1 октября).

  • CVE-2014-6277 - проблема неинициализированной памяти, почти наверняка RCE, обнаруженная Михалом Залевским. Никаких конкретных патчей пока нет.

  • CVE-2014-6278 - команда впрыска RCE, найденная Михалом Залевским. Никаких конкретных патчей пока нет.

Это становится довольно запутанным. К счастью, Chet Ramey, официальный разработчик bash, опубликовал CVE для исправления карт . Его пост ссылается на патчи для bash 4.3, я (@OldPro) перевел их на патчи для bash 3.2, что применимо к OS X. Кроме того, начиная с этого поста он выпустил патч 57, поэтому я добавил его ниже:

 bash32-052      CVE-2014-6271                           2014-09-24
 bash32-053      CVE-2014-7169                           2014-09-26
 bash32-054      exported function namespace change      2014-09-27 ("Game Over")
 bash32-055      CVE-2014-7186/CVE-2014-7187             2014-10-01
 bash32-056      CVE-2014-6277                           2014-10-02
 bash32-057      CVE-2014-6278                           2014-10-05

См Дэвид А. Уилера пост на временной шкале и более подробно.

@alblue опубликовал инструкции по сборке через патч 55. Я (@OldPro) добавил патчи 56 и 57 в инструкции, но не проверял их.

Тестирование на оригинальную уязвимость

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

$ env x='() { :;}; echo vulnerable' bash -c 'echo hello'
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
hello

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

Снимок экрана терминала bash, показывающий уязвимость в 10.8.5

Тестирование на новую Уязвимость

Было обновлено оригинальное сообщение, и Bash 3.2.52 (1) по-прежнему уязвим к вариации уязвимости, определенной в CVE-2014-7169.

$ rm -f echo
$ 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'
Thu 25 Sep 2014 08:50:18 BST

Приведенный выше вывод является примером уязвимой bashверсии. Если вы видите дату в выводе этой команды, вы bashуязвимы.

Отключение автоматически импортируемых функций для предотвращения «Game Over»

Исследователи отметили, не классифицируя это как уязвимость, что сценарий может захватить функцию в подоболочке с помощью автоматически импортируемых функций:

$ env ls="() { echo 'Game Over'; }" bash -c ls
Game over

Приведенный выше код в уязвимой системе будет отображаться Game Overвместо списка каталогов, от которого вы ожидаете ls. Очевидно, echo 'Game Over'может быть заменен любым вредоносным кодом, который вы хотите. Это стало известно как ошибка "Game Over".

До появления исправления 54 и NetBSD, и FreeBSD по умолчанию отключали автоматический импорт функций bash, частично для того, чтобы предотвратить «окончание игры», но в основном для того, чтобы содержать любые дальнейшие ошибки в синтаксическом анализаторе (такие как CVE-2014-7169 ), какими они были продолжает обнаруживаться, и добавлен новый флаг командной строки--import-functionsчтобы повторно включить старое поведение по умолчанию. Я (@alblue) подготовил патч (против 3.2.53), чтобы другие могли его использовать, если они тоже хотят принять это поведение, и включил его ниже. По умолчанию этот патч не включен в скрипт сборки ниже. Я (@OldPro) считаю, что этот патч больше не нужен или не является хорошей идеей, потому что он нарушает обратную совместимость, и уязвимости, от которых он защищает, очень хорошо устраняются патчем 54 и более ранними патчами, и включение этого неофициального патча предотвращает применение будущих патчей ,

(Примечание для редакторов вопросов; пожалуйста, не включайте это по умолчанию, так как это неофициальный патч.)

a0c5c4d66742fddd0a35001cb91798a5fbf8a2f5 import_functions.patch

Патч можно включить, запустив export ADD_IMPORT_FUNCTIONS_PATCH=YESперед запуском сборки. Обратите внимание, что включение этого исправления отключит исправление 54 и любые будущие исправления, потому что нельзя гарантировать совместимость будущих исправлений с неофициальным исправлением.

В Apple Patch есть уязвимость Game Over, своего рода

Как отметил @ake_____ в твиттере, официальный патч Apple по-прежнему уязвим для засорения среды исполняемыми файлами:

$ env '__BASH_FUNC<ls>()'="() { echo Game Over; }" bash -c ls
Game Over

Пользователи должны решить для себя, насколько это важно. Я (@OldPro) думаю, что беспокоиться не о чем, потому что нет никакого известного эксплойта для этого поведения (ему даже не был дан идентификатор CVE), потому что в общем случае непривилегированные удаленные злоумышленники не могут установить имя переменной среды, а злоумышленники с привилегиями не могут используйте это, чтобы получить привилегии, которых у них еще нет (по крайней мере, без использования дополнительной уязвимости).

Чтобы обеспечить небольшую предысторию, bash позволяет вам определять функции и, кроме того, позволяет экспортировать эти функции в подоболочки с помощью export -fкоманды. Раньше это реализовывалось путем создания переменной среды с тем же именем, что и у функции со значением, установленным для определения функции. Так

$ ls () { echo 'Game Over'; }
$ export -f ls
$ echo $ls
Game Over

Это произошло потому, что export -f lsсоздали переменную среды с именем ls. Уязвимость «Game Over» заключалась в том, что вы могли напрямую создавать эту переменную среды без необходимости сначала определять функцию, что означало, что если вы можете ввести правильное имя переменной, вы можете перехватить команду. Apple попыталась исправить это, затруднив создание переменной с правильным именем. Официальный патч 54 для bash фактически делает невозможным создание переменной с правильным именем, используя имена переменных, которые включают %символ, который не допускается в имени переменной, эффективно помещая определения экспортированных функций в другое, зарезервированное пространство имен.

Если ничего из вышеперечисленного не имеет для вас смысла, не беспокойтесь об этом. Вы в порядке с патчем Apple на данный момент.

Системные двоичные файлы

OS X 10.9.5 (последний стабильный выпуск на данный момент) поставляется с Bash v3.2.51:

$ bash --version
GNU bash, version 3.2.51(1)-release (x86_64-apple-darwin13)
Copyright (C) 2007 Free Software Foundation, Inc.

Вы можете получить и перекомпилировать Bash следующим образом , при условии, что у вас установлен Xcode (и вы xcodebuildхотя бы раз запускали его, чтобы принять лицензию):

$ # If you want to disable auto-imported functions, uncomment the following
$ # export ADD_IMPORT_FUNCTIONS_PATCH=YES
$ mkdir bash-fix
$ cd bash-fix
$ curl https://opensource.apple.com/tarballs/bash/bash-92.tar.gz | tar zxf -
$ cd bash-92/bash-3.2
$ curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-052 | patch -p0    
$ curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-053 | patch -p0  
$ # See note above about ADD_IMPORT_FUNCTIONS_PATCH
$ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] && curl http://alblue.bandlem.com/import_functions.patch | patch -p0
$ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] || curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-054 | patch -p0
$ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] || curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-055 | patch -p0
$ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] || curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-056 | patch -p0
$ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] || curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-057 | patch -p0
$ cd ..
$ # Note: DO NOT ADD SUDO TO XCODEBUILD HERE
$ xcodebuild
$ build/Release/bash --version # GNU bash, version 3.2.57-release
$ build/Release/sh --version   # GNU bash, version 3.2.57-release
$ sudo cp /bin/bash /bin/bash.old
$ sudo cp /bin/sh /bin/sh.old
$ sudo cp build/Release/bash /bin
$ sudo cp build/Release/sh /bin

(Примечание: вы можете запустить это, скопировав и вставив вышеуказанный блок кода, зайдя в Терминал и затем запустив его pbpaste | cut -c 2- | sh. Всегда будьте осторожны при запуске случайных сценариев из Интернета, хотя ...)

После этого версия Bash должна быть v3.2.57:

$ bash --version
GNU bash, version 3.2.57-release (x86_64-apple-darwin13)
Copyright (C) 2007 Free Software Foundation, Inc.

В целях безопасности и после тестирования я рекомендую вам chmod -xстарые версии, чтобы они не использовались повторно, или перенести их на резервный сайт.

$ sudo chmod a-x /bin/bash.old /bin/sh.old

Другие ответы имеют решения для тех, кто использует MacPorts или Homebrew; они не решают проблему, они просто устанавливают дополнительные версии Bash. Пожалуйста, смотрите эти ответы, если вы хотите обновить их специально.

Спасибо

Спасибо Чету, который присматривает за bash и делает эти патчи доступными. Спасибо всем, кто прокомментировал это и улучшил его с течением времени.

Теперь Apple выпустила реальное исправление, хотя это все еще может быть полезно. Поскольку они выпустили исправление только для Lion и выше, а официальный патч предоставляет GNU bash, версия 3.2.53 (1) -release (x86_64-apple-darwin13), тем не менее, ошибка Game over все еще несколько уязвима. На этом этапе перестройка вашей собственной версии Bash для 3.2.57, вероятно, более безопасна, чем использование патча Apple, если вы не ошиблись.

AlBlue
источник
18

MacPorts

В результате вы получите версию bash 4.3.28 (1), в которой исправлены обе уязвимости (CVE-2014-6271 и CVE-2014-7169), а также некоторые обнаруженные впоследствии. Это полезно, если вы изменили оболочки для использования Macports bash для получения функций версии 4.

Это не решит проблему стандартных скриптов ОС как первой #!/bin/shили #!/bin/bashпервой строки. Проблема такого рода заключается в том, что Macports старается не использовать предоставленные Apple версии программ, поскольку Macports обычно обновляется быстрее, например, имеет более новую версию bash)

Вы можете сделать так, чтобы терминал использовал это как в Homebrew answer

Чтобы установить macports, выполните следующие инструкции :
1. Установите XCode и инструменты командной строки
XCode. 2. Согласитесь с лицензией XCode в терминале: sudo xcodebuild -license.
3. Загрузите MacPorts pkg для вашей версии OS X: ссылки приведены на странице
4. Запустить пкг

Когда у вас установлен macports, вам нужно установить последние версии, это можно сделать, запустив

sudo port selfupdate

и перекомпилируйте или получите последние двоичные файлы

sudo port upgrade outdated
отметка
источник
5
Поскольку речь идет об устранении уязвимости безопасности в существующих двоичных файлах, а не о замене / исправлении уязвимых двоичных файлов, я не вижу, как это решает проблему.
AlBlue
Это испортило версию macports - и было действительно в запросе на комментарий IanC
Mark
Да. Мы должны перечислить исправления для всех мест, которые bashобычно появляются в OS X - так что исправления системы, Homebrew и MacPorts исправлены. Возможно Fink, а также. Я лично предпочел бы, чтобы это было сделано в качестве редактирования ответа @ AlBlue. Так что это все один, самый правильный ответ.
Ян С.
2
@InaC они должны быть разделены, так как ответы различаются, и один большой не может быть проверен - например, смотрите, я говорю, что это не исправляет bash от Apple, а ответ home-brew копирует Homebrew bash поверх OSX. По сути, это отдельные вопросы
Марк
Смотрите мои изменения в ответе @ AlBlue. Я не согласен, они должны быть отдельными.
Ян С.
17

ПРИМЕЧАНИЕ относительно официального обновления 1.0 для Apple OS X bash. Это обновление программного обеспечения приводит только к официальной версии Apple bash до версии 3.2.53. Версия исправления 3.2.54 предлагает следующее изменение:

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

Для пользователей, которые уже установили исправления в системе с помощью двоичных файлов 3.2.54, вы можете либо заменить скомпилированные двоичные файлы исправлением Apple, либо оставить все как есть, но это не рекомендуется. Хотя Apple и оставила бинарную версию 3.2.53, патч Apple содержит исправление для следующего теста эксплойта:

env X='() { (a)=>\' sh -c "echo date"; cat echo

Это означает, что официальный двоичный файл Apple 3.2.53 содержит эквивалентную безопасность для двоичного файла GNU 3.2.54 vanilla. К сожалению, путаница, но это то, что есть. Исправление Apple не наполовину испечено. Похоже, это полное решение проблемы. Таким образом, приведенная ниже дорожная карта для компиляции ванили bashи shиз источника GNU должна рассматриваться как исторический артефакт и, возможно, будет использоваться в качестве шаблона для того, как делать исправления в будущем, если они будут необходимы.

ПРИМЕЧАНИЕ. В исходном GNU-источнике shвозникают проблемы с повышением привилегий, которые приводят к сбоям в различных установщиках, например в Adobe Flash. Я настоятельно рекомендую придерживаться исправленных двоичных файлов Apple. Считайте эту схему исправления устаревшей и опрометчивой.

Существует новый патч GNU bash 3.2.55, который описывает следующее исправление:

Ошибка-Описание:

В parse.y есть два переполнения локального буфера, которые могут привести к тому, что оболочка выгрузит ядро ​​при наличии большого количества документов, прикрепленных к одной команде, или нескольких вложенных циклов.

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


Это сообщение подробно описано , как собрать и установить ваниль bashи shна OS X. Я выбрал этот путь следующим образом примеров с подробными использованием Apple, конкретный источника не оставил меня с правильным пересмотром патча. YMMV. Эта ванильная установка, однако, нацелена на замену двоичных файлов OS X таким образом, что, когда Apple наконец выпустит обновление для системы безопасности, эти ванильные замены будут узурпированы их соответствующими коллегами Apple.

Моя базовая конфигурация:

OS X Lion 10.7.5 и Xcode 4.6.3 со всеми установленными утилитами командной строки.

Мои шаги, чтобы исправить это были:

Загрузите базовый исходный код bash для 3.2.48 с:

https://ftp.gnu.org/gnu/bash/bash-3.2.48.tar.gz

Загрузите исправления bash3.2.49, .50, .51, .52, .53, .54 и .55 из:

https://ftp.gnu.org/gnu/bash/bash-3.2-patches/

Я сохранил их как $ filename.patch, например, bash3.2.50.patch.

Компакт-диск в каталог загрузки и ...

Распакуйте основную ветку с исходным кодом:

tar xzvf bash-3.2.48.tar.gz

cd bash-3.2.48

Предполагая, что вы переименовали загруженные файлы исправлений, как описано ранее,

cp ../*.patch .

Затем …

for file in *.patch ; do
  patch -p0 < $file
done

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

Следующий:

sudo cp /bin/bash /bin/bash_old
sudo cp /bin/sh /bin/sh_old
sudo chmod -x /bin/bash_old
sudo chmod -x /bin/sh_old

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

Следующий:

./configure --prefix=/ ; make ; sudo make install

Это должно правильно настроить, скомпилировать и установить новый двоичный файл bash в / bin. После этого выйдите из Терминала и снова откройте.

Вы должны, все вещи счастливые и улыбающиеся, быть в состоянии bash --versionи теперь увидеть 3.2.55, например:

Gaia:Downloads trane$ bash --version
GNU bash, version 3.2.55(1)-release (i386-apple-darwin11.4.2)
Copyright (C) 2007 Free Software Foundation, Inc.

Точный вывод в приведенной выше команде будет отличаться в зависимости от вашей версии OS X.

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

ПРИМЕЧАНИЕ. Пока мы исправили только bash, но /bin/shисполняемый файл все еще находится в уязвимом состоянии. Простое копирование на bashвершине shэто стиль Linux делать вещи. Однако shреализация OS X имеет некоторые отличия bash, поэтому вы захотите снова вытащить компилятор. Дополнительную информацию о том, как bashи чем shотличаются OS X, можно найти здесь:

https://apple.stackexchange.com/a/89327/91441

В вашем каталоге загрузки сделайте:

make clean

В вашем любимом редакторе, откройте файл Makefile.inи перейдите к строке 99. Мы собираемся изменить строку программы , так что двоичный выход мы это shвместо того , чтобы bashвыглядеть примерно так:

Program = sh$(EXEEXT)

Сохраните это и затем

./configure --prefix=/ --enable-xpg-echo-default --enable-strict-posix-default
make ; sudo make install

Теперь вы построите shпочти так же, как Apple.

И последнее замечание: в некоторых (всех?) Системах Apple обычно помещает bashbugисполняемый файл в /usr/bin. Наша компиляция поместит это в /bin. Итак, последние шаги здесь:

sudo mv /usr/bin/bashbug /usr/bin/bashbug_old
sudo chmod -x /usr/bin/bashbug_old
sudo mv /bin/bashbug /usr/bin/bashbug
Trane Francks
источник
1
Не скулить или что-то еще, но когда вопрос «как мне перекомпилировать bash» и мой ответ «нажмите на следующую ссылку, чтобы ответить на этот вопрос, кажется, что общие требования
остаются в силе
2
Понял: библиотека readline, включенная в bash, не совместима с 10.6. Вместо этого установите GNU readline, а затем взломайте make-файл bash, чтобы использовать его. Установите readline: ftp.cwru.edu/pub/bash/readline-6.3.tar.gz В bash, после настройки, в Makefile установите READLINE_LIB = /usr/local/lib/libreadline.aи выполните чистую компиляцию. Затем разденьте и скопируйте новый двоичный файл bash поверх /bin/bashи/bin/sh
Seth Noble
2
Приложение: в bash Makefile также необходимо установить HISTORY_LIB = /usr/local/lib/libhistory.a. В противном случае bash будет динамически связан с / usr / локальной версией libhistory.
Сет Нобл
1
Обратите внимание, что версия, загружаемая со страницы Apple с открытым исходным кодом, содержит пользовательские изменения, чтобы она работала в OSX. Я бы не советовал использовать ванильный bash, так как в противном случае вы не заменяете аналогичные.
AlBlue
1
Apple вносит множество изменений для оптимизации утилит с открытым исходным кодом в системе. Тем не менее, я не вижу, где ваниль bashкак-то не сможет себя вести, просто потому что ядро ​​другое. В любом случае я считаю свое решение временным; в конечном итоге Apple исправит проблему, и мои скомпилированные двоичные файлы будут заменены ( /binв первую очередь это моя главная причина для компиляции .
Trane Francks
15

Для тех, кто борется с компиляцией из исходного кода, по состоянию на 29 сентября Apple официально выпустила исправления для Mac OS X 10.9.5, 10.8.5, а также 10.7.5:

JakeGould
источник
1
Спасибо! Это может быть проще, чем перекомпиляция для многих / большинства.
AlBlue
@AlBlue Согласен. Кроме того, хотя это не совсем чистое исправление - как некоторые отмечали - это гораздо лучше, чем ничего. И гораздо безопаснее, чем какой-то начинающий компилировать исходный код в панике.
JakeGould
2
Как обычно, задержка распространения обновления программного обеспечения действует в полном объеме. Интересно, сколько времени потребуется, чтобы увидеть пакеты? Приятно видеть, что Apple довольно быстро отреагировала на эту проблему!
Trane Francks
2
@TraneFrancks «Как обычно, задержка распространения обновления программного обеспечения работает в полном объеме». Я действительно не понимаю, как организация, которая распространяет полный альбом U2 для всех пользователей iOS, может каким-то образом подавить обновление безопасности менее 4 МБ.
JakeGould
@JakeGould: Хех. Да, это смешок. Я только что проверил Обновление программного обеспечения в этой системе Lion, и он утверждает, что система обновлена. То же самое с другой системой Mountain Lion здесь.
Trane Francks
5

Во-первых, исправление bash и sh для этой уязвимости может повредить некоторые скрипты на вашем Mac. Вам действительно не нужно делать это, если вы не предлагаете веб-сервисы общедоступному Интернету прямо с вашего Mac. Поэтому, если это действительно не нужно, дождитесь официального обновления безопасности от Apple.

Будучи предупрежденным, вот несколько инструкций о том, как сделать это обновление, используя Brew на Mavericks 10.9.

Сначала убедитесь, что вы используете устаревший bash:

$ which bash
/bin/bash
$ /bin/bash --version
GNU bash, version 3.2.51(1)-release (x86_64-apple-darwin13)
Copyright (C) 2007 Free Software Foundation, Inc.

Самый актуальный bash - 4.3.25

Если у вас не установлен Xcode, вам понадобятся инструменты командной строки Xcode, которые могут быть установлены

$ xcode-select --install

Или с портала разработчиков .

Чтобы установить Brew ( http://brew.sh ):

$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Затем сделайте:

$ brew doctor

Следуйте инструкциям, если есть проблемы. Многие общие проблемы решаются здесь .

Затем обновите brew до последнего списка пакетов:

$ brew update

Чтобы получить последнюю версию bash 4.3.25:

$ brew install bash

Это устанавливает Bash в /usr/local/Cellar/bash/4.3.25/bin/bash

Старый bashи shвсе еще существует в /bin, поэтому после установки вы переименуете старые исполняемые файлы в новый файл.

$ sudo mv /bin/bash /bin/bash_old
$ sudo mv /bin/sh /bin/sh_old

Если вы очень параноик, вы можете удалить разрешения на выполнение bash_old

$ sudo chmod a-x /bin/bash_old /bin/sh_old

Затем создайте символическую ссылку на новый bash 4.3.25, который установлен brew.

$ sudo ln -s /usr/local/Cellar/bash/4.3.25/bin/bash /bin/bash
$ sudo ln -s /usr/local/Cellar/bash/4.3.25/bin/bash /bin/sh

Перезагрузите компьютер, и он завершен.

Предупреждение - это может нарушить некоторые существующие сценарии оболочки, которые могут опираться на bash 3.2 или отличия, которые есть у Mac shнад linux sh. Существует гораздо более изощренный ответ на замену bash и sh из исходников, из ответа @TraneFranks в этой же теме.

Кристофер Аллен
источник
4
Обновление с 3.2.51 до 3.2.52 принесет гораздо меньше урона, чем обновление до 4.3.
AlBlue
Я предупреждаю, что это может сломать некоторые сценарии, но 4.3.25 - это то, что Brew устанавливает как текущую - я пытаюсь предложить версию, которую легко установить, делая это с нуля. И вы всегда можете восстановить, переименовав старые исполняемые файлы обратно.
Кристофер Аллен
2
Эта ошибка может быть использована вредоносным DHCP-сервером (например, точкой доступа WiFi) и может привести к полной потере компьютера, поэтому стоит исправить как можно скорее. Другие ответы содержат лучшую инструкцию по замене, /bin/bashи /bin/shэто, вероятно, вызовет меньше проблем, чем обновление до последней версии Brew.
Старый Про
Mac может не быть уязвимым для атаки DHCP.
Кристофер Аллен
10
Атака DCHP-сервера возможна только в том случае, если ваш DHCP-клиент использует сценарии Bash, чего нет в реализации OSX.
AlBlue
5

OS X 10.6.8 - Снежный барс

Пост @AlBlue очень завершен. Однако на моем сервере OS X 10.6.8 его исправление не будет работать. У Apple нет исправлений для 10.6.8, а действия, описанные @AlBlue, не работают с Xcode 3.2.6 (последней версией для Snow Leopard). Я получаю ошибку:

** BUILD FAILED **

The following build commands failed:
sh:
    CodeSign /Users/bas/bash-fix/bash-92/build/Release/sh
bash:
    CodeSign /Users/bas/bash-fix/bash-92/build/Release/bash
(2 failures)

По этой причине я использую brew.sh . Пожалуйста, прокомментируйте свои мысли, когда у вас есть лучшее решение для OS X 10.6.8 Snow Leopard. Смотрите также комментарий @Jerome, у него был успешный патч на OS X 10.6.8 Snow Leopard с использованием решения @ AlBlue. Так или иначе:

Сначала установите напиток со следующим вкладышем:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Обновить brew

brew update

Теперь просто установите последнюю версию bashи замените текущую:

brew install bash
sudo sh -c 'echo "/usr/local/bin/bash" >> /etc/shells'
chsh -s /usr/local/bin/bash
sudo mv /bin/bash /bin/bash-backup
sudo ln -s /usr/local/bin/bash /bin/bash

Вы можете установить оболочку входа по умолчанию ' Command (complete path)' для Terminal.app в его настройках ( Command,) введите описание изображения здесь


примечание: в комментариях некоторые пользователи не считают этот метод подходящим. Но для меня это единственный приемлемый метод обновления BASH на OS X 10.6.8 Snow Leopard.

CousinCocaine
источник
1
также некоторые скрипты основаны на bash 3 и не работают с bash 4 (macports исправил bash 4.3.25, который, как я полагаю, обновил home-brew
Mark
2
Вы тоже не обновляетесь sh- вам тоже нужно это делать. /bin/sh! = /bin/bash. Многие инструменты выкладываются, /bin/shкогда вы запускаете системные команды. system()Например, вызов Ruby используется, /bin/shкогда у вас есть символ расширения оболочки, который необходимо раскрыть в строке. Вы играете в проигрышную игру, используя Homebrew, чтобы обновить системные бинарные файлы IMO. Вы должны обновить Homebrew bash в дополнение к правильному обновлению двоичных файлов системы.
Ян С.
1
Имейте в виду, что OSX 10.8 и 10.9 используют Bash 3.2, поэтому для прямой согласованности я выбрал 3.2 в качестве версии. Это также основывалось на официальной сборке Apple для предыдущей версии, которая может включать такие дополнения, как расширенная осведомленность об атрибутах и ​​т. Д.
AlBlue
1
Я сам использую 3.2.6 во всех случаях. Я так понимаю сборка не получается при запуске xcodebuild? Если так, то я этого не испытывал. У меня есть несколько веских советов, которые стоит уточнить: проверьте, есть ли у вас несколько сборок bash, рассмотрите возможность очистки (brew uninstall) и, возможно, переустановите xcode ... затем запустите процесс обновления заново.
Джером
1
У меня были серьезные проблемы с управлением работой со встроенной версией bash-4.3 на Snow Leopard (если я запустил emacs, а затем приостановил его, я не могу возобновить его с помощью 'fg'). С тех пор я скачал исходный код Snow Leopard для bash с opensource.apple.com/release/mac-os-x-1068 , применил исправления из ftp.gnu.org/gnu/bash/bash-3.2-patches и перестроил в намного лучший эффект.
Мормегил
-6

Вы можете следовать инструкциям здесь: https://github.com/tjluoma/bash-fix. В терминале выполните следующие действия:

curl -s https://raw.githubusercontent.com/tjluoma/bash-fix/master/bash-fix.sh | zsh -f
Сара Весселс
источник
5
Выполнение случайных сценариев оболочки из случайных учетных записей github - это не то, как вы попадаете в более безопасную ситуацию на любом компьютере. Вы хотите доверять конечной точке.
Ян С.
Я должен согласиться с Яном здесь. С помощью ненадежных сценариев оболочки очень легко нанести существенный ущерб, например, проблемы, описанные в этих CVE.
Trane Francks
Сильно не согласен с этим распространением FUD. ПРОЧИТАЙТЕ все скрипты оболочки перед их выполнением и только из https: //.
dhchdhd