Red Hat は、Red Hat 製品に同梱される Bash パッケージのすべてのバージョンに影響する脆弱性について報告を受けました。この脆弱性 CVE-2014-6271 を使用して恣意的なコードを実行できます。非認証のリモートの攻撃者は、特定のサービスおよびアプリケーションを使用して、この問題を利用する環境変数を提供できます。
アップデート: 2014-09-25 03:10 UTC
Red Hat は、CVE-2014-6271 に対応するパッチが不十分であること認識しています。攻撃者は、特定の状況下で脆弱なシステムで実行する恣意的なコマンドを含む特別に作られた環境変数を提供できます。この新しい問題は CVE-2014-7169 で対応しています。Red Hat は、重大な優先度として、アップストリームの開発者と連携してパッチを作成しています。回避策の詳細については、以下の FAQ を参照してください。
この問題は、システムにどのような影響を与えますか?
この問題は、Bash シェルを使用し、環境変数の値を解析するすべての製品に影響します。この問題は、アプリケーションが Bash を呼び出す手段は数多く存在するため、特に危険です。アプリケーションが他のバイナリを実行する場合は、Bash が呼び出されてそのバイナリを実行する機会が非常に多くなります。これは、Bash シェルの一般的な使用方法であるためこの問題は非常に危険であり、その認識で対応する必要があります。
この問題に対応するアップデートとして一覧に挙げられているバージョン以前のバージョンはすべて、ある程度影響を受けます。
詳細については、修正内容を記載した各記事を参照してください。
影響を受ける製品:
製品/チャンネル | 修正されたパッケージ | 修正内容 |
---|---|---|
Red Hat Enterprise Linux 7 | bash-4.2.45-5.el7_0.2 | Red Hat Enterprise Linux |
Red Hat Enterprise Linux 6 | bash-4.1.2-15.el6_5.1 | Red Hat Enterprise Linux |
bash-4.1.2-15.el6_5.1.sjis.1 | Red Hat Enterprise Linux | |
bash-4.1.2-9.el6_2.1 | Red Hat Enterprise Linux 6.2 AUS | |
bash-4.1.2-15.el6_4.1 | Red Hat Enterprise Linux 6.4 EUS | |
Red Hat Enterprise Linux 5 | bash-3.2-33.el5.1 | Red Hat Enterprise Linux |
bash-3.2-33.el5_11.1.sjis.1 | Red Hat Enterprise Linux | |
bash-3.2-24.el5_6.1 | Red Hat Enterprise Linux 5.6 LL | |
bash-3.2-32.el5_9.2 | Red Hat Enterprise Linux 5.9 EUS | |
Red Hat Enterprise Linux 4 | bash-3.0-27.el4.2 | Red Hat Enterprise Linux 4 ELS |
上に挙げた製品クラスのマシンは、クライアントとして作成された接続が脆弱性のあるサーバーへのものかどうかを特定できないため、堅実な解決策として、脆弱性のあるバージョンを実行しているマシンはすべてアップデートすることが推奨されます。
診断手順
以下のコマンドを実行すると、お使いの Bash がこの問題の影響を受けるかどうかをテストできます。
$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
このコマンドの出力は以下のようになります。
vulnerable this is a test
この出力は、現在お使いの Bash のバージョンに脆弱性があることを示しています。この問題を修正するパッチを使用すると、Bash 関数後にいかなるコードも許可しません。したがって、パッチを当てたバージョンの Bash を使用して先ほどのコマンドを実行すると、以下のような出力が得られます。
$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test" bash: warning: x: ignoring function definition attempt bash: error importing function definition for `x' this is a test
一般的な設定例:
Red Hat は、この問題の重大度と、様々な設定にどう影響するか理解を深めるために解析を行いました。以下の表は包括的ではありませんが、特定の設定下でのこの問題の影響例と、非常に複雑であるため、この問題に影響しないものを特定するのが不可能な理由について説明しています。最も推奨される方法は、Bash を修正されたバージョンにアップグレードすることです。
パッケージ | 説明 |
---|---|
httpd | CGI スクリプトがこの問題に影響される可能性は高いです。CGI スクリプトを web サーバーで実行すると、このスクリプトは環境変数を使用してスクリプトにデーターを渡します。攻撃者は、この環境変数を制御できます。CGI スクリプトが Bash を呼び出すと、このスクリプトは恣意的なコードを httpd ユーザーとして実行できます。mod_php、mod_perl、および mod_python は環境変数を使用しないため、影響を受けないと考えられます。 |
Secure シェル(SSH) | rsync や git などの SSH を使用してユーザーが実行できるリモートコマンドを制限するのは珍しくありません。この時、この脆弱性を利用して、制限されたコマンドだけでなく、いずれのコマンドを実行できます。 |
dhclient | Dynamic Host Configuration Protocol Client (dhclient) を使用して、ネットワーク設定情報を DHCP から自動的に取得します。このクライアントはさまざまな環境変数を使用し、Bash を実行してネットワークインターフェイスを設定します。攻撃者は、悪意のある DHCP サーバーに接続して、クライアントマシンで恣意的なコードを実行できます。 |
CUPS | CUPS はこの問題の影響を受けると考えられています。cups フィルターを実行する時に、ユーザーが提供するさまざまな値が環境変数に保存されます。 |
sudo | sudo から実行したコマンドはこの問題の影響を受けません。特に、sudo は、関数でもある環境変数を探します。これにより、Bash の子プロセスが恣意的なコードを実行できるように、実行中のコマンドが環境変数を設定でます。 |
Firefox | Firefox では、Bash が恣意的なコマンドを実行できるように環境変数を設定できるとは考えられていません。ただし、この操作を許可するさまざまなプラグインと拡張子をインストールするのが一般的であるため、Bash をアップグレードすることが推奨されます。 |
Postfix | Postfix サーバーは、さまざまな文字を ? に置き換えます。Postfix サーバーはさまざまな方法で Bash を呼び出しますが、 このサーバーによって恣意的な環境変数を設定できるとは考えられません。ただし、フィルターが環境変数を設定できる可能性はあります。 |
この不具合の詳細な解析については、https://securityblog.redhat.com/2014/09/24/bash-specially-crafted-environment-variables-code-injection-attack を参照してください。
よくある質問
この FAQ は、Bash の脆弱性 CVE-2014-6271 に関するものです。
CVE-2014-6271 のパッチは完成していないと聞きました。この問題を軽減するにはどうしたら良いですか?
Bash にパッチを当てずにこの問題を軽減するための回避策が利用できます。この回避策は、非常に制限された状況下でしかテストを行っていないため、意図されない結果になる可能性があります。この回避策を適用するには、以下を行います。
- bash_ld_preload.c をダウンロードします。
- SHA-256 チェックサムを確認します。
$ sha256sum bash_ld_preload.c
28cb0ab767a95dc2f50a515106f6a9be0f4167f9e5dbc47db9b7788798eef153 bash_ld_preload.c
- 以下をコンパイルします。
$ gcc bash_ld_preload.c -fPIC -shared -Wl,-soname,bash_ld_preload.so.1 -o bash_ld_preload.so
- bash_ld_preload.so を /lib にコピーします。
# cp bash_ld_preload.so /lib/
システム全体にこの回避策を適用する場合:
- /etc/ld.so.preload に以下を追加します。
/lib/bash_ld_preload.so
- 関連するすべてのサービスを再起動するか、システムを再起動します。
ただし、これは非常に危険であることに注意してください。この回避策を、お使いのシステムで攻撃者が利用できる可能性がある特定のサービスにのみ適用することが推奨されます。これは、サービスを開始するスクリプトの LD_PRELOAD 環境変数に bash_ld_preload.so を追加することで実施できます。たとえば、Red Hat Enterprise Linux 6 の httpd の場合は、以下を行います。
- 以下の 2 行を /etc/init.d/httpd, after the #! 行の頭に追加します。
LD_PRELOAD=/lib/bash_ld_preload.so
export LD_PRELOAD
- 次に、httpd を再起動します。
# service httpd restart
所有するシステムがこの脆弱性の影響を受ける可能性があります。どうすれば良いですか?
Red Hat サポートケースを作成するか、電話にてサポートチームにご連絡ください。
このアップデートをインストールした後、システムまたはサービスを再起動する必要はありますか?
はい。新しい Bash パッケージを使用するには、システムを再起動してください。
他のシェルは、この問題の影響を受けますか?
Red Hat は、この問題について、他のシェルをテストしました。Bash に見られた動作を再現することはできませんでした。今後、他のシェルで同様の問題が見つかった場合は、必要に応じてアップデートをリリースします。
この問題を緩和する方法はありませんか?
回避策: mod_security の使用
以下の mod_security ルールを使用すると、関数定義として Bash に解釈される可能性のあるデータを含む HTTP 要求が設定されている場合は、その要求を拒否できます。これらを使用し、上述した CGI アプリケーションへの攻撃など、web サービスへの攻撃を防ぐことができます。
Request Header 値:
SecRule REQUEST_HEADERS "^\(\) {" "phase:1,deny,id:1000000,t:urlDecode,status:400,log,msg:'CVE-2014-6271 - Bash Attack'"
SERVER_PROTOCOL 値:
SecRule REQUEST_LINE "\(\) {" "phase:1,deny,id:1000001,status:400,log,msg:'CVE-2014-6271 - Bash Attack'"
GET/POST 値:
SecRule ARGS_NAMES "^\(\) {" "phase:2,deny,id:1000002,t:urlDecode,t:urlDecodeUni,status:400,log,msg:'CVE-2014-6271 - Bash Attack'"
GET/POST 値:
SecRule ARGS "^\(\) {" "phase:2,deny,id:1000003,t:urlDecode,t:urlDecodeUni,status:400,log,msg:'CVE-2014-6271 - Bash Attack'"
アップロードのファイル名:
SecRule FILES_NAMES "^\(\) {" "phase:2,deny,id:1000004,t:urlDecode,t:urlDecodeUni,status:400,log,msg:'CVE-2014-6271 - Bash Attack'"
これらは誤検出する場合もありますが、その可能性が高くない状況でログを取り監視することができます。ただし、ログファイルは膨大な量になる可能性もあるため、ログの記録が難しい場合があるかもしれません。
回避策: IPTables の使用
IPTables 文字列の一致を使用した場合の注意:
iptables using -m string --hex-string '|28 29 20 7B|'
攻撃者は容易に 1 パケットにつき 1 文字または 2 文字を送信でき、この署名を簡単に回避できるため、この方法は推奨されません。ただし、これにより、この脆弱性に対して自動化された攻撃の概要を参照できる可能性があります。