特殊な細工がされた環境変数による Bash コードインジェクションの脆弱性 (CVE-2014-6271、CVE-2014-7169)

Updated -

Red Hat は、Red Hat 製品に同梱される Bash パッケージのすべてのバージョンに影響する脆弱性について報告を受けました。この脆弱性 CVE-2014-6271 を使用して恣意的なコードを実行できます。非認証のリモートの攻撃者が特定のサービスおよびアプリケーションに環境変数を与えることができ、問題を悪用できます。

アップデート: 2014/09/30 18:00 UTC

新しい不具合が 2 つ報告されました。この不具合は、現在利用できる Bash パッケージによって緩和されます。詳細については、よくある質問を参照してください。

アップデート: 2014/09/29 5:00 UTC

この脆弱性を攻撃するマルウェアが配布されています。詳細については、こちらのナレッジを参照してください。

アップデート: 2014/09/26 5:15 UTC

Red Hat は、CVE-2014-6271 に対応するパッチが不十分であること認識しています。攻撃者は、特定の状況下で脆弱なシステムで実行する恣意的なコマンドを含む特別に作られた環境変数を提供できます。この新しい問題は CVE-2014-7169 で対応しています。

Red Hat Enterprise Linux 4、5、6、および 7、Red Hat Enterprise Linux 5.6 Long Life、Red Hat Enterprise Linux 5.9 Extended Update Support、Red Hat Enterprise Linux 6.2 Advanced Update Support、Red Hat Enterprise Linux 6.4 Extended Update Support、そして Shift_JIS for Red Hat Enterprise Linux 5 および 6 のサブスクリプションをお持ちの場合は、CVE-2014-7169 に対応した bash パッケージのアップデート版をご利用いただけます。また、Resolution for Bash Code Injection Vulnerability via Specially Crafted Environment Variables (CVE-2014-6271, CVE-2014-7169) in Red Hat Enterprise Linux も併せて参照してください。

診断手順

Shellshock 脆弱性に対応するパッチがシステムに適用されているかどうかを確認するために、Red Hat Access Labs でスクリプトが提供されています。また、以下のコマンドを実行すると、使用している Bash のバージョンを手動でテストできます。

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

使用している Bash のバージョンに脆弱性が含まれる場合は、このコマンドを実行すると vulnerable という文字だけが表示されます。この問題を修正するパッチを使用すると、Bash 関数終了後にいかなるコードも許可しません。

このコマンドを実行した時に表示される警告メッセージの内容は、 使用している Bash のバージョンによって異なります。修正されていないバージョンをお使いの場合は、以下のように出力されます。

$ env 'x=() { :;}; echo vulnerable' 'BASH_FUNC_x()=() { :;}; echo vulnerable' bash -c "echo test"
vulnerable
bash:BASH_FUNC_x(): line 0: syntax error near unexpected token `)'
bash:BASH_FUNC_x(): line 0:`BASH_FUNC_x() () { :;}; echo vulnerable'
bash: error importing function definition for `BASH_FUNC_x'
test

オリジナルの CVE-2014-6271 修正だけを適用した場合は、以下の出力が生成されます。

$ env 'x=() { :;}; echo vulnerable' 'BASH_FUNC_x()=() { :;}; echo vulnerable' bash -c "echo test"
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
bash: error importing function definition for `BASH_FUNC_x()'
test

RHSA-2014:1306RHSA-2014:1311、および RHSA-2014:1312 で提供されている追加の修正パッチをインストールすると、以下のような結果が出力されます。

$ env 'x=() { :;}; echo vulnerable' 'BASH_FUNC_x()=() { :;}; echo vulnerable' bash -c "echo test"
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `BASH_FUNC_x'
test

出力内容は、下記の「この問題は、システムにどのような影響を与えますか?」セクションで説明されている関数処理が変更されているため異なります。

CVE-2014-7169 の修正を適用すると、ファイル作成問題からシステムを保護します。以下のコマンドを実行すると、お使いの Bash が CVE-2014-7169 問題の影響を受けるかどうかをテストできます。

$ cd /tmp; rm -f /tmp/echo; env 'x=() { (a)=>\' bash -c "echo date"; cat /tmp/echo
bash: x: line 1: syntax error near unexpected token `='
bash: x: line 1:`'
bash: error importing function definition for `x'
Fri Sep 26 11:49:58 GMT 2014

システムが脆弱な状態だと画面に日時が表示され、/tmp/echo ファイルが作成されます。

システムに脆弱性問題が含まれない場合は、以下のような結果が出力されます。

$ cd /tmp; rm -f /tmp/echo; env 'x=() { (a)=>\' bash -c "echo date"; cat /tmp/echo
date
cat:/tmp/echo:No such file or directory

システムが脆弱な状態の場合は、以下のコマンドを実行して bash パッケージの最新バージョンをアップデートすると、この問題を修正できます。

# yum update bash

この問題は、システムにどのような影響を与えますか?

この問題は、Bash シェルを使用し、環境変数の値を解析するすべての製品に影響します。この問題は、アプリケーションが Bash を呼び出す手段は数多く存在するため、特に危険です。アプリケーションが他のバイナリを実行する場合は、その実行のために頻繁に Bash が呼び出されます。これは、Bash シェルの一般的な使用方法であるためこの問題は非常に危険であり、その認識で対応する必要があります。

この問題に対応するアップデートとして一覧に挙げられているバージョン以前のバージョンはすべて、ある程度影響を受けます。

詳細については、修正内容を記載した各記事を参照してください。

CVE-2014-7169 のパッチを適用すると、Bash が環境変数を評価する方法が変更します。Bash 関数を環境変数として直接作成するアプリケーションに、これらの変更を認識させる必要があります。従来、関数は同じ名前の環境変数に保存する必要がありました。たとえば、関数 "compute" は、"compute" という名前の環境変数に保存されます。CVE-2014-7169 のパッチを適用すると、名前は "BASH_FUNC_compute()" となります。その結果、"BASH_FUNC_compute()=() { }" のように、環境文字列で 2 つの括弧が使用されます。

Bash で作成される関数は、"export -f" でエクスポートされる場合でも、変更する必要はありません。Bash は、エクスポート時に適切な命名を透過的に適用し、関数定義のインポート時にプロセスを無効にします。

このような環境変数を作成するサービスは、新しいバージョンの Bash を使用するように再起動する必要があります。ただし、この方法は、Red Hat Enterprise Linux のすべてのバージョンで提供されているパッケージには使用されていません。

影響を受ける製品:

製品/チャンネル 修正されたパッケージ 修正内容
Red Hat Enterprise Linux 7 bash-4.2.45-5.el7_0.4 Red Hat Enterprise Linux
Red Hat Enterprise Linux 6 bash-4.1.2-15.el6_5.2 Red Hat Enterprise Linux
bash-4.1.2-15.el6_5.1.sjis.2 Red Hat Enterprise Linux
bash-4.1.2-9.el6_2.2 Red Hat Enterprise Linux 6.2 AUS
bash-4.1.2-15.el6_4.2 Red Hat Enterprise Linux 6.4 EUS
Red Hat Enterprise Linux 5 bash-3.2-33.el5_11.4 Red Hat Enterprise Linux
bash-3.2-33.el5_11.1.sjis.2 Red Hat Enterprise Linux
bash-3.2-24.el5_6.2 Red Hat Enterprise Linux 5.6 LL
bash-3.2-32.el5_9.3 Red Hat Enterprise Linux 5.9 EUS
Red Hat Enterprise Linux 4 bash-3.0-27.el4.4 Red Hat Enterprise Linux 4

一般的な設定例:

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 および CVE-2014-7169 に関する追加情報は、https://securityblog.redhat.com/2014/09/26/frequently-asked-questions-about-the-shellshock-bash-flaws/ を参照してください。

RHEL 4 Standard または Premium エンタイトルメントをお持ちで ELS をお持ちでないお客様に関する補足情報については、https://access.redhat.com/discussions/1211573 を参照してください。

CVE が 6 つに別れているのはなぜですか?


Bash に関する最初の不具合は CVE-2014-6271 で対応しています。この問題が公開された直後に、最初の修正で阻止できない同様の不具合が発見され、CVE-2014-7169 で対応しています。その後、Red Hat Product Security の Researcher である Florian Weimer がさらなる問題を発見し、CVE-2014-7186 および CVE-2014-7187 で対応しています。その後、不具合が 2 つ報告されました。その詳細は現在公開されていませんが、CVE-2014-6277 および CVE-2014-6278 で対応しています。最初の 4 つの不具合は、現在利用できる最新の Bash パッケージで修正されましたが、残りの 2 つは緩和しかされません。この (英語版の) 記事が作成された時点 (2014/09/30) では、これらの Bash パッケージが攻撃を受けるセキュリティの不具合は報告されていません。これらの不具合の最新情報については、CVE ページを参照してください。

所有するシステムがこの脆弱性の影響を受ける可能性があります。どうすれば良いですか?

パッチを当てた後も、このナレッジに記載されている診断手順を実行してシステムが脆弱な状態であると返される場合、またはシステムが脆弱であると思われる場合は、Red Hat サポートケースを作成するか、電話にてサポートチームにご連絡ください。

CVE-2014-6271 および CVE-2014-7169 のアップデートをインストールした後、システムまたはサービスを再起動する必要はありますか?

エクスポートされた Bash 機能を使用している場合は、影響を受けるサービスを再起動することが推奨されます。影響を受けるインタラクティブなユーザーが再ログインしたり、画面または tmux セッションを再起動したりする必要があるかもしれません。

これらの問題を修正するために提供された Bash アップデートは、この環境でエクスポートされた関数の名前を変更します。古いバージョンの Bash が関数をエクスポートしている場合、その関数はアップデート後に新しく起動した Bash プロセスでは認識されないため、定義されていない状態になります。サービスを再起動すると、新しいバージョンの Bashは、期待した名前で関数をエクスポートするため、再度表示されます。

どのサービスを再起動する必要があるか (またはどのユーザーの再ログインが必要か) を特定するには、アップデート後に以下のコマンドを実行してください。

$ grep -l -z '[^)]=() {' /proc/[1-9]*/environ | cut -d/ -f3

このコマンドから返される PID は、以前エクスポートされた関数定義を使用するプロセスに属しています。したがって、これらのプロセスは再起動する必要があります。特定の PID を開始したサービスを特定するには、再起動が必要になります。 Red Hat Enterprise Linux 7 で、以下のコマンドを実行します。

$ systemctl status <PID>

Red Hat Enterprise Linux 6 以前の場合は、pstree -p または ps -axuf コマンドを実行して、特定の PID を探します。

他のシェルは、この問題の影響を受けますか?

Red Hat は、この問題について、他のシェルをテストしました。Bash に見られた動作を再現することはできませんでした。今後、他のシェルで同様の問題が見つかった場合は、必要に応じてアップデートをリリースします。

この問題を緩和する方法はありませんか?

アップデートされたパッケージをインストールできない場合は、潜在的な緩和方法の詳細について、Mitigating the shellshock vulnerability (CVE-2014-6271 and CVE-2014-7169) を参照してください。最善の方法は、現在報告されているすべての脆弱性に対処できるため、利用できる最新のパッケージ (上述) をインストールすることです。

Red Hat web サイトの脆弱性に関する報告

お客様にサービスを提供している以下の Red Hat web サイトはアップデートされたことが確認されました。

  • www.redhat.com
  • access.redhat.com (Red Hat カスタマーポータル)
  • rhn.redhat.com (Red Hat Network)

Red Hat は Salesforce を使用してお客様にサービスを提供しています。Salesforce 社は、この問題は Salesforce サービスには影響を受けないことを確認したことを発表しています。

Red Hat は、上述の web サイトに対してこの脆弱性の攻撃をしかけてみましたが成功しませんでした。引き続き、弊社のシステムを監視して、機密性、インテグリティおよび可用性について確認していきます。

Was this helpful?

We appreciate your feedback. Leave a comment if you would like to provide more detail.
It looks like we have some work to do. Leave a comment to let us know how we could improve.