4

Bash 脆弱性 – ShellShock- (2) CVE-2014-6271 / CVE-2014-7169 は何が危険で問題なのかを検証してみました

こんにちは、グローバルソリューション事業部で運用等を行っている宇野と申します。

 

先に投稿された「Bash 脆弱性(1) CVE-2014-6271 / CVE-2014-7169 絶賛対応中です」の続きとして

何が危険なのかを検証してみましたので、ご参照ください。

(追記)本検証はCVE-2014-6271に関する検証です

 

はじめに

まず、今回の問題点や危険な点を簡単に挙げると、、

・リモートで任意のコマンドが実行できてしまう可能性がある。
・Bash は linux 等のシステムで必ずインストールされているパッケージなので、影響が大きい。

 

ということでしょうか。その内容を紐解いています。

 

まずは、数ある情報元からの例です(以下は Redhat のセキュリティブログ )

Bash specially-crafted environment variables code injection attack

 

とあるコードを環境変数に組み込むと、任意のコマンドが実行できるようです。Bashの環境変数に脆弱性があるということです。

 

確認事項

環境変数とは何なのでしょうか。

環境変数とは、特定の値をその環境(ユーザアカウントやサーバ)で上で変数として定義(代入)して利用する引数のことです。

よくある例としては、以下のようなものがあります。

  • LANG(ロケール。日本語環境や英語環境などを定義する)
  • HOME(ホームディレクトリ)

 

<Wikipediaより>

http://ja.wikipedia.org/wiki/環境変数

 

検証

では、検証を開始してみましょう。

Redhatによると。。以下の方法で可能とのことでした。

 

コード例)

 

コマンドの意味としては、、envコマンドが 環境変数 x を 「'() { :;}; echo vulnerable’」 として指定し、「bash -c “echo this is a test”」を実行するというコマンドです。
※echo は文字を出力表示するコマンドです。

 

上記のコマンドを実行した場合、問題ない環境であれば(もしくは本来であれば)「echo this is a test」が実行され、「this is a test」は出力表示されるのみで、環境変数 x の内容「'() { :;}; echo vulnerable’」 は文字列として読み込まれるだけなので、環境変数 x はエラーが表示されるか、何も実行されません。

 

では、脆弱性が含まれるbash環境で実行した場合は、どうなるのでしょうか。

 

脆弱性が含まれるbash環境で実行した場合の実行例)

 

「echo vulnerable」が実行されていますね。おかしいですね。

脆弱性対策済みの bash環境で実行した場合は、どうなるのでしょうか。

 

脆弱性対策済みのbash環境で実行した場合の実行例)
※CentOS6.5 bash-4.1.2-15.el6_5.1.x86_64 の場合

 

「echo vulnerable」は実行されません。

なお、上記は env コマンドを介して実行しておりますが、引数を定義しても同じようにコマンドが実行できてしまいます。

 

本来であれば、シングルクオートで囲まれている「() { :;}; echo vulnerable」は文字として代入されるだけなのですが(もしくはエラーとなる)ですが、「echo vulnerable」コマンドが実行されています。

 

では、何が問題なのでしょうか。(大事なことなので2回言いました。)

・リモートで任意のコマンドが実行できてしまう可能性がある。。
・Bash は linux 等のシステムで必ずインストールされているパッケージなので、影響が大きい。

 

想定例としては、ApacheなどのWebサーバ上にある cgi 等へ、問題のコードを環境変数として引き渡すと、任意のコマンドが実行できてしまうことでしょうか。

 

例として。。
サーバ側(192.168.1.212)に以下のcgiを設置します。

 

上記 cgi へアクセスすると、「test」という文字が表示されるだけのプログラムです。

実行例)

 

このサイトに環境変数(この場合はHTTP_USER_AGENT)を渡してアクセスすると、

 

脆弱性が含まれるbash環境で実行した場合の実行例)

 

/bin/uname -a が実行されました。。危険ですね。

対策済みのサーバではどうでしょうか。

 

脆弱性対策済みのbash環境で実行した場合の実行例)

 

/bin/uname -a は実行されませんでした。安心ですね。

 

対応策

対応策は、Bashをアップデートすることで対策が可能です。
実行方法は以下の通り。

サーバ再起動等は発生しませんので、サービスへの影響は少ないと思います。

確認したところ、CentOS5~7、Redhat5~7はupdate可能ですので、早めの対応をお勧めいたします。(7も可能なので追記しました2014/09/25)

 

 

<参考>

検証にあたり、ワルブリックス株式会社さんのblogが参考になりました。ありがとうございます!
BASHの脆弱性でCGIスクリプトにアレさせてみました

 

Share on LinkedIn
LINEで送る
Pocket

uno

uno

cobaltサーバやbluequartz大好き、bash大好きなclaraの中の人です。