Як мені перекомпілювати Bash, щоб уникнути Shellshock (віддалений експлуататор CVE-2014-6271 та CVE-2014-7169)?


368

Зважаючи на те, що Bash 3.2 (версія, що постачається OS X) є вразливим до експлуатації віддаленого виконання, відомої як "Шел-шок" ( CVE-2014-6271 та CVE-2014-7169 ), як я відновити Bash і захистити свою систему до початку офіційний патч Apple?

ОНОВЛЕННЯ: Зауважте, що Apple випустила офіційний патч. Детальніше дивіться нижче .


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 ( Маверики).
l'L'l

Так, посилання були додані 9 годин тому, але вони були видалені неправильно. apple.stackexchange.com/reitions/146849/10
AlBlue

створив gist.github.com/dnozay/395dcdef05c6b4b1836a, який має більшість кроків і вже містить патчі (і повинен працювати на OSX 10.6).
dnozay

@dnozay Дякую за суть! Оновіть його, щоб включити патчі 55 і 56 (вже вийшли) і 57 (незабаром вийде).
Старий Про

Відповіді:


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; д-р люди можуть перестати читати тут.

ВІДКЛЮЧНО, увага, яку привертає башти клопа Shellshock, змусило багатьох дослідників уважно поглянути на баш, і все більше (важко використовувати) вразливості продовжують знаходитись. Якщо ви сильно занепокоєні безпекою (тому що, можливо, ви використовуєте OS X Server для розміщення загальнодоступного веб-сайту), можливо, ви захочете (спробувати) не відставати від вразливих місць і виправлень, оскільки вони продовжують виконувати, збираючи bash самостійно. Інакше не хвилюйся.

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


Офіційний набір самих виправлень bash для bash 3.2, патчів 52, 53 та 54 (які відповідають патчам Bash 4.3, патчі 25, 26 та 27), які фіксують як CVE-2014-6271, так і CVE-2014-7169, а також "Гра закінчена", що відображається нижче. Це було перевірено мною ( @alblue ) і повідомлення було оновлено відповідно (а потім були зроблені додаткові оновлення: див. Версію 41 для публікації, яка зупиняється на патчі 54).

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

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

  • CVE-2014-7169 - помилка створення / маркування споживання файлів, знайдена Tavis. Виправлено 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, знайдена Міхалом Залевським. Жодного конкретного виправлення ще немає.

Це стає досить заплутаним. На щастя, Чет Рамі, офіційний супровід баш, розмістив 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:

Скріншот баш-терміналу, що демонструє вразливість у 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-функцій за замовчуванням, частково для запобігання "Game Over", але в основному, щоб містити будь-які інші помилки в аналізаторі (наприклад, 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_____ на Twitter, офіційний патч 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. Будь ласка, подивіться відповіді, якщо ви хочете спеціально оновити їх.

Дякую

Завдяки Чету, який доглядає за баш, і робить ці патчі доступними. Дякуємо всім, хто прокоментував це та покращив його з часом.

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


18

Макпорти

Ви отримуєте bash версію 4.3.28 (1), яка виправляла як вразливості (CVE-2014-6271 та CVE-2014-7169), так і деякі згодом виявлені. Це корисно, якщо ви змінили оболонки, щоб використовувати basports Macports, щоб отримати функції версії 4.

Це не вирішить проблему стандартних сценаріїв ОС , як є #!/bin/shабо в #!/bin/bashякості першої лінії. Ця проблема полягає в тому, що Macports намагається не використовувати надані Apple версії програм, оскільки Macports, як правило, оновлюється швидше, наприклад, у нього є нова версія bash)

Ви можете скористатися цим терміналом, як у відповіді Homebrew

Щоб встановити макпорти, виконайте наступні інструкції, які є:
1. Встановіть Xcode та інструменти командного рядка Xcode
2. Погодьтесь на ліцензію Xcode у терміналі: sudo xcodebuild -license
3. Завантажте MacPorts pkg для вашої версії OS X: посилання знаходяться на сторінці
4. Виконати кг

Коли у вас встановлені макпорти, вам потрібні останні версії, це робиться запуском

sudo port selfupdate

і перекомпілювати або отримати найновіші файли файлів

sudo port upgrade outdated

5
Оскільки мова йде про виправлення вразливості безпеки в існуючих бінарних файлах, а це не замінює / виправляє вразливі бінарні файли, я не бачу, як це вирішує проблему.
AlBlue

Це лишить версію макспортів - і справді запитував коментар IanC
Марк

Так. Ми повинні перелічити виправлення для всіх місць, які bashзазвичай надходять на OS X - так виправлення системи, Homebrew та MacPorts. Можливо, також Фінк. Я особисто вважаю за краще, якби це було внесено як редагування відповіді на @ AlBlue. Так що це все одна, найправильніша, відповідь.
Ян C.

2
@InaC вони повинні бути окремими, оскільки відповіді відрізняються, і одна велика не може бути перевірена - наприклад, дивіться, я кажу, що це не виправляє башти Apple, а відповідь домашньої варі копіює Homebrew bash через OSX. Насправді це окремі питання
Марк

Дивіться мою редагування до відповіді @ AlBlue. Я не згоден, це має бути окремим.
Ян C.

17

ПРИМІТКА щодо офіційної версії Apple OS X bash Update 1.0: Це оновлення програмного забезпечення приносить лише офіційну версію Apple bash до 3.2.53. Версія 3.2.54 виправлення пропонує наступні зміни:

Цей патч змінює використання коду bash для експортованих функцій, щоб уникнути сутичок зі змінними оболонки та уникати залежно лише від вмісту змінної середовища, щоб визначити, чи слід інтерпретувати його як функцію оболонки.

Користувачам, які вже зафіксували систему 3.2.54 бінарними файлами, ви можете замінити складені бінарні файли на патч Apple, або ви можете залишити речі такими, якими вони є, але це недоцільно. Хоча Apple залишила свою бінарну версію в 3.2.53, патч Apple DOES містить виправлення для наступного тесту експлуатації:

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

Це означає, що офіційний бінарний файл 3.2.53 Apple містить безпеку, аналогічну двійковій програмі GNU 3.2.54 ванілі. Невдалий пункт плутанини, але це те, що воно є. Виправлення 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.

CD у каталог завантажень і…

Розпакуйте основну гілку джерела:

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

Це, в основному, створило резервну копію ваших старих, вразливих панцирів і панцирів і видалило їхні привілейовані файли. Це дає вам можливість відновити команди в міру необхідності, але при цьому видаляє їх здатність завдавати шкоди тим часом.

Далі:

./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.

Точний вихід у команді вище буде залежати від вашої версії ОС X.

Ви також повинні мати можливість перевірити свою вразливість 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

1
Не скигнути чи що-небудь, але коли питання "як мені перекомпілювати баш", і моя відповідь - "натисніть на наступне посилання на відповідь на це питання, схоже, що підсумкові вимоги стоять"
Trane Francks,

2
Зрозумів: бібліотека читальних ліній, що входить до bash, не сумісна з 10.6. Замість цього встановіть лінію читання GNU, а потім зламіть bash makefile, щоб використовувати його. Встановіть readline: ftp.cwru.edu/pub/bash/readline-6.3.tar.gz У bash, після налаштування, в Makefile, встановіть READLINE_LIB = /usr/local/lib/libreadline.aі зробіть чисту компіляцію. Потім зніміть і скопіюйте новий бінарний баш на вершині /bin/bashта/bin/sh
Seth Noble

2
Додаток: У bash Makefile теж потрібно встановити HISTORY_LIB = /usr/local/lib/libhistory.a. Інакше bash буде динамічно пов'язаний з / usr / local версією бібліотеки.
Сет Благородний

1
Зауважте, що версія, яку можна завантажити з сторінки відкритого джерела Apple, має власні зміни, щоб вона працювала на OSX. Я б не рекомендував використовувати ванільний верхній потік bash, оскільки в іншому випадку ви не замінюєте собі подібне.
AlBlue

1
Apple вносить багато змін, щоб оптимізувати утиліти з відкритим кодом у системі. Це означає, що я не бачу, де ваніль bashякось не поводитиметься саме тому, що ядро ​​інше. У будь-якому випадку, я вважаю своє рішення тимчасовим; врешті-решт, Apple /bin
вирішить виправити

15

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


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 on 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.

Найсучасніший баш - 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 update

Щоб отримати останній баш 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, який вариться.

$ 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 або відмінності, які shмає Mac в порівнянні з 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. У будь-якому випадку:

Спочатку встановіть пиво з наступним oneliner:

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.


1
також деякі сценарії покладаються на bash 3 і не працюють з bash 4 (macports зафіксував bash 4.3.25, на який я припускаю, що домашнє пиво оновилося
Марк

2
Ви також не оновлюєтесь sh- вам теж потрібно це зробити. /bin/sh! = /bin/bash. /bin/shПри запуску системних команд багато інструментів розкриваються . system()Наприклад, виклик Рубі використовує, /bin/shколи у вас є символ розширення оболонки, який потрібно розширити в рядку. Ви граєте в програшну гру за допомогою Homebrew для оновлення системних бінарних файлів IMO. Вам слід оновити програму Homebrew, bash окрім правильного оновлення системних бінарних файлів.
Ян C.

1
Майте на увазі, що в OSX 10.8 і 10.9 використовується Bash 3.2, тому для прямої послідовності я пішов з 3.2 як версія. Це також грунтується на офіційній версії Apple для попередньої версії, яка може включати в себе такі додатки, як розширена обізнаність про атрибути тощо.
AlBlue

1
Я сам запускаю 3.2.6 у всіх випадках. Я розумію, збірка не працює під час запуску xcodebuild? Якщо так, я цього не відчував. У мене є кілька вагомих пропозицій, щоб відмовитися від вас: перевірте, чи є у вас кілька баш-версій, подумайте про очищення (видалення заварки) і, можливо, перевстановіть 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 і перевстановився в набагато кращий ефект.
mormegil

-6

Ви можете слідувати вказівкам тут: https://github.com/tjluoma/bash-fix. В основному, виконайте такі дії в Терміналі:

curl -s https://raw.githubusercontent.com/tjluoma/bash-fix/master/bash-fix.sh | zsh -f

5
Виконання випадкових скриптів оболонки з випадкових облікових записів github - це не те, як ви можете отримати більш безпечну ситуацію на будь-якій машині. Ви хочете довірити кінцеву точку.
Ян C.

Я повинен погодитися з Іаном тут. Справді легко запровадити драматичні пошкодження через ненадійні сценарії оболонки, наприклад, проблеми, які описані цими CVE.
Trane Francks

Категорично не погоджуюся з цим поширенням FUD. ЧИТАЙТЕ всі сценарії оболонки перед їх виконанням, і тільки з https: //.
dhchdhd
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.