Статус
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:
Тестування на нову вразливість
Перше повідомлення було оновлено, і 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, якщо ви не зробите це неправильно.