2014年10月7日火曜日

古いbashのパッチあて

といっても,古いサーバで入ってるのが 2.05b というもの,当然,だれもパッケージを作ってくれない.

$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

でテストすると,アウトであるので,対策は必要.元は古いのだが 本家 にはちゃんとパッチも出てる (この騒ぎの前の最後のパッチから10年以上開いてる (^^; ).

ということで,ソースからビルド.



本家 からソースを持ってくる.

$ wget http://ftp.gnu.org/gnu/bash/bash-2.05b.tar.gz

展開.

$ tar -xzf bash-2.05b.tar.gz
$ cd bash-2.05b

パッチを13個取ってくる.

$ wget http://ftp.gnu.org/gnu/bash/bash-2.05b-patches/bash205b-001

ほんとうは {01..13} とやって手を抜きたかったのだが,この展開ができなかったので,これを13回繰り返したw
パッチを当てるのも,

$ cat bash205b-001 | patch -p0

これを13回繰り返したorz
まあ,history機能はあるので大したことではないのだけど.bash 3.2 のようにパッチ57とかならシェルスクリプトでも書いたろうけど,13個くらいなら手作業の方が速いw

で,あとは,

$ ./configure
$ make

ここで

$ env x='() { :;}; echo vulnerable' ./bash -c "echo this is a test"

とやって今作った bash で vulnerable が出ないことを確認. --version だと表示が変わらんのだけど,まあいいか.
root になって

# make install

これで,/usr/local/bin にインストールされる.
元々のは /usr/bin に入っているので,古いのを消して,新しいのにシンボリックリンクを張る.

# mv /usr/bin/bash /usr/bin/bash.old
# ln -s /usr/local/bin/bash /usr/bin/bash


0 件のコメント:

コメントを投稿