firstlax6t/CVE-2026-36669-FengOffice
GitHub: firstlax6t/CVE-2026-36669-FengOffice
该项目披露了 Feng Office 社区版中 ck_upload_handler.php 的未授权任意文件上传漏洞(CVE-2026-36669),并提供技术分析、PoC 和修复方案。
Stars: 0 | Forks: 0
# 安全公告:CVE-2026-36669
## Feng Office 社区版中的未授权任意文件上传
**Feng Office 社区版 (版本 3.11.13.11)** 中的 `ck_upload_handler.php` 存在一个未授权的任意文件上传漏洞。此缺陷允许未经身份验证的远程攻击者将任意文件(包括恶意的 `.html` 或 `.php` 脚本)上传到可被 Web 访问的目录中。结合缺乏管理员 cookie 保护(`HttpOnly`)的情况,此漏洞可能导致存储型跨站脚本攻击 (XSS) 和管理员会话劫持。
## 漏洞概述
| 指标 | 详情 |
| --- | --- |
| **CVE 编号** | **CVE-2026-36669** |
| **漏洞类型** | 危险类型文件的不受限上传 ([CWE-434](https://cwe.mitre.org/data/definitions/434.html)) |
| **关联弱点** | 关键功能缺失身份验证 ([CWE-306](https://cwe.mitre.org/data/definitions/306.html)) |
| **受影响产品** | Feng Office 社区版 |
| **受影响版本** | 版本 3.11.13.11(及潜在更早版本) |
| **利用状态** | 概念验证已证实 |
| **修复状态** | 未修复(已通知供应商,在标准披露窗口期内未提供补丁) |
## 技术分析
### 1. 缺失身份验证边界 (CWE-306)
端点 `ck_upload_handler.php` 作为一个独立脚本运行。它不加载或继承主应用程序的身份验证中间件或访问控制列表 (ACL)。因此,直接发送给此脚本的任何外部请求都会被视为已通过身份验证。
### 2. 失效的扩展名验证 (CWE-434)
在 `ck_upload_handler.php` 的源代码中,旨在将上传限制为特定图像格式(`.jpg`、`.png`、`.gif`)的服务器端文件验证逻辑(第 21-25 行)已被显式注释掉:
```
// $pattern = "/\.(jpg|png|gif)$/i";
// if (!preg_match($pattern,$_FILES['upload']['name'])) {
// ...
// }
```
由于此正则表达式约束处于未激活状态,文件上传机制会接受任何用户提供的扩展名。
### 3. 可预测的路径与直接执行
该脚本利用 PHP 的 `copy()` 函数将上传的文件直接写入 `/tmp/` 目录,该目录被配置为可通过 Web 访问。
### 4. 下游影响:通过存储型 XSS 进行会话劫持
全局配置文件 `application/config/config.php` 未对会话 cookie 强制执行 `HttpOnly` 标志。当攻击者上传包含客户端脚本块的 `.html` 文件时,任何查看该文件的管理员都将在其当前活动会话的上下文中执行该脚本。这允许攻击者静默提取活动的管理员会话 token。
## 概念验证
要验证此漏洞,请向该端点发送包含无害验证文件(例如 `test.html`)的 multipart POST 请求,并附加所需的 `CKEditorFuncNum` 参数:
### 请求
```
curl -i -X POST \
-F "upload=@test.html" \
"http:///ck_upload_handler.php?CKEditorFuncNum=1"
```
其中 `test.html` 包含基本的概念验证 HTML 标记:
```
```
### 预期响应
如果存在漏洞,服务器将回复 `200 OK` 状态,并输出指示上传路径的 JavaScript 代码块:
```
```
## 建议修复方案
如果您运行的是受影响版本的 Feng Office,请应用以下手动修复补丁以保护文件上传端点:
### 1. 实施强制身份验证
确保 `ck_upload_handler.php` 在处理任何文件上传逻辑之前,先检查是否处于活动的管理员会话。
### 2. 重新启用服务器端文件验证
取消注释并严格执行扩展名检查。拒绝任何未明确匹配预期的非可执行图像 MIME 类型的上传:
```
$pattern = "/\.(jpg|jpeg|png|gif)$/i";
if (!preg_match($pattern, $_FILES['upload']['name'])) {
header("HTTP/1.1 403 Forbidden");
exit("Invalid file type.");
}
```
### 3. 强制执行 HttpOnly Cookies
修改您的 PHP 配置或应用程序引导配置,以确保无法通过客户端脚本 API 访问会话 cookie:
```
session.cookie_httponly = On
```
## 披露时间线
* **2026 年 2 月 20 日:** 初步发现漏洞并向 Feng Office 支持团队发送初步通知。
* **2026 年 3 月 12 日:** 向 MITRE 请求 CVE 编号。
* **2026 年 3 月 15 日:** 供应商确认收到报告并请求暂停以审查调查结果。
* **2026 年 3 月 29 日:** MITRE 正式分配 CVE-2026-36669。已通知供应商官方分配的跟踪 ID;未收到进一步更新。
* **2026 年 6 月 29 日:** 向供应商发送最终通知,概述了 14 天的标准披露发布时间表。
* **2026 年 7 月 13 日:** 协调响应/补丁窗口期限到期;未收到任何回复。
* **2026 年 7 月 15 日:** 公开披露此安全公告。
## 发现者
Soufiane LAGZIRI
标签:CISA项目, OpenVAS, PHP, PoC, Web安全, 任意文件上传, 会话劫持, 暴力破解, 漏洞披露, 蓝队分析