Estoy usando Natty 11.04, que es EOL (y he actualizado /etc/apt/sources.list para usar old-releases.ubuntu.com), así que tengo que construir desde la fuente. Quería construir un .deb, por lo que al menos el administrador de paquetes es "consciente" de que la versión bash no es la predeterminada. No tengo éxito al 100%, sin embargo, el paquete está registrado como "más nuevo" y el bash
binario termina arreglado, así que esto es lo que hice:
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/
Ahora, en el (sub) directorio bash-4.2/
, hay: un archivo bash-4.2.tar.xz
, que necesita ser desempaquetado para llegar a la bash
fuente; y un subdirectorio llamado debian
.
Hice los siguientes cambios para evitar dependencias de texlive
: en 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
... y en 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
...
Para cambiar la versión, en este bash-4.2/
directorio, haga:
bash-4.2$ dch --local patchCVE
... y complete las notas en el registro de cambios cuando se le solicite. Esto asegurará que se llame al .deb (y los metadatos relacionados) (en mi caso) bash_4.2-0ubuntu3patchCVE1_i386.deb
.
Entonces puedes intentar construir con dpkg-buildpackage -us -uc
o debuild
comando. Nota: cualquiera de estos volverá a desempaquetar la fuente del archivo zip, anulando cualquier parche que haya tenido. Aún así, ejecute uno de estos una vez para que la fuente se desempaque y debuild
compile (la nota puede fallar al final debido a texlive, pero debe desempaquetar y compilar la fuente).
Luego, aplique los parches; tenga en cuenta que debe usar -p1
aquí, porque actualmente está en el bash-4.2/
directorio:
bash-4.2$ patch -p1 < ../bash_CVE-2014-6271.patch
bash-4.2$ patch -p1 < ../bash_CVE-2014-6271_plus.patch
Luego reconstruya la versión parcheada ejecutando:
bash-4.2$ fakeroot debian/rules build
Esto reconstruiría el ejecutable; para probarlo:
bash-4.2$ env VAR='() { :;}; echo Bash is vulnerable!' ./build-bash/bash -c "echo Bash Test"
Para compilar los archivos .deb, ejecute:
bash-4.2$ fakeroot debian/rules binary
Esto guardará los archivos .deb en el directorio principal; para enumerar sus contenidos:
bash-4.2$ dpkg -c ../bash_4.2-0ubuntu3patchCVE1_i386.deb
Para instalar el .deb:
bash-4.2$ sudo dpkg -i ../bash_4.2-0ubuntu3patchCVE1_i386.deb
Sin embargo, por alguna razón, este .deb contiene un binario no parcheado (?!), Así que tuve que hacer además:
bash-4.2$ sudo cp bash-4.2/build-bash/bash /bin/
... y después de eso, la prueba comenzó a pasarme correctamente:
$ 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