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

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

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

1
задан 16 April 2015 в 03:50

4 ответа

Украсть это с hft в 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 не изменяется и может быть вызван из curl !!

27
ответ дан 24 May 2018 в 03:25
  • 1
    Вот как построить bash 3.2 с патчем на debian lenny: gist.github.com/mattwhite/86de50d30134129e44ef – Matt White 25 September 2014 в 08:47
  • 2
    -1. Не нужно строить из источника. У Ubuntu есть патч безопасности в репозиториях. Если у вас есть «проблемы с вашим репо», исправьте это вместо этого. Вы, скорее всего, будете уязвимы во многих других случаях, если вы не получите обновлений безопасности! – gertvdijk 25 September 2014 в 13:21
  • 3
    @Matt White Спасибо! Вы просто спасли меня пару часов :) – Florian Fida 25 September 2014 в 15:09
  • 4
    @FlorianFida Это AskUbuntu! Ожидается, что все участники этого сайта опубликуют ответы в рамках использования Ubuntu. – gertvdijk 25 September 2014 в 15:11
  • 5
    @ MichaelHärtl 12.10 - это конец жизни. С тех пор он не получает никаких обновлений безопасности уже давно. Обновить!!! – gertvdijk 25 September 2014 в 18:38

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

sudo apt-get update

sudo apt-get upgrade

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

dpkg -s bash | grep Version

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

Version: 4.3-7ubuntu1.4

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

 Version: 4.2-2ubuntu2.5
9
ответ дан 24 May 2018 в 03:25
  • 1
    Это было правильно, но официальный патч теперь доступен, поэтому обновление для системы безопасности было выпущено. Следовательно, эти шаги больше не нужны. – Robie Basak 26 September 2014 в 14:36
  • 2
    Это верно. Я отредактирую вышеуказанный пост. Спасибо. – branch.lizard 26 September 2014 в 17:01

Если вы используете 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

To посмотрите, применяется ли патч:

env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
1
ответ дан 24 May 2018 в 03:25

Я использую 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/

Теперь, в (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. Примечание - любой из них повторно распакует источник из почтового индекса - таким образом, переопределяя любые исправления, которые вы, возможно, имели! Тем не менее, запустите один из них один раз, чтобы исходный файл был распакован и построен (примечание 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
ответ дан 24 May 2018 в 03:25
  • 1
    Вопрос: В исходном вопросе указывается 1 возможный вектор атаки как «скрипты, выполняемые неуказанными клиентами DHCP». Что это значит? Означает ли это, что Ubuntu / sbin / dhclient & lt; - уязвим? – Bran 10 October 2014 в 06:29
  • 2
    Я думаю, что, возможно, неуказанные клиенты означают, что Ubuntu имеет зараженный / sbin / dhclient, который затем запускает команды, которые приводят к запуску скрипта bash, запускающего shellshock. Это то, что клиенты DHCP уязвимы для shellshock? (Надеюсь, что имеет смысл, см. Мое выше сообщение от 10 октября) – Bran 23 October 2014 в 09:06

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

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