Estou usando o Natty 11.04, que é EOL (e atualizei o /etc/apt/sources.list para usar old-releases.ubuntu.com), então tenho que construir a partir do código-fonte. Eu queria criar um .deb, portanto, pelo menos, o gerenciamento de pacotes está "ciente" de que a versão do bash não é a padrão. Não sou 100% bem-sucedido - no entanto, o pacote é registrado como "mais recente" e o bash
binário acaba corrigido, então aqui está o que eu fiz:
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/
Agora, no diretório (sub) bash-4.2/
, existe: um arquivo bash-4.2.tar.xz
, que precisa ser descompactado para chegar à bash
fonte; e um subdiretório chamado debian
.
Fiz as seguintes alterações para evitar dependências 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 em 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 alterar a versão, neste bash-4.2/
diretório, faça:
bash-4.2$ dch --local patchCVE
... e preencha as anotações no changelog quando solicitado. Isso garantirá que o .deb (e os metadados relacionados) sejam chamados (no meu caso) bash_4.2-0ubuntu3patchCVE1_i386.deb
.
Então você pode tentar criar com dpkg-buildpackage -us -uc
ou debuild
comando. Nota - qualquer um deles descompactará a fonte do zip - substituindo assim os patches que você tiver! Ainda assim, execute um deles uma vez para que a fonte seja descompactada e construída (a nota debuild
ainda pode falhar no final devido ao texlive, mas deve descompactar e criar a fonte).
Em seguida, aplique os patches; note que você deve usar -p1
aqui, porque atualmente você está no bash-4.2/
diretório:
bash-4.2$ patch -p1 < ../bash_CVE-2014-6271.patch
bash-4.2$ patch -p1 < ../bash_CVE-2014-6271_plus.patch
Em seguida, reconstrua a versão corrigida executando:
bash-4.2$ fakeroot debian/rules build
Isso reconstruiria o executável; para testá-lo:
bash-4.2$ env VAR='() { :;}; echo Bash is vulnerable!' ./build-bash/bash -c "echo Bash Test"
Para criar os arquivos .deb, execute:
bash-4.2$ fakeroot debian/rules binary
Isso salvará os arquivos .deb no diretório pai; para listar seu conteúdo:
bash-4.2$ dpkg -c ../bash_4.2-0ubuntu3patchCVE1_i386.deb
Para instalar o .deb:
bash-4.2$ sudo dpkg -i ../bash_4.2-0ubuntu3patchCVE1_i386.deb
No entanto, por algum motivo, este .deb contém um binário não corrigido (?!), Então tive que fazer adicionalmente:
bash-4.2$ sudo cp bash-4.2/build-bash/bash /bin/
... e depois disso, o teste começou a passar corretamente para mim:
$ 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