GNU bash Shellshock vulnerability

GNU bash(ユーザと OS の仲介を行うシェルプログラムのなかで,もっとも普及している UNIX ソフトウェア)の新たな脆弱性が発見され,IT 業界ではかなりの騒ぎになっている。それは「GNU bash Shellshock vulnerability」といわれる脆弱性であり,「bash を使用して OS コマンドを実行するアプリケーションを介して,遠隔から任意の OS コマンドを実行される可能性がある」というもの。

九月二十五日に JPCERT/CC から注意喚起され,昨日までに CVE-2014-6271, CVE-2014-6277, CVE-2014-6278, CVE-2014-7169, CVE-2014-7186, CVE-2014-7187 の六つの CVE が発行されている。bash 4 系では 4.3.28 以降で対策されている。

うちの会社でも品質保証部からのセキュリティアップデート対策要請がかしましい。もちろん,Linux ほか,UNIX 系の担当顧客システムに対し,最新パッチを適用しているところである。

今夜,自宅サーバ FreeBSD 9.2-RELEASE-p12 でも対策を行うことにした。Web サーバのアクセスログをチェックしてみると,この脆弱性を突くアタックがもうすでにウチにも来ているようで,まずいと思った。幸い,Apache IP denial configuration を組み込んでいたおかげで,当該アクセスを拒否(レスポンス 403)できていた。

37.187.77.163 - - 2014/10/03-23:06:08 "GET /?x=() { :; }; echo Content-type:
text/plain;echo;echo;echo M`expr 1330 + 7`H;  HTTP/1.0" 403 1129 0 "() { :; 
}; echo Content-type:text/plain;echo;echo;echo M`expr 1330 + 7`H;" "() { :; 
}; echo Content-type:text/plain;echo;echo;echo M`expr 1330 + 7`H;"

まず現インストールバージョン 4.3.11 で事象を確認した。

$ bash --version
GNU bash, バージョン 4.3.11(2)-release (i386-portbld-freebsd9.2)
Copyright (C) 2013 Free Software Foundation, Inc.
$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
vulnerable
this is a test

検証コードで “vulnerable” と出力され,問題が確認された。このように環境変数の扱いのバグがこの Shellshock 脆弱性の要因である。FreeBSD ports を最新にして,bash を最新バージョン 4.3.28 にした。以下は,portsnap で ports 全体を最新に更新し,パッケージ管理ツール pkg をアップグレードするオペレーションをも示している。

% su -m
# portsnap fetch extract update
# cd /usr/ports/ports-mgmt/pkg && make deinstall reinstall clean
# pkg2ng
# cd /usr/ports/shell/bash && make deinstall reinstall clean

さて,確認してみる。

$ bash --version
GNU bash, バージョン 4.3.28(0)-release (i386-portbld-freebsd9.2)
Copyright (C) 2013 Free Software Foundation, Inc.
$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
this is a test

vulnerable” 出力はされなくなって,OK のようである。

本 bash 脆弱性の詳細は,IPA の情報「更新:bash の脆弱性対策について(CVE-2014-6271 等)」を参照のこと。