bash 脆弱性対応: ソースからビルドする


いまどきのOSですと大抵パッケージ管理の仕組みがあるので、yum なりapt-get なり ports update なりで対応可能ですが、ちょっと古めのOSだとサポート切れになっていたりしてパッケージシステムでは対応できないこともあります。

bashの脆弱性(CVE-2014-6271,CVE-2014-7169 )の対応を手元のFreeBSD 8.3 でやろうとしたころ、 portsがどうもおかしくなっているようで8.4に上げる必要がありそう。bashだけのためにOSを上げるは避けたかったので、GNU本家からソースを取ってきて対応しました。

意外と世の中にその方法が書いてないなーという気がしたので、忘備録としてまとめときます。基本的にLinuxでも同じ方法でできるはずです。
こちらのサイトを参考にしました。

[2014/10/02 11:28 追記: 以下で入手しているパッチではCVE-2014-7186CVE-2014-7187 に未対応のようです。現時点ではGNU本家からも対応パッチはでていませんのでご注意ください。]

[2014/10/02 13:09追記:  CVE-2014-7186 に対応したと思われるパッチ bash43-028   がでています。
下記4行目の bash43-0{20..27} の部分を bash43-0{20..28} にしてください。]
 ←手順を修正したので更新(2014/10/06)

[2014/10/06 10:52追記:  CVE-2014-7186,CVE-2014-6277 , CVE-2014-6278 に対応したと思われる パッチ  bash43-028, bash43-029, bash43-030 がでています。下記4行目の27を30にしてください。

本家から bash ソースとパッチを入手する
[bsd ~]$ cd work/
[bsd ~/work]$ mkdir bash ; cd bash
[bsd ~/work/bash]$ wget http://ftp.gnu.org/gnu/bash/bash-4.3.tar.gz
[bsd ~/work/bash]$ for i in `jot -w %03d 27 1` ; do wget http://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-$i; done

パッチをあててbuildする。
[bsd ~/work/bash]$ tar zxvf bash-4.3.tar.gz
[bsd ~/work/bash]$ cd bash-4.3
[bsd ~/work/bash/bash-4.3]$ find ../bash43-??? -exec /bin/sh -c 'patch -p0 <{}' \;
[bsd ~/work/bash/bash-4.3]$ ./configure --prefix /tmp/bash_patched && make && make install

念のためテストする
[bsd ~/work/bash/bash-4.3]$ /tmp/bash_patched/bin/bash --version
/tmp/bash_patched/bin/bash --version
GNU bash, バージョン 4.3.27(1)-release (i386-unknown-freebsd8.2)
Copyright (C) 2013 Free Software Foundation, Inc.
ライセンス GPLv3+: GNU GPL バージョン 3 またはそれ以降 <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

[bsd ~/work/bash/bash-4.3]$ /tmp/bash_patched/bin/bash
/tmp/bash_patched/bin/bash
bash-4.3$ echo $BASH $BASH_VERSION
/tmp/bash_patched/bin/bash 4.3.27(1)-release

bash-4.3$ env x='() { :;}; echo vulnerable' /tmp/bash_patched/bin/bash -c 'echo hello'
hello
bash-4.3$ exit
exit

既存のbashを削除する
[bsd]~/work/bash/bash-4.3% cd /usr/ports/shells/bash
[bsd]/usr/ports/shells/bash% sudo make deinstall

#補足:削除は以下でも良い
honda# sudo rm /usr/local/bin/bash

buildしたbashを入れる

[bsd]~/work/bash/bash-4.3% ./configure --prefix /usr/local && make && sudo make install
[bsd]~/work/bash/bash-4.3% rehash
[bsd]~/work/bash/bash-4.3% bash --version
GNU bash, バージョン 4.3.27(3)-release (i386-unknown-freebsd8.2)
Copyright (C) 2013 Free Software Foundation, Inc.
ライセンス GPLv3+: GNU GPL バージョン 3 またはそれ以降 

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

ログインシェル用に/etc/shellsに追加する。

[bsd]~/work/bash/bash-4.3% cat /etc/shells
# $FreeBSD: src/etc/shells,v 1.5.36.1.6.1 2010/12/21 17:09:25 kensmith Exp $
#
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.

/bin/sh
/bin/csh
/bin/tcsh
/usr/local/bin/ksh
/usr/local/libexec/git-core/git-shell

[bsd]~/work/bash/bash-4.3% sudo su
bsd# echo /usr/local/bin/bash >> /etc/shells
bsd# cat /etc/shells
# $FreeBSD: src/etc/shells,v 1.5.36.1.6.1 2010/12/21 17:09:25 kensmith Exp $
#
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.

/bin/sh
/bin/csh
/bin/tcsh
/usr/local/bin/ksh
/usr/local/libexec/git-core/git-shell
/usr/local/bin/bash

bsd#

[2014/10/06 追記: 脆弱性チェックはgithubで公開されているツールがよさそうです。

% git clone http://github.com/hannob/bashcheck.git
% cd bashcheck
% vi bashcheck
先頭の /bin/bash を /usr/local/bin/bash 等に変更する
% ./bashcheck /tmp/bash_patched/bin/bash
Testing /tmp/bash_patched/bin/bash ...
GNU bash, バージョン 4.3.30(3)-release (x86_64-unknown-freebsd8.4)

Variable function parser pre/suffixed [%%, upstream], bugs not exploitable
Not vulnerable to CVE-2014-6271 (original shellshock)
Not vulnerable to CVE-2014-7169 (taviso bug)
Not vulnerable to CVE-2014-7186 (redir_stack bug)
Test for CVE-2014-7187 not reliable without address sanitizer
Not vulnerable to CVE-2014-6277 (lcamtuf bug #1)
Not vulnerable to CVE-2014-6278 (lcamtuf bug #2)
%

Leave a Reply

Your email address will not be published. Required fields are marked *