Saya menggunakan Natty 11.04, yaitu EOL (dan saya telah memperbarui /etc/apt/sources.list untuk menggunakan old-releases.ubuntu.com), jadi saya harus membuat dari sumber. Saya ingin membangun .deb, jadi setidaknya paket kelola adalah "sadar" versi bash bukan yang default. Saya tidak 100% berhasil - namun, paket terdaftar sebagai "baru" dan bash
biner akhirnya diperbaiki, jadi inilah yang saya lakukan:
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/
Sekarang, di direktori (sub) bash-4.2/
, ada: file bash-4.2.tar.xz
, yang perlu diurai untuk mendapatkan bash
sumbernya; dan subdirektori bernama debian
.
Saya membuat perubahan berikut untuk menghindari ketergantungan pada texlive
: di 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
... dan di 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
...
Untuk mengubah versi, di bash-4.2/
direktori ini , lakukan:
bash-4.2$ dch --local patchCVE
... dan isi catatan di changelog saat ditanya. Ini akan memastikan bahwa .deb (dan metadata terkait) dipanggil (dalam kasus saya) bash_4.2-0ubuntu3patchCVE1_i386.deb
.
Kemudian Anda dapat mencoba membangun dengan dpkg-buildpackage -us -uc
atau debuild
memerintahkan. Catatan - salah satu dari ini akan membongkar kembali sumber dari zip - sehingga menimpa patch yang mungkin Anda miliki! Namun, jalankan salah satu dari ini sekali sehingga sumbernya dibongkar dan dibangun (catatan debuild
mungkin masih gagal pada akhirnya karena texlive, tetapi harus membongkar dan membangun sumber).
Kemudian, terapkan tambalan; perhatikan Anda harus menggunakan di -p1
sini, karena saat ini Anda berada di bash-4.2/
direktori:
bash-4.2$ patch -p1 < ../bash_CVE-2014-6271.patch
bash-4.2$ patch -p1 < ../bash_CVE-2014-6271_plus.patch
Kemudian bangun kembali versi yang ditambal dengan menjalankan:
bash-4.2$ fakeroot debian/rules build
Ini akan membangun kembali executable; untuk mengujinya:
bash-4.2$ env VAR='() { :;}; echo Bash is vulnerable!' ./build-bash/bash -c "echo Bash Test"
Untuk membuat file .deb, jalankan:
bash-4.2$ fakeroot debian/rules binary
Ini akan menyimpan file deb di direktori induk; untuk daftar isinya:
bash-4.2$ dpkg -c ../bash_4.2-0ubuntu3patchCVE1_i386.deb
Untuk menginstal .deb:
bash-4.2$ sudo dpkg -i ../bash_4.2-0ubuntu3patchCVE1_i386.deb
Namun, untuk beberapa alasan, deb.
bash-4.2$ sudo cp bash-4.2/build-bash/bash /bin/
... dan setelah itu, tes mulai lulus dengan benar untuk saya:
$ 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