swornim619/CVE-2026-65650
GitHub: swornim619/CVE-2026-65650
该项目是 Elgg 头像上传功能因缺少图像尺寸校验而导致的已认证拒绝服务漏洞的概念验证工具。
Stars: 0 | Forks: 0
# CVE-2026-65650 — PoC:Elgg 头像上传的已认证 DoS
由于 Elgg 的头像上传功能未限制图像尺寸,导致了已认证的拒绝服务攻击,进而造成 GD 内存耗尽。
- **受影响版本:** Elgg `< 6.3.5` (6.x 系列) 和 `7.0.0-rc.1 – < 7.0.0` (7.0 候选发布版本)
- **已修复版本:** Elgg `6.3.5`, `7.0.0`
- **CVE:** [CVE-2026-65650](https://www.cve.org/CVERecord?id=CVE-2026-65650)
## 根本原因
`actions/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 — 导航至 **Profile > Edit Avatar** 并上传 `CVE-2026-65650.png`。
## 结果
运行该 PoC 会强制 GD 分配约 286 MB 的内存来解码图像,并额外分配约 572 MB 的内存来调整其大小,尽管该文件在磁盘上仅约为 308 KB。在一台 14 GB 且无 swap 的测试机上,仅一次上传就将可用内存降至约 1.3 GB。在内存受限的部署环境中,这足以触发内核对 PHP-FPM worker 的 OOM kill,从而导致站点宕机且无法自我恢复。
单个低权限账户的单次请求就足以引发这种资源消耗。多个账户的重复或并发请求会加剧这种影响,并增加触发 OOM 的可能性。
## 修复方案
已在 Elgg 7.0.0 中修复,并反向移植至 6.3.5。
- PR:[Elgg/Elgg#15041](https://github.com/Elgg/Elgg/pull/15041)
- Commit:https://github.com/Elgg/Elgg/commit/ab91d59dc2caaa3fdbfe7e9b916fc0cc7e6b323a
标签:CVE, Maven, OpenVAS, PHP, PoC, Web安全, 拒绝服务, 数字签名, 暴力破解, 漏洞验证, 蓝队分析, 逆向工具, 配置错误