Sto usando Natty 11.04, che è EOL (e ho aggiornato /etc/apt/sources.list per usare old-releases.ubuntu.com), quindi devo compilare dal sorgente. Volevo creare un .deb, quindi almeno il pacchetto gestito è "consapevole" che la versione bash non è quella predefinita. Non ho successo al 100%, tuttavia, il pacchetto è registrato come "più recente" e il file bash
binario finisce fisso, quindi ecco cosa ho fatto:
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/
Ora, nella (sotto) directory bash-4.2/
, c'è: un file bash-4.2.tar.xz
, che deve essere decompresso per arrivare al bash
sorgente; e una sottodirectory chiamata debian
.
Ho apportato le seguenti modifiche per evitare dipendenze da texlive
: in 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
... e in 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
...
Per modificare la versione, in questa bash-4.2/
directory, eseguire:
bash-4.2$ dch --local patchCVE
... e compilare le note nel log delle modifiche quando richiesto. Questo assicurerà che il .deb (e i relativi metadati) sia chiamato (nel mio caso) bash_4.2-0ubuntu3patchCVE1_i386.deb
.
Quindi puoi provare a costruire con dpkg-buildpackage -us -uc
o debuild
comando. Nota: uno di questi disimballerà l'origine dalla zip, ignorando così tutte le patch che potresti aver avuto! Tuttavia, esegui uno di questi una volta in modo che l'origine sia decompressa e debuild
compilata (la nota potrebbe comunque non riuscire alla fine a causa di texlive, ma dovrebbe decomprimere e costruire l'origine).
Quindi, applicare le patch; nota che dovresti usare -p1
qui, perché attualmente sei nella bash-4.2/
directory:
bash-4.2$ patch -p1 < ../bash_CVE-2014-6271.patch
bash-4.2$ patch -p1 < ../bash_CVE-2014-6271_plus.patch
Quindi ricostruire la versione corretta eseguendo:
bash-4.2$ fakeroot debian/rules build
Ciò ricostruirà l'eseguibile; per testarlo:
bash-4.2$ env VAR='() { :;}; echo Bash is vulnerable!' ./build-bash/bash -c "echo Bash Test"
Per creare i file .deb, eseguire:
bash-4.2$ fakeroot debian/rules binary
Ciò salverà i file .deb nella directory padre; per elencare i loro contenuti:
bash-4.2$ dpkg -c ../bash_4.2-0ubuntu3patchCVE1_i386.deb
Per installare il .deb:
bash-4.2$ sudo dpkg -i ../bash_4.2-0ubuntu3patchCVE1_i386.deb
Tuttavia, per qualche motivo, questo .deb contiene un binario senza patch (?!), Quindi ho dovuto anche fare:
bash-4.2$ sudo cp bash-4.2/build-bash/bash /bin/
... e successivamente il test ha iniziato a passare correttamente per me:
$ 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