エンティティ化された文字による任意コード実行

(Last Updated On: 2018年8月13日)

小泉さんが発見され昨年末に公開された脆弱性です。詳しくはアドバイザリをご覧いただくとして概要を解説します。

CVE
http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2008-5557

アドバイザリ
[Full-disclosure] CVE-2008-5557 – PHP mbstring buffer overflow vulnerability

かなり特殊な設定といえる状況で問題となるようですが、ちょうどgihyo.jpで文字エンコーディングに関連したセキュリティ問題を解説しているので紹介します。

http://gihyo.jp/dev/serial/01/php-security/0019
http://gihyo.jp/dev/serial/01/php-security/0020

CVE-2008-5557では

Impact
CVSS Severity (version 2.0):
CVSS v2 Base Score:10.0 (HIGH) (AV:N/AC:L/Au:N/C:C/I:C/A:C) (legend)
Impact Subscore: 10.0
Exploitability Subscore: 10.0
CVSS Version 2 Metrics:
Access Vector: Network exploitable
Access Complexity: Low
Authentication: Not required to exploit

となっていてかなり危険なように見えますが、この問題を攻撃する為に必要な前提条件はかなり限定的です。

小泉さんのアドバイザリによれば、影響を受ける関数は以下の関数です。

– mb_convert_encoding()
– mb_check_encoding()
– mb_convert_variables()
– mb_parse_str()

リモートから簡単攻撃するためには、php.iniなどで以下のような設定が行われている必要があります。

mbstring.encoding_translation=on
mbstring.http_input=HTML-ENTITIES
mbstring.internal_encoding=UTF-8

通常、入力文字エンコーディングにHTML-ENTITIESを設定することはあり得ないのでmbstringを組み込んでいるだけで攻撃されることはまずありません。

gihyo.jpの記事を書いたときは、まだこの脆弱性を知りませんでしたが「エンコーディングと名前が付くものには脆弱性があると考え他方が安全」と書いています。ちょうどタイムリーに自分でも予想していなかったHTML-ENTITIESエンコーディングが攻撃に利用できる脆弱性が公開されたので少し変な気分です。

投稿者: yohgaki