
CVE-2026-65650 用 PoC - Elgg アバターアップロード DoS
Elgg のアバターアップロード機能において、画像寸法に上限がないことにより GD メモリ枯渇を引き起こす認証済みサービス妨害(DoS)です。
< 6.3.5 (6.x 系)、および 7.0.0-rc.1 – < 7.0.0 (7.0 リリース候補)6.3.5, 7.0.0actions/avatar/upload.php は、アップロードされた画像を寸法・サイズ・メモリのガードなしでそのまま saveIconFromUploadedFile() に渡します:
$avatar = elgg_get_uploaded_file('avatar', false);
// No dimension check.
// No size check.
// No ratio check.
if (!$owner->saveIconFromUploadedFile('avatar')) {
return elgg_error_response(elgg_echo('avatar:resize:fail'));
}
PHP の GD ライブラリは、画像のディスク上のファイルサイズではなく、デコード後のピクセル寸法に基づいてメモリを割り当てます。そのため、極端な寸法を持つ小さなファイルは、GD がそれに触れた瞬間に巨大なメモリ割り当てを強制されます。
ステップ 1 — python3 CVE-2026-65650.py
ステップ 2 — 任意の登録ユーザーとしてログインします。
ステップ 3 — プロフィール > アバターの編集 に移動し、CVE-2026-65650.png をアップロードします。
PoC を実行すると、ファイル自体のディスク容量は約 308 KB であるにもかかわらず、GD は画像のデコードに約 286 MB、リサイズにさらに約 572 MB を割り当てることを強制されます。14 GB / スワップなしのテスト環境では、1 回のアップロードで利用可能メモリが約 1.3 GB まで低下しました。メモリに制約のある環境では、これだけで PHP-FPM ワーカーに対するカーネルの OOM キルが発生し、サイトは自己復旧なしに停止する可能性があります。
単一の低権限アカウントからの単一リクエストで、このメモリ消費を引き起こすのに十分です。複数アカウントからの繰り返しまたは同時リクエストはその効果を増幅し、OOM が発生する可能性を高めます。
Elgg 7.0.0 で修正され、6.3.5 にバックポートされました。