Недавно появились новости о «CVE-2014-6271» (см. USN-2362-1), что является уязвимостью в Bash. Как узнать, насколько я могу повлиять на это, как я могу это исправить, и почему меня это беспокоит?
Это спроектировано как канонический ответ на эту уязвимость из-за его масштаба и серьезности.
Украсть это с 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 !!
Примечание. Патч безопасности для 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
Если вы используете 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"
Я использую 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