Какова уязвимость удара CVE-2014-6271 (Контузия) и как я фиксирую ее?

Недавно, были распространяющийся вокруг новостей относительно "CVE-2014-6271" (См. USN-2362-1), который является уязвимостью в Bash. Как я знаю, затронут ли я этим, как я могу зафиксировать его, и почему я должен заботиться?

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

142
задан 15 April 2015 в 17:50

5 ответов

Что такое Bash?

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

На Ubuntu, /bin/sh не удар (это - тире). Только удар затронут этой уязвимостью.

Как использование влияет на меня?

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

Взломщик может установить ту переменную среды несколько путей:

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

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

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

Согласно митре:

векторы, вовлекающие функцию ForceCommand в OpenSSH sshd, mod_cgi и mod_cgid модули в Apache Сервер HTTP, сценарии, выполняемые неуказанными клиентами 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, 12.04 Точных Ящеров и 10,04 Ясных Lynx. Если Вы не будете на одной из этих версий LTS, но будете на обоснованно-последней-версии, то Вы, скорее всего, сможете найти исправленный пакет.

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

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

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

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

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

126
ответ дан 22 November 2019 в 22:53

Украл это прочь cft в Hacker News . Если Вы испытываете затруднения из-за своего repos как я (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

Тогда Вы - вся польза!

<час>

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

27
ответ дан 22 November 2019 в 22:53

Если Вы находитесь на 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

, если это не загружается, требуемые patche тогда устанавливают пакет 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
ответ дан 22 November 2019 в 22:53

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

sudo apt-get update

sudo apt-get upgrade

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

dpkg -s bash | grep Version

, Если Вы находитесь на 14.04 LTS, необходимо видеть вывод:

Version: 4.3-7ubuntu1.4

, Если Вы находитесь на 12.04 LTS, Ваш вывод должен быть:

 Version: 4.2-2ubuntu2.5
9
ответ дан 22 November 2019 в 22:53

Я использую Аккуратные 11.04, который является EOL (и я обновил/etc/apt/sources.list для использования old-releases.ubuntu.com), таким образом, я должен создать из источника. Я хотел создать .deb, таким образом, по крайней мере, пакет справляется, "знает", что версия удара не является по умолчанию. Я не на 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/

Теперь, в (sub) каталоге 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 команда. Отметьте - любой из них повторно распакует источник от zip - таким образом переопределяющий любые патчи, которые Вы, возможно, имели! Однако, выполните один из них однажды, таким образом, источник распакован и создан (примечание 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
ответ дан 22 November 2019 в 22:53

Другие вопросы по тегам:

Похожие вопросы: