Używam Natty 11.04, który jest EOL (i zaktualizowałem /etc/apt/sources.list, aby używać old-releases.ubuntu.com), więc muszę budować ze źródła. Chciałem zbudować .deb, więc przynajmniej zarządzanie pakietami jest „świadome”, że wersja bash nie jest domyślną wersją. Nie odnoszę 100% sukcesu - jednak pakiet jest zarejestrowany jako „nowszy”, a bash
plik binarny został naprawiony, więc oto co zrobiłem:
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/
Teraz w (pod) katalogu bash-4.2/
znajduje się: plik bash-4.2.tar.xz
, który należy rozpakować, aby dostać się do bash
źródła; oraz o nazwie podkatalog debian
.
Wprowadziłem następujące zmiany, aby uniknąć zależności texlive
: w 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
... oraz w 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
...
Aby zmienić wersję, w tym bash-4.2/
katalogu wykonaj:
bash-4.2$ dch --local patchCVE
... i wypełnij notatki w dzienniku zmian, gdy zostaniesz o to poproszony. Zapewni to wywołanie .deb (i powiązane metadane) (w moim przypadku) bash_4.2-0ubuntu3patchCVE1_i386.deb
.
Następnie możesz spróbować budować za pomocą polecenia dpkg-buildpackage -us -uc
lub debuild
. Uwaga - którykolwiek z nich rozpakuje ponownie źródło z zip - zastępując w ten sposób wszelkie łatki, które mogłeś mieć! Mimo to uruchom jeden z nich, aby źródło zostało rozpakowane i zbudowane (uwaga debuild
może nadal nie działać z powodu texlive, ale powinna rozpakować i zbudować źródło).
Następnie zastosuj łatki; uwaga, powinieneś użyć -p1
tutaj, ponieważ obecnie znajdujesz się w bash-4.2/
katalogu:
bash-4.2$ patch -p1 < ../bash_CVE-2014-6271.patch
bash-4.2$ patch -p1 < ../bash_CVE-2014-6271_plus.patch
Następnie odbuduj łataną wersję, uruchamiając:
bash-4.2$ fakeroot debian/rules build
To odbuduje plik wykonywalny; aby to przetestować:
bash-4.2$ env VAR='() { :;}; echo Bash is vulnerable!' ./build-bash/bash -c "echo Bash Test"
Aby skompilować pliki .deb, uruchom:
bash-4.2$ fakeroot debian/rules binary
Spowoduje to zapisanie plików .deb w katalogu nadrzędnym; aby wyświetlić ich zawartość:
bash-4.2$ dpkg -c ../bash_4.2-0ubuntu3patchCVE1_i386.deb
Aby zainstalować .deb:
bash-4.2$ sudo dpkg -i ../bash_4.2-0ubuntu3patchCVE1_i386.deb
Jednak z jakiegoś powodu ten plik .deb zawiera niepoprawiony plik binarny (?!), Więc musiałem dodatkowo wykonać:
bash-4.2$ sudo cp bash-4.2/build-bash/bash /bin/
... a potem test zaczął się dla mnie poprawnie:
$ 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