J'utilise Natty 11.04, qui est EOL (et j'ai mis à jour /etc/apt/sources.list pour utiliser old-releases.ubuntu.com), je dois donc compiler à partir des sources. Je voulais construire un fichier .deb, donc au moins le paquet géré est "conscient" que la version bash n'est pas celle par défaut. Je ne réussis pas à 100% - cependant, le paquet est enregistré comme "plus récent" et le bash
binaire finit par être corrigé. Voici ce que j'ai fait:
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/
Maintenant, dans le (sous) répertoire bash-4.2/
, il y a: un fichier bash-4.2.tar.xz
, qui doit être décompressé pour accéder à la bash
source; et un sous-répertoire appelé debian
.
J'ai apporté les modifications suivantes pour éviter les dépendances sur texlive
: dans 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
... et dans 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
...
Pour changer de version, dans ce bash-4.2/
répertoire, faites:
bash-4.2$ dch --local patchCVE
... et remplissez les notes dans le journal des modifications lorsque cela vous est demandé. Cela garantira que le .deb (et les métadonnées associées) est appelé (dans mon cas) bash_4.2-0ubuntu3patchCVE1_i386.deb
.
Ensuite, vous pouvez essayer de construire avec dpkg-buildpackage -us -uc
ou debuild
commande. Remarque - l'un ou l'autre va décompresser le code source à partir du zip - annulant ainsi les patchs que vous avez pu avoir! Néanmoins, exécutez l’une de celles-ci une fois pour que le source soit décompressé et construit (la note debuild
peut toujours échouer à la fin en raison de texlive, mais elle devrait décompresser et générer le source).
Ensuite, appliquez les patchs; notez que vous devriez utiliser -p1
ici, car vous êtes actuellement dans le bash-4.2/
répertoire:
bash-4.2$ patch -p1 < ../bash_CVE-2014-6271.patch
bash-4.2$ patch -p1 < ../bash_CVE-2014-6271_plus.patch
Reconstruisez ensuite la version corrigée en lançant:
bash-4.2$ fakeroot debian/rules build
Cela reconstruirait l'exécutable; pour le tester:
bash-4.2$ env VAR='() { :;}; echo Bash is vulnerable!' ./build-bash/bash -c "echo Bash Test"
Pour construire les fichiers .deb, exécutez:
bash-4.2$ fakeroot debian/rules binary
Cela enregistrera les fichiers .deb dans le répertoire parent. pour lister leur contenu:
bash-4.2$ dpkg -c ../bash_4.2-0ubuntu3patchCVE1_i386.deb
Pour installer le .deb:
bash-4.2$ sudo dpkg -i ../bash_4.2-0ubuntu3patchCVE1_i386.deb
Cependant, pour quelque raison que ce soit, ce .deb contient un binaire non corrigé (?!), Je devais donc aussi:
bash-4.2$ sudo cp bash-4.2/build-bash/bash /bin/
... et après cela, le test a commencé à passer correctement pour moi:
$ 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