
CVE-2026-109618 / CVE-2026-109619 監査: セッションポイズニングからコマンド実行までの再現に成功。BGCTX OOM の前提条件を再現。主張されていた progress-array UAF は標準ビルドでは再現せず。
「php2shell」の主張の監査、および動作するローカルPoC 1件。
中文 · PHP 8.5.4 · ラボ専用
MITRE:
CVE_RECORD_DNE· NVD: レコードなし · php.net: 事前告知のみ。 本リポジトリは技術的主張を監査するものであり、識別子を確認するものではありません。
| 質問 | 回答 |
|---|---|
| シェルを取得できるか? | ✅ ローカルでは可能 — unserialize() シンク + __destruct ガジェットがあれば |
| それがCVEそのものか? | ⚠️ おそらく違う — このCVEはBGコンテキストの孤児(注08)と思われる |
| 事前認証で可能か? | ❌ 事前認証経路は我々のテストではARM / クラッシュで止まる |
| 流出したバンドルは正しいか? | ❌ post_bytes_processed UAFは再現しない |
multipart POST ──► php_hash_environment() ← RINIT より前
│
├─ serialize encode ──► OOM ──► BG(serialize) 孤児化 (64 B)
└─ unserialize decode ──► OOM ──► BG(unserialize) 孤児化 (8208 B)
│
▼
SAPI は生存するか? ── はい ──► 次のリクエストが解放済みコンテキストを再利用
│ │
いいえ ├─ Bug S: クラッシュ / リーク
▼ └─ Bug U: RCE クラス
DoS のみ
我々のPoCが使用する別のバグ:
var_destroy() ──► 後方参照チャンクを解放 ──► dtor 走査 (serialize_lock なし)
└─ __destruct ──► 内部 unserialize ──► R:N が解放済みチャンクを読む
└─ 偽クロージャ ──► zif_system(cmd)
php exploit/var_destroy_uaf_rce.php "id > /tmp/proof"
cat /tmp/proof # uid=... gid=...
必要なもの: 脆弱なPHP(8.5.4で検証済み)· 攻撃者データに対する unserialize() · __destruct クラス · Linux /proc/self/mem · nm から取得したビルドごとのオフセット。
| 主張 | 結果 |
|---|---|
流出バンドル: post_bytes_processed UAF | ❌ 再現せず(Z_TRY_ADDREF) |
Bug S — BG(serialize) 孤児 | ⚠️ ASAN下でUAF 3/3 · armで再現 · RCEなし |
Bug U — BG(unserialize) 孤児 | ⚠️ armで再現 · kill / system は再現せず |
| var_destroy UAF → RCE | ✅ 動作、10/10、自己位置特定 |
セッションポイズニング → include | ✅ 再現(既存の手法) |
ハンドラ不一致 → __destruct | ✅ 再現(ガジェットクラスが必要) |
| デモバイナリのオフセット | ✅ 8.5.4-0ubuntu1.3 と一致(delta 0xbe3f0) |
| パス | 内容 |
|---|---|
exploit/var_destroy_uaf_rce.php | 自己位置特定UAF → RCE PoC |
analysis/01-05 | ライフタイム · アブレーション · バージョン · 流出バンドル · 到達可能性 |
analysis/06 | BG(serialize) 経路 + ASANレシート |
analysis/07 | セッションポイズニング → コマンド実行 |
analysis/08 | BGコンテキスト孤児(再アップ版パッケージ) |
analysis/09 | var_destroy UAF → RCE(オフセット、自己位置特定) |
evidence/ | ASANトレース · OOMログ · バイナリオフセット · 実行記録 |
lab/ | ビルドスクリプト · トリガー · マトリクス · アブレーション |
PROVENANCE.md | 成果物URL · 日付 · ハッシュ |
ローカルビルド、ローカルのApache / php-fpm / Dockerラボ、および記載のUbuntuパッケージ。PoCはPHPプロセスのユーザーとして実行され、ガジェットの前提条件は現実のものです。