J'utilise Natty 11.04, qui est EOL (et j'ai mis à jour /etc/apt/sources.list pour utiliser old-releases.ubuntu.com), donc je dois construire à partir des sources. Je voulais construire un .deb, pour qu'au moins le gestionnaire de paquets soit "conscient" que la version de bash n'est pas celle par défaut. Je n'ai pas réussi à 100% - cependant, le paquet est enregistré comme "plus récent" et l'icône bash
binaire finit par être réparé, alors 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 atteindre le fichier bash
et un sous-répertoire appelé debian
.
J'ai fait les changements suivants 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 la version, dans ce bash-4.2/
répertoire, faites :
bash-4.2$ dch --local patchCVE
... et remplissez les notes dans le changelog quand on vous le demande. Cela garantira que le fichier .deb (et les métadonnées associées) est appelé (dans mon cas) bash_4.2-0ubuntu3patchCVE1_i386.deb
.
Vous pouvez alors essayer de construire avec dpkg-buildpackage -us -uc
ou debuild
commande. Remarque - l'une ou l'autre de ces commandes déballera à nouveau les sources à partir du zip, ce qui annulera tous les correctifs que vous auriez pu avoir ! Lancez quand même l'une de ces commandes une fois pour que les sources soient décompressées et construites (remarque debuild
peut encore échouer à la fin à cause de texlive, mais il devrait décompresser et construire la source).
Ensuite, appliquez les correctifs ; notez que vous devriez utiliser -p1
ici, parce qu'actuellement vous êtes 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
Puis reconstruire la version corrigée en exécutant :
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 permettra d'enregistrer 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 fichier .deb :
bash-4.2$ sudo dpkg -i ../bash_4.2-0ubuntu3patchCVE1_i386.deb
Cependant, pour une raison quelconque, ce .deb contient un binaire non corrigé ( ?!), et j'ai donc dû le faire en plus :
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