Вопрос Что такое уязвимость уязвимости CVE-2014-6271 (Shellshock) и как ее исправить?


Недавно появились новости о «CVE-2014-6271» (см. USN-2362-1), что является уязвимостью в Bash. Как я узнаю, насколько меня это затронуло, как я могу это исправить, и почему меня это волнует?

Это разработано как канонический ответ на эту уязвимость из-за ее масштаба и серьезности.


140
2017-09-24 21:48


происхождения


«Как я могу это исправить?» -> просто запустите диспетчер обновлений! Действительно, Ubuntu выпускает обновления для системы безопасности, есть специальная команда безопасности. Пожалуйста, не публикуйте ответы на вопрос о строительстве Bash из источника!; в будущем вам будет неудобно сложнее и сложнее поддерживать вашу систему. - gertvdijk
Кроме того, также дополнительный CVE для неполного исправления. CVE-2014-7169 - gertvdijk
пожалуйста делать ответы на вопросы о строительстве из источника. Должны ли они или нет, у некоторых людей есть древние серверы Ubuntu, и их исходный вариант может быть единственным вариантом. - GaryO
oops, извините, я просто понял, что я поставил bash вместо тире в тесте. Неважно, все в порядке. - Matt H
Читать: oss-sec: Re: CVE-2014-6271: удаленный запуск кода через bash, Ошибка Bash до сих пор не исправлена - blade19899


ответы:


Что такое Баш?

Bash - интерактивная оболочка по умолчанию в Ubuntu. Когда вы взаимодействуете с терминалом (через эмулятор терминала, через tty или ssh), вы обычно печатаете команды, которые bash будет читать и выполнять. Даже если вы вообще не используете терминал, у вас все еще есть Bash.

На Ubuntu, /bin/sh не bash (это тире). Эта уязвимость затронута только bash.

Как на меня влияет эксплойт?

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

Злоумышленник может установить эту переменную среды несколькими способами:

  • Удаленное подключение к службе, например SSH, с конкретной настройкой, такой как git over ssh. Как предупреждает Митра, использование sshd ForceCommand option - это вектор атаки. Учетные записи, чья оболочка не является bash, не затрагиваются.
  • Обманывать вас в настройке переменной окружения.
  • Вызов другой программы для установки переменной окружения, чтобы иметь это созданное значение. Например, у вас может быть веб-сервер и скрипт, которым необходимо установить переменную среды с определенным пользовательским контентом. Даже если этот скрипт создает свой собственный и не затрагивает другие переменные среды, этого достаточно. Для успешной эксплойты достаточно одной переменной среды с любым именем и созданным значением,
  • Другие способы, о которых я здесь не упоминал.

Как только они задают эту переменную, в следующий раз bash открывается для Любые причина, код вашего злоумышленника будет запущен. Это особенно страшно sudo -s, поскольку он порождает bash как суперпользователя (административное правило пользователя, которое имеет полный контроль над данными и программами вашего компьютера). Даже если вы только запускаете bash в качестве стандартного пользователя, файлы этого пользователя могут быть удалены.

Важно отметить, что даже если вы не используете bash самостоятельно, многие программы будут порождать bash сами по себе как часть их работы. Даже в этом случае вы уязвимы. Однако, Ubuntu's /bin/sh не bash, поэтому затрагиваются только программы, явно вызывающие bash, а не оболочку сценариев по умолчанию.

По словам Митра:

векторы, включающие функцию ForceCommand в OpenSSH sshd, модули mod_cgi и mod_cgid в HTTP-сервере Apache, скрипты, выполняемые неуказанными DHCP-клиентами, и другие ситуации, в которых настройка среды происходит через границу привилегий из исполнения Bash.

Я уязвим?

Используйте dpkg для проверки установленной версии пакета:

dpkg -s bash | grep Version

Это будет поиск информации о вашем bash пакет и фильтровать выход, чтобы показывать только версию. Исправленные версии 4.3-7ubuntu1.4, 4.2-2ubuntu2.5, а также 4.1-2ubuntu3.4,

Например, я вижу:

wlan1-loopback% dpkg -s bash | grep Version
Version: 4.3-7ubuntu1.4

и может определить, что я не уязвим.

Как мне обновить?

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

Бюллетень USN заявляет, что выпущены новые версии для Ubuntu 14.04 Trusty Tahr, 12.04 Precise Pangolin и 10.04 Lucid Lynx. Если вы не находитесь в одной из этих версий LTS, но находитесь в разумно недавней версии, вы, скорее всего, сможете найти исправленный пакет.

Во-первых, проверьте,

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

sudo apt-get update && sudo apt-get install bash

Первая команда гарантирует, что у вас есть новейший список пакетов, который включает фиксированную версию, а вторая команда устанавливает самую новую (исправленную) версию bash.

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


127
2017-09-24 21:48



Сожалею, вы уязвимы, Исходный патч не устраняет всю проблему. Видеть cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-7169 AFAIAA, в настоящее время нет общедоступное исправление. См. people.canonical.com/~ubuntu-security/cve/pkg/bash.html - Mormegil
@hexafraction Где вы читаете, что 12.10 получает обновление для этого? Я так не думаю, 12.10, 13.04, 13.10 очень много конца жизни! Кроме того, репозитории хранилища не используется для обновлений безопасности, - gertvdijk
@hexafraction Нет, они этого не делают! В этом весь смысл быть End-of-Life: больше никакой поддержки. - gertvdijk
@ MichaelHärtl Если вы на Ubuntu 12.10, вы можете скачать версию bash 12.04 из packages.ubuntu.com/precise/bash и установите его вручную. - David
Исправление для CVE-2014-7169 доступно в менеджере обновлений (для меня). - Calmarius


Украли это cft в Hacker News, Если у вас возникли проблемы с вашими репозициями, такими как я (Odroid-XU), тогда это должно работать хорошо, если вы хотите патч / построить из источника.

TMPDIR=/tmp/bash-src
mkdir $TMPDIR
cd $TMPDIR
#download bash
wget http://ftp.gnu.org/gnu/bash/bash-4.3.tar.gz
#download all patches
for i in $(seq -f "%03g" 1 999); do 
  wget http://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-$i
  if [[ $? -ne "0" ]]; then
    MAX=$(expr $i - 1)
    break;
  fi
done
tar zxf bash-4.3.tar.gz 
cd bash-4.3
#apply all patches
for i in $(seq -f "%03g" 1 $MAX);do
  echo apply patch bash43-$i
  patch -p0 < ../bash43-$i
done
#build and install
./configure && make
sudo make install
cd ../..
rm -r $TMPDIR

Затем выполните:

env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

И если вы получите:

bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
this is a test

Тогда все хорошо!


ПРЕДУПРЕЖДЕНИЕ: make install установит bash в /usr/local/bin, так /bin/bash не изменяется и может быть вызван из завитка !!


27
2017-09-25 02:30



Вот как построить bash 3.2 с патчем на debian lenny: gist.github.com/mattwhite/86de50d30134129e44ef - Matt White
-1. Не нужно строить из источника. У Ubuntu есть патч безопасности в репозиториях. Если у вас есть «проблемы с вашим репо», исправьте это вместо этого. Вы, скорее всего, будете уязвимы во многих других случаях, если вы не получите обновлений безопасности! - gertvdijk
@Matt White Спасибо! Вы просто спасли меня пару часов :) - Florian Fida
@FlorianFida Это AskUbuntu! Ожидается, что все участники этого сайта опубликуют ответы в рамках использования Ubuntu. - gertvdijk
@ MichaelHärtl 12.10 - это конец жизни. С тех пор он не получает никаких обновлений безопасности уже давно. Обновить!!! - gertvdijk


Примечание. Патч безопасности для CVE-2014-7169 был выпущен как стандартное обновление для системы безопасности. Нет необходимости добавлять дополнительные ppa для получения этого патча. Требуется только следующее.

sudo apt-get update

sudo apt-get upgrade

Чтобы убедиться, что вы правильно исправили bash, выполните следующую команду

dpkg -s bash | grep Version

Если вы находитесь на 14.04 LTS, вы должны увидеть результат:

Version: 4.3-7ubuntu1.4

Если вы используете 12,04 LTS, ваш выход должен быть:

 Version: 4.2-2ubuntu2.5

9
2017-09-25 18:30



Это было правильно, но официальный патч теперь доступен, поэтому обновление для системы безопасности было выпущено. Следовательно, эти шаги больше не нужны. - Robie Basak
Это верно. Я отредактирую вышеуказанный пост. Спасибо. - branch.lizard


Если вы на 11.04: используйте ниже шаги (это сработало для меня)

cd ~/
mkdir bash
wget https://ftp.gnu.org/gnu/bash/bash-4.3.tar.gz
for i in $(seq -f "%03g" 0 25); do wget https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-$i; done

если он не загружен, требуется патч, тогда установите пакет ftp

apt-get install ftp
for i in $(seq -f "%03g" 0 25); do wget https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-$i; done
tar zxvf bash-4.3.tar.gz
cd bash-4.3
for i in $(seq -f "%03g" 0 25);do patch -p0 < ../bash43-$i; done
./configure && make && make install
apt-get install build-essential
./configure && make && make install

Чтобы узнать, применяется ли патч:

env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

1
2017-09-25 17:13





Я использую Natty 11.04, который является EOL (и я обновил /etc/apt/sources.list, чтобы использовать old -releases.ubuntu.com), поэтому мне нужно строить из источника. Я хотел создать .deb, поэтому, по крайней мере, управление пакетами «известно», версия bash не является стандартной. Я не на 100% успешный, однако пакет зарегистрирован как «более новый», а bash двоичный код заканчивается, поэтому вот что я сделал:

apt-get source bash
wget https://gist.githubusercontent.com/drj11/e85ca2d7503f28ebfde8/raw/31bd53ed2e47b220d3c728f5440758e0f76769de/gistfile1.c -O bash_CVE-2014-6271.patch
wget https://gist.githubusercontent.com/drj11/239e04c686f0886253fa/raw/046e697da6d4491c3b733b0207811c55ceb9d927/gistfile1.c -O bash_CVE-2014-6271_plus.patch
cd bash-4.2/

Теперь, в (под) каталоге bash-4.2/, есть: файл bash-4.2.tar.xz, который необходимо распаковать, чтобы добраться до bash источник; и подкаталог, называемый debian,

Я сделал следующие изменения, чтобы избежать зависимостей от texlive: в bash-4.2/debian/control:

Source: bash
...
Build-Depends: autoconf, autotools-dev, patch, bison, libncurses5-dev,
# texinfo, debhelper (>= 5), texi2html, locales, gettext, sharutils, time, xz-ut
ils
 debhelper (>= 5), locales, gettext, sharutils, time, xz-utils
# Build-Depends-Indep: texlive-latex-base, ghostscript
Build-Depends-Indep: ghostscript

... И в bash-4.2/debian/rules:

binary-doc: bash-install #bash-doc-build
        dh_testdir
        dh_testroot
        mkdir -p $(d_doc)/usr/share/doc/$(p)
        dh_installdocs -p$(p_doc) 
ifeq ($(with_gfdl),yes)
        #cp -p build-bash/doc/bashref.pdf $(d_doc)/usr/share/doc/$(p)/.
        #dh_link -p$(p_doc) \
        #    /usr/share/doc/$(p)/bashref.pdf /usr/share/doc/$(p_doc)/bashref.pdf
else
        rm -f $(d_doc)/usr/share/doc-base/bashref
endif
        rm -f $(d_doc)/usr/share/info/dir*
        #cp -p build-bash/doc/bash.html build-bash/doc/bash.pdf \
        #    $(d_doc)/usr/share/doc/$(p)/
        #dh_link -p$(p_doc) \
        #    /usr/share/doc/$(p)/bash.html /usr/share/doc/$(p_doc)/bash.html \
        #    /usr/share/doc/$(p)/bash.pdf /usr/share/doc/$(p_doc)/bash.pdf
        dh_installchangelogs -p$(p_doc) bash/CWRU/changelog
        ...

Чтобы изменить версию, в этой bash-4.2/ каталог, выполните:

bash-4.2$ dch --local patchCVE

... и заполнить заметки в журнале изменений, когда их спросят. Это гарантирует, что в качестве вызываемого (и моего родного) метаданных будет отображаться .deb (и связанные метаданные) bash_4.2-0ubuntu3patchCVE1_i386.deb,

Затем вы можете попробовать построить dpkg-buildpackage -us -uc или debuild команда. Примечание - любой из них повторно распакует источник из почтового индекса - таким образом, переопределяя любые исправления, которые вы, возможно, имели! Тем не менее, запустите один из них один раз, так что источник распакован и построен (обратите внимание debuild может по-прежнему терпеть неудачу в результате texlive, но он должен распаковать и построить источник).

Затем примените патчи; обратите внимание, что вы должны использовать -p1 здесь, потому что в настоящее время вы находитесь в bash-4.2/ каталог:

bash-4.2$ patch -p1 < ../bash_CVE-2014-6271.patch 
bash-4.2$ patch -p1 < ../bash_CVE-2014-6271_plus.patch 

Затем переделайте исправленную версию, запустив:

bash-4.2$ fakeroot debian/rules build 

Это приведет к восстановлению исполняемого файла; проверить его:

bash-4.2$ env VAR='() { :;}; echo Bash is vulnerable!' ./build-bash/bash -c "echo Bash Test"

Чтобы создать файлы .deb, запустите:

bash-4.2$ fakeroot debian/rules binary

Это сохранит файлы .deb в родительском каталоге; перечислить их содержимое:

bash-4.2$ dpkg -c ../bash_4.2-0ubuntu3patchCVE1_i386.deb

Чтобы установить .deb:

bash-4.2$ sudo dpkg -i ../bash_4.2-0ubuntu3patchCVE1_i386.deb

Однако по какой-то причине этот .deb содержит неподдерживаемый двоичный файл (?!), Поэтому мне пришлось дополнительно:

bash-4.2$ sudo cp bash-4.2/build-bash/bash /bin/

... и после этого тест начал правильно проходить для меня:

$ env VAR='() { :;}; echo Bash is!' bash -c "echo Bash Test"
bash: warning: VAR: ignoring function definition attempt
bash: error importing function definition for `VAR'
Bash Test

0
2017-09-28 10:16



Вопрос: В исходном вопросе указывается 1 возможный вектор атаки как «скрипты, выполняемые неуказанными клиентами DHCP». Что это значит? Означает ли это, что Ubuntu / sbin / dhclient <- уязвим? - Bran
Я думаю, что, возможно, неуказанные клиенты означают, что Ubuntu имеет зараженный / sbin / dhclient, который затем запускает команды, которые приводят к запуску скрипта bash, запускающего shellshock. Это то, что клиенты DHCP уязвимы для shellshock? (Надеюсь, что имеет смысл, см. Мое выше сообщение от 10 октября) - Bran