GNU Bash における OS コマンドインジェクションの脆弱性(Shellshock)(Scan Tech Report)
GNU Bash(Ver 4.3 及びそれ以前)には、外部からの入力が環境変数に設定されるような環境においてリモートから任意のコマンドを実行される脆弱性が報告されています。
脆弱性と脅威
エクスプロイト
GNU Bash(Ver 4.3 及びそれ以前)には、外部からの入力が環境変数に設定されるような環境においてリモートから任意のコマンドを実行される脆弱性が報告されています(CVE-2014-6271,CVE-2014-6278)。
本脆弱性は、「Shellshock」と呼ばれており、既に攻撃手法が公開されていることから被害も数多く報告されています。影響も広範囲に及ぶため、可能な限り下記対策の実施を推奨します。
2.深刻度(CVSS)
10.0
http://jvndb.jvn.jp/ja/contents/2014/JVNDB-2014-004410.html
3.影響を受けるソフトウェア
以下のバージョンが本脆弱性の影響を受けます。
- Bash 4.3 Patch 28 およびそれ以前
- Bash 4.2 Patch 51 およびそれ以前
- Bash 4.1 Patch 15 およびそれ以前
- Bash 4.0 Patch 42 およびそれ以前
- Bash 3.2 Patch 55 およびそれ以前
- Bash 3.1 Patch 21 およびそれ以前
- Bash 3.0 Patch 20 およびそれ以前
※Debian, Fedora などの Linux ディストリビューションに含まれる Bash パッケージについてもこの脆弱性の影響を受けます。
4.解説
GNU Bash は、様々な機器(Linux, BSD, Mac OS X を含むUNIX系OS)や、組み込み機器などで利用されています。
GNU Bashには、新しくBashのインスタンスが生成された際に、環境変数に記述されたシェル関数の定義を読み込み、設定する機能が存在します。この環境変数の読み込み処理の際、特定文字列が入っていると、それに続く文字列をコードとして扱ってしまう問題が存在します。
一見影響はローカル環境に止まりそうですが、CGI、SMTP、DHCP等のサービスでは、内部でOSコマンドを実行する際、外部からの入力が環境変数へと引き渡されるためリモートからでも任意のOSコマンドの実行が可能となります。
公開されているExploitでは、任意のコード実行が可能な脆弱性としてCVE-2014-6271とCVE-2014-6278、2つの脆弱性が利用されています。
Shellshockとして最初に報告されたCVE-2014-6271では、環境変数にシェル関数の定義に続き、";"が入っている場合、その後の文字列がOSコマンドとして処理されてしまうという問題点があります。
その後、この問題点に対しベンダーは修正パッチを公開しましたが、修正が不十分であり、未だコード実行が可能であることがセキュリティ研究者Michal Zalewskiにより報告されました(CVE-2014-6278)。※1
このCVE-2014-6278では、環境変数にシェル関数の定義に続き、">_[$($())]"のような文字列があった場合、ネストされた"$($())"という文字列により環境変数の読み込みが適切に行われず、その後の文字列をOSコマンドとして処理してしまう問題点が報告されています。この問題点に対しても、ベンダーから追加で修正パッチが公開されています。
最終的に、関連するCVEは6つに渡り(CVE-2014-6271,CVE-2014-7169,CVE-2014-7186,CVE-2014-7187,CVE-2014-6277,CVE-2014-6278)、根本的な脆弱性の解消のためには全ての問題点が修正済みのパッチバージョンを適用する必要があります。修正済みバージョンについては下記対策を確認してください。
※1 http://lcamtuf.blogspot.com/2014/10/bash-bug-how-we-finally-cracked.html
また、NASデバイス「QNAP」における本脆弱性を悪用するワームが出現しており、国内でも本脆弱性を対象としたと推測される攻撃が確認されています。今後もShellshockを使用する攻撃は継続すると考えられますので、引き続き警戒が必要です。※2
※2 https://www.jpcert.or.jp/at/2014/at140055.txt
5.対策
以下のWebサイトより、次に示す修正済みバージョン以降を入手しアップデートする、あるいは修正パッチを適用することでこの脆弱性を解消することが可能です。
修正済みのバージョンは、以下の通りです。
- Bash 4.3 Patch 29
- Bash 4.2 Patch 52
- Bash 4.1 Patch 16
- Bash 4.0 Patch 43
- Bash 3.2 Patch 56
- Bash 3.1 Patch 22
- Bash 3.0 Patch 21
GNU Bash Patch
http://ftp.gnu.org/gnu/bash/
また、 Linux ディストリビューションにおいては、それぞれのベンダが提供するセキュリティアドバイザリを参考に、適切なパッケージを入手しアップデートすることで、この脆弱性を解消することが可能です。
Red Hat
https://access.redhat.com/ja/articles/1210893
CentOS
http://wiki.centos.org/Security/Shellshock
Ubuntu
http://www.ubuntu.com/usn/usn-2380-1/
6.ソースコード
(Web非公開)
(執筆:株式会社ラック サイバー・グリッド研究所)
※Web非公開該当コンテンツ閲覧をご希望の方はScan Tech Reportにご登録(有料)下さい。
Scan Tech Report
http://scan.netsecurity.ne.jp/archives/51916302.html
《株式会社ラック デジタルペンテスト部》