nginx の ngx_http_parse_request_line() 関数の実装に起因するアクセス制限回避の脆弱性(Scan Tech Report)
nginx の ngx_http_parse_request_line() 関数には、空白文字を適切に処理しない問題が存在します。
脆弱性と脅威
エクスプロイト
nginx の ngx_http_parse_request_line() 関数には、空白文字を適切に処理しない問題が存在します。
悪意のあるリモートの第三者に利用された場合、アクセス制限を回避し、本来アクセスできないコンテンツに不正アクセスされる可能性があります。
この脆弱性は、昨年の 2013 年 11 月下旬に nginx 社によって修正された少し古い問題となりますが、脆弱性を悪用された場合の影響度が高いため、影響を受けるバージョンの nginx を利用するユーザは可能な限り以下に記載する対策を実施することを推奨します。
2.深刻度(CVSS)
7.5
http://nvd.nist.gov/cvss.cfm?version=2&name=CVE-2013-4547&vector=%28AV:N/AC:L/AU:N/C:P/I:P/A:P%29
3.影響を受けるソフトウェア
nginx 0.8.41 - 1.4.3
nginx 1.5.0 - 1.5.6
※1 影響を受けるバージョンの nginx パッケージが含まれる openSUSE やDebian などの Linux ディストリビューションにおいても、この脆弱性の影響を受けます。
4.解説
Web サーバソフトウェアである nginx の ngx_http_parse.c には、HTTP リクエストラインを扱う ngx_http_parse_request_line() 関数が実装されています。
nginx には、ngx_http_parse_request_line() 関数における、HTTP リクエストに含まれた空白文字の取り扱いに不備があります。
このため、ディレクトリ名またファイル名の末尾に空白文字が含まれた不正なリクエストを処理した場合に、コンテンツに対してアクセス制限を適切に適用しない問題が存在します。
この脆弱性を利用することで、リモートの攻撃者は nginx における特定コンテンツへのアクセス制限を回避し、保護されたコンテンツに不正にアクセスすることが可能となります。
なお、この脆弱性を悪用するためには、ファイルアップロード機能などを利用して、標的 nginx に空白文字を含むディレクトリまたはファイルをアップロードする必要があります。
また、Windows の nginx で PHP を利用する環境で、この脆弱性を悪用された場合、任意の PHP コードが実行される可能性があることが示唆※2 されています。
※2 http://sec.baidu.com/index.php?research/detail/id/19
5.対策
以下の Web サイトを参考に nginx 1.4.4/1.5.7 以降を入手しアップデートすることで、この脆弱性を解消することが可能です。
nginx: download
http://nginx.org/en/download.html
あるいは、下記の修正パッチを入手し適用することでも、脆弱性を解消することが可能です。
nginx security advisories: The patch
http://nginx.org/download/patch.2013.space.txt
また、Linux ディストリビューションにおいては、それぞれのベンダが提供するセキュリティアドバイザリを参考に、適切なパッケージを入手しアップデートすることで、この脆弱性を解消することが可能です。
Debian
DSA-2802-1
https://www.debian.org/security/2013/dsa-2802.ja.html
openSUSE
openSUSE-SU-2013:1745-1
http://lists.opensuse.org/opensuse-updates/2013-11/msg00084.html
6.ソースコード
(Web非公開)
(執筆:株式会社ラック サイバー・グリッド研究所)
※Web非公開該当コンテンツ閲覧をご希望の方はScan Tech Reportにご登録(有料)下さい。
Scan Tech Report
http://scan.netsecurity.ne.jp/archives/51916302.html
《株式会社ラック デジタルペンテスト部》