MOPB-10-2007:PHP php_binary Session Deserialization Information Leak Vulnerability

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

“the Month of PHP Bugs”をできるだけ多くの方が読めるように、Stefanさんの承諾を得て日本語訳を公開しています。このブログの「the Month of PHP Bugs」カテゴリでMOPBの翻訳ページを一覧できます。分かりやすいように意訳できる部分は意訳します。厳密に原文の通り訳していないので正確性を重視される方は原文をご覧ください。

■クレジット
発見者:Stefan Esser
攻撃コード:Stefan Esser

■PoCまたは攻撃コード
MOPB-10-2007.php
http://www.php-security.org/MOPB/code/MOPB-10-2007.php

■リファレンス
なし

■サマリ
PHPのセッションモジュールにはヒープ情報がリークする脆弱性を持つ’php_binary’と呼ばれるシリアライゼーションハンドラが含まれています。このセキュリティホールはバウンダリ(境界)チェックが無いため発生し、シリアライズされたデータから126バイトまでをセッション変数の配列キーのリークを許しします。

この脆弱性はヒープに保存された重要な情報、オフセットやヒープのカナリア値(更なる攻撃に有用)、などへのアクセスを許す事につながります。

■影響するバージョン
PHP 4.4.5未満、PHP 5.2.1未満

■詳細情報
php_binaryセッションデータフォーマットはシリアライズされた変数毎にエントリを持っています。すべてのエントリは変数名の長さを含む1バイトのフィールドから始まり、変数名とシリアライズされた値と続きます。

残念ながら、名前の抽出はバウンダリチェックなしに行われます。大きすぎる長さを設定するとバッファを超えて名前を読み込み、これが最大126バイトまでのヒープ情報の漏えいを可能にします。

■PoC、攻撃コードまたは再現手順
添付のPoC攻撃コードは126バイトまでのヒープデータをPHP変数に読み込み16進数ダンプを表示します。

■備考
この脆弱性は、他の多くの脆弱性と同じように、MOPBがはじまる前にPHPプロジェクトに通知していた問題です。最新版では脆弱性は修正されています。この問題を修正する為には少なくともPHP 4.4.5またはPHP 5.2.1にアップグレードする事をお勧めします。

投稿者: yohgaki