piyolog

piyokangoの備忘録です。セキュリティの出来事を中心にまとめています。このサイトはGoogle Analyticsを利用しています。

PHPMailerの脆弱性 CVE-2016-10033/CVE-2016-10045についてまとめてみた

2016年12月25日、PHPのメール送信ライブラリPHPMailerに任意のコード実行可能な脆弱性が確認されたとして情報が公開されました。ここでは脆弱性の関連情報をまとめます。

脆弱性の概要

対象 PHPMailer
CVE CVE-2016-10033
CVE-2016-10045
影響 RCE
重要度 Critical(発見者)
緊急(JVN)
CVSS JPCERT/CC評価
CVSSv3:5.4 (CVSS:3.0/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N)
CVSSv2:5.5 (AV:N/AC:L/Au:S/C:P/I:P/A:N)
PoC インターネット上に公開済
CVE-2016-10033⇒2016/12/26
CVE-2016-10045⇒2016/12/28
発見者/報告者 CVE-2016-10033:Dawid Golunski氏(@dawid_golunski)
CVE-2016-10045:Dawid Golunski氏(@dawid_golunski) / Paul Buonopane氏(@Zenexer)
タイムライン
日時 出来事
2016年12月24日 CVE-2016-10033を修正したPHPMailer 5.2.18が公開
2016年12月25日 Dawid Golunski氏がCVE-2016-10033の脆弱性情報公開
2016年12月26日 マイナーアップデートをしたPHPMailer 5.2.19が公開
2016年12月27日 Dawid Golunski氏が脆弱性の実証コード公開
2016年12月28日 Dawid Golunski氏が修正は不完全でバイパス可能として新たにCVE-2016-10045の脆弱性情報と実証コード公開
CVE-2016-10045を修正したPHPMailer 5.2.20が公開
マイナーアップデートをしたPHPMailer 5.2.21が公開

影響範囲

影響を受けるPHPMailerのバージョン

CVE-2016-10033

  • PHPMailer 5.2.18未満のバージョン

Version 5.2.18 (December 24th 2016)

SECURITY Critical security update for CVE-2016-10033 please update now! Thanks to Dawid Golunski.

https://github.com/PHPMailer/PHPMailer/blob/master/changelog.md

CVE-2016-10045

  • PHPMailer 5.2.20未満のバージョン

Version 5.2.20 (December 28th 2016)

SECURITY Critical security update for CVE-2016-10045 please update now! Thanks to Dawid Golunski and Paul Buonopane (@Zenexer).

https://github.com/PHPMailer/PHPMailer/blob/master/changelog.md
影響を受けるCMS

複数のソフトウェアでPHPMailerが利用されており、有名なものでは次の名前が挙げられている。対象のリストにYiiが含まれていたが既に依存関係にない。またその後更新された情報で、WordpressDrupalJoomla!のコア部分では脆弱性の影響を受けないことが発表された。

脆弱性実証コード(PoC)

実証コードが動作する環境・条件
  • メール送信の際にFROMに信頼できないデータが入る実装がされている。
  • 次の組み合わせで「影響あり」に該当する。
PHPのバージョン PCREの有無 影響の有無
5.2.0未満 あり 影響あり
無し 影響あり
5.2.0以上 あり 影響あり
無し 影響無し
  • Postfix使用時は"-X"オプションは無視されることから少なくとも公開されているExploitは動作しない。

very specific conditionをめぐる経緯

Dawid Golunski氏に先んじてopsxcq氏が公開したPoCでは「非常に特殊な条件が満たされた場合にリモートのサーバーに対し侵害が可能となる」と説明されていた。

PHPMailer before its version 5.2.18 suffer from a vulnerability that could lead to remote code execution (RCE). If a very specific condition is met, a remote server can be compromised. This condition is specified in Vulnerable Code section bellow.

「非常に特殊な条件」は次の内容とされていた。

* PHPMailer < 5.2.18
* Compile PHP without PCRE.
* PHP version must be inferior to 5.2.0.

あるいは$patternselectに「noregex」が指定された場合がこの条件に該当*1する模様。opsxcq氏が公開した脆弱性の検証環境でもその指定が書き加えられている。

一方でその後公開された Dawid Golunski氏のPoCではそのような条件記述は見受けられない。さらにichikawayさんの調査によればPCREが入ったPHP5.2以上の環境で抜けるパターンが存在することを指摘している。

その後、Dawid Golunski氏のPoCではopsxcq氏が記載した「非常に特殊な条件」に係わらず影響を受けることが確認されたためか、これに関する記述がopsxcq氏のReadmeより削除された。Exploitなども更新されている。

更新履歴

  • 2016年12月27日 PM 新規作成
  • 2016年12月28日 AM 続報追記
  • 2016年12月28日 PM CVE-2016-10045に関する情報を追記
  • 2016年12月29日 PM 続報追記

*1:メールアドレスに「@」が存在しているかのみ検証される。