10月に入り、
わずか1週間程度でBashが大幅な進化を遂げた ~Shellshock大暴れ~
まだ現在進行形の事案ではありますが、
Bash 4.
- 9月24日にPatchlevel 25
- 9月26日にPatchlevel 26
- 9月27日にPatchlevel 27
- 10月1日にPatchlevel 28
- 10月2日にPatchlevel 29
- 10月5日にPatchlevel 30
この間に発見、
どの脆弱性がどのパッチで対処されたのか? という対応については、
何が悪いのか?
JVNの該当記事には、
GNU Bash には、環境変数にシェル関数定義を設定して他のシェルプロセスに渡す機能と、環境変数で設定されたシェル関数定義を取り込む機能が存在します。 関数定義に続きシェルコマンドが記述されている形で環境変数が設定されているとき、GNU Bash は関数定義を取り込む際にそのシェルコマンドを実行してしまいます (CWE-78)。
GNU Bash に OS コマンドインジェクションの脆弱性
上記の文章が意味するところを少し説明してみます.
確認用のスクリプトを見てみる
Red Hat から提示された
env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
このスクリプトが何をするか? は、
env [OPTION]... [-] [NAME=VALUE]... [COMMAND [ARG]...]
envコマンドは、
上記のスクリプトから
# env x='() { :;}; echo vulnerable' (省略) x=() { :;}; echo vulnerable (省略)
この時点で、
環境変数にこのように設定された
# env x='() { :;}; echo vulnerable' bash -c set vulnerable BASH=/bin/bash (省略) x () { : } #
見るとわかるのですが、
よく言われるのは、
最も確実な対処方法はアップデートだが、単体でアップデートできない場合も
本脆弱性は結構根深く、
これを見ると、
- Vulnerability Note VU#252743
メーカのドキュメントには、
なお、
あと、
今回参考にした文献
- GNU bash の脆弱性に関する注意喚起
- JVNVU#97219505 GNU Bash に OS コマンドインジェクションの脆弱性
- Bash Code Injection Vulnerability via Specially Crafted Environment Variables (CVE-2014-6271, CVE-2014-7169)
- Vulnerability Note VU#252743 GNU Bash shell executes commands in exported functions in environment variables
- インフラセキュリティの処方箋 第1回 脆弱性対策のためにパッケージを入れ替えると言うこと