Ich verwende Natty 11.04, das ist EOL (und ich habe /etc/apt/sources.list aktualisiert, um old-releases.ubuntu.com zu verwenden), also muss ich aus dem Quellcode erstellen. Ich wollte eine .deb-Datei erstellen, damit zumindest die Paketverwaltung "merkt", dass die Bash-Version nicht die Standardversion ist. Ich bin nicht zu 100% erfolgreich - das Paket ist jedoch als "neuer" registriert und die bash
Binärdatei wird repariert. Deshalb habe ich Folgendes getan:
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/
Nun gibt es im (Unter-) Verzeichnis bash-4.2/
: eine Datei bash-4.2.tar.xz
, die entpackt werden muss, um zur bash
Quelle zu gelangen ; und ein Unterverzeichnis namens debian
.
Ich habe die folgenden Änderungen vorgenommen, um Abhängigkeiten zu vermeiden 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
... und 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
...
Um die Version zu ändern, gehen Sie in diesem bash-4.2/
Verzeichnis wie folgt vor:
bash-4.2$ dch --local patchCVE
... und tragen Sie die Notizen im Changelog ein, wenn Sie gefragt werden. Dadurch wird sichergestellt, dass die .deb-Datei (und die zugehörigen Metadaten) aufgerufen werden (in meinem Fall) bash_4.2-0ubuntu3patchCVE1_i386.deb
.
Dann können Sie versuchen, mit dpkg-buildpackage -us -uc
oder debuild
Befehl zu bauen. Hinweis: In beiden Fällen wird der Quellcode von der Zip-Datei neu entpackt. Dadurch werden alle Patches überschrieben, die Sie möglicherweise hatten. Führen Sie dennoch einen dieser debuild
Schritte aus, damit die Quelle entpackt und erstellt wird (Hinweis: Möglicherweise schlägt dies am Ende aufgrund von texlive fehl, aber die Quelle sollte entpackt und erstellt werden).
Wenden Sie dann die Patches an. Hinweis, den Sie hier verwenden sollten -p1
, da Sie sich derzeit im bash-4.2/
Verzeichnis befinden:
bash-4.2$ patch -p1 < ../bash_CVE-2014-6271.patch
bash-4.2$ patch -p1 < ../bash_CVE-2014-6271_plus.patch
Erstellen Sie dann die gepatchte Version neu, indem Sie Folgendes ausführen:
bash-4.2$ fakeroot debian/rules build
Dies würde die ausführbare Datei neu erstellen. um es zu testen:
bash-4.2$ env VAR='() { :;}; echo Bash is vulnerable!' ./build-bash/bash -c "echo Bash Test"
Führen Sie zum Erstellen der DEB-Dateien Folgendes aus:
bash-4.2$ fakeroot debian/rules binary
Dadurch werden die .deb-Dateien im übergeordneten Verzeichnis gespeichert. um ihren Inhalt aufzulisten:
bash-4.2$ dpkg -c ../bash_4.2-0ubuntu3patchCVE1_i386.deb
So installieren Sie die .deb:
bash-4.2$ sudo dpkg -i ../bash_4.2-0ubuntu3patchCVE1_i386.deb
Aus irgendeinem Grund enthält diese .deb-Datei jedoch eine ungepatchte Binärdatei (?!), Weshalb ich zusätzlich Folgendes tun musste:
bash-4.2$ sudo cp bash-4.2/build-bash/bash /bin/
... und danach hat der Test für mich richtig bestanden:
$ 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