Tôi đang sử dụng Natty 11.04, đó là EOL (và tôi đã cập nhật /etc/apt/source.list để sử dụng old-release.ub Ubuntu.com), vì vậy tôi phải xây dựng từ nguồn. Tôi muốn xây dựng một .deb, vì vậy ít nhất việc quản lý gói là "nhận biết" phiên bản bash không phải là phiên bản mặc định. Tôi không thành công 100% - tuy nhiên, gói được đăng ký là "mới hơn" và bash
nhị phân kết thúc cố định, vì vậy đây là những gì tôi đã làm:
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/
Bây giờ, trong thư mục (phụ) bash-4.2/
, có: một tệp bash-4.2.tar.xz
, cần được giải nén để đến bash
nguồn; và một thư mục con được gọi debian
.
Tôi đã thực hiện các thay đổi sau để tránh phụ thuộc vào 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
... và trong 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
...
Để thay đổi phiên bản, trong bash-4.2/
thư mục này , hãy làm:
bash-4.2$ dch --local patchCVE
... và điền vào các ghi chú trong danh sách thay đổi khi được hỏi. Điều này sẽ đảm bảo rằng .deb (và siêu dữ liệu liên quan) được gọi (trong trường hợp của tôi) bash_4.2-0ubuntu3patchCVE1_i386.deb
.
Sau đó, bạn có thể thử xây dựng với dpkg-buildpackage -us -uc
hoặc debuild
chỉ huy. Lưu ý - một trong hai thứ này sẽ giải nén lại nguồn từ zip - do đó ghi đè lên bất kỳ bản vá nào bạn có thể có! Tuy nhiên, hãy chạy một trong số này một lần để nguồn được giải nén và xây dựng ( debuild
cuối cùng lưu ý vẫn có thể bị lỗi do texlive, nhưng nó sẽ giải nén và xây dựng nguồn).
Sau đó, áp dụng các bản vá; lưu ý bạn nên sử dụng -p1
ở đây, vì hiện tại bạn đang ở trong bash-4.2/
thư mục:
bash-4.2$ patch -p1 < ../bash_CVE-2014-6271.patch
bash-4.2$ patch -p1 < ../bash_CVE-2014-6271_plus.patch
Sau đó xây dựng lại phiên bản vá bằng cách chạy:
bash-4.2$ fakeroot debian/rules build
Điều này sẽ xây dựng lại thực thi; để kiểm tra nó:
bash-4.2$ env VAR='() { :;}; echo Bash is vulnerable!' ./build-bash/bash -c "echo Bash Test"
Để xây dựng các tệp .deb, hãy chạy:
bash-4.2$ fakeroot debian/rules binary
Điều này sẽ lưu các tệp .deb trong thư mục cha; để liệt kê nội dung của họ:
bash-4.2$ dpkg -c ../bash_4.2-0ubuntu3patchCVE1_i386.deb
Để cài đặt .deb:
bash-4.2$ sudo dpkg -i ../bash_4.2-0ubuntu3patchCVE1_i386.deb
Tuy nhiên, vì một số lý do, .deb này chứa một nhị phân chưa được vá (?!), Vì vậy tôi phải thêm vào:
bash-4.2$ sudo cp bash-4.2/build-bash/bash /bin/
... và sau đó, bài kiểm tra bắt đầu chính xác cho tôi:
$ 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