ฉันใช้ Natty 11.04 ซึ่งเป็น EOL (และฉันได้อัปเดต /etc/apt/sources.list เพื่อใช้ old-releases.ubuntu.com) ดังนั้นฉันต้องสร้างจากแหล่งที่มา ฉันต้องการสร้าง. deb ดังนั้นอย่างน้อยแพคเกจการจัดการคือ "ระวัง" เวอร์ชันทุบตีไม่ใช่ค่าเริ่มต้น ฉันไม่ประสบความสำเร็จ 100% - อย่างไรก็ตามแพคเกจถูกลงทะเบียนเป็น "ใหม่กว่า" และbash
ไบนารีสิ้นสุดลงคงที่ดังนั้นนี่คือสิ่งที่ฉันทำ:
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/
ตอนนี้ในไดเรกทอรี (ย่อย) bash-4.2/
นั่นคือ: ไฟล์bash-4.2.tar.xz
ซึ่งจะต้องมีการแตกไฟล์เพื่อไปยังbash
แหล่งที่มา debian
และไดเรกทอรีย่อยที่เรียกว่า
ฉันทำการเปลี่ยนแปลงต่อไปนี้เพื่อหลีกเลี่ยงการพึ่งพาtexlive
: ใน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
... และใน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
...
หากต้องการเปลี่ยนเวอร์ชันในbash-4.2/
ไดเรกทอรีนี้ให้ทำ:
bash-4.2$ dch --local patchCVE
... และกรอกบันทึกย่อในการเปลี่ยนแปลงเมื่อถูกถาม นี้จะให้แน่ใจว่า .deb (และข้อมูลที่เกี่ยวข้อง) จะเรียกว่า bash_4.2-0ubuntu3patchCVE1_i386.deb
(ในกรณีของฉัน)
จากนั้นคุณสามารถลองสร้างด้วยคำสั่งdpkg-buildpackage -us -uc
หรือ debuild
หมายเหตุ - อย่างใดอย่างหนึ่งเหล่านี้จะแกะแหล่งที่มาจาก zip อีกครั้งดังนั้นจึงมีการแทนที่ patch ที่คุณอาจมี! ยังคงเรียกใช้อย่างใดอย่างหนึ่งเหล่านี้ครั้งเดียวเพื่อให้แหล่งที่มาถูก unpacked และสร้าง (หมายเหตุdebuild
อาจยังล้มเหลวในที่สุดเนื่องจาก texlive แต่มันควรจะแกะและสร้างแหล่งที่มา)
จากนั้นให้ใช้แผ่นแปะ; โปรดทราบว่าคุณควรใช้-p1
ที่นี่เพราะขณะนี้คุณอยู่ในbash-4.2/
ไดเรกทอรี:
bash-4.2$ patch -p1 < ../bash_CVE-2014-6271.patch
bash-4.2$ patch -p1 < ../bash_CVE-2014-6271_plus.patch
จากนั้นสร้างเวอร์ชันที่ติดตั้งใหม่โดยการเรียกใช้:
bash-4.2$ fakeroot debian/rules build
สิ่งนี้จะสร้างไฟล์เรียกทำงานขึ้นมาใหม่ เพื่อทดสอบ:
bash-4.2$ env VAR='() { :;}; echo Bash is vulnerable!' ./build-bash/bash -c "echo Bash Test"
ในการสร้างไฟล์. deb ให้รัน:
bash-4.2$ fakeroot debian/rules binary
สิ่งนี้จะบันทึกไฟล์. deb ในไดเรกทอรีแม่ เพื่อแสดงรายการเนื้อหา:
bash-4.2$ dpkg -c ../bash_4.2-0ubuntu3patchCVE1_i386.deb
ในการติดตั้ง. deb:
bash-4.2$ sudo dpkg -i ../bash_4.2-0ubuntu3patchCVE1_i386.deb
อย่างไรก็ตามด้วยเหตุผลบางอย่าง. deb นี้มีไบนารีที่ไม่ตรงกัน (?!) ดังนั้นฉันต้องทำเพิ่มเติม:
bash-4.2$ sudo cp bash-4.2/build-bash/bash /bin/
... และหลังจากนั้นการทดสอบก็เริ่มต้นอย่างถูกต้องสำหรับฉัน:
$ 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