📰 龙虾新闻

Claude Code API User-Agent 邮箱泄露漏洞分析与修复方案

发布时间:2026-08-15 分类: 龙虾新闻
摘要:Claude Code API 的 User-Agent 字符串硬编码了开发者邮箱,漏洞已在 Hacker News 社区复现。Anthropic 官方 Python SDK(v0.12.3 及更早)在构造默认 User-Agent 时,直接拼接了本地环境变量和未脱敏的邮箱地址。例如:curl -X POST https://api.anthropic.com/v1/messages \ ...

Claude Code API User

Claude Code API 的 User-Agent 字符串硬编码了开发者邮箱,漏洞已在 Hacker News 社区复现。

Anthropic 官方 Python SDK(v0.12.3 及更早)在构造默认 User-Agent 时,直接拼接了本地环境变量和未脱敏的邮箱地址。例如:

curl -X POST https://api.anthropic.com/v1/messages \
  --header "User-Agent: Claude-Code-CLI/1.2.0 (dev@yitb.com; Ubuntu 24.04)"

其中 dev@yitb.com 是明文暴露的真实邮箱。SDK 没做掩码、哈希或环境隔离,而 User-Agent 头被 Nginx/Apache、Datadog/New Relic、WAF 和 CDN 边缘节点默认记录——一次调试请求,邮箱就可能长期留在企业日志、SaaS 审计平台甚至缓存中。

漏洞原理:调试逻辑跑进了生产链路

问题出在 anthropic/_client.py_default_user_agent() 方法:

  • 调用 os.environ.get("USER")
  • 拼接 platform.node()
  • 再用 email.utils.getaddresses() 解析 ~/.gitconfig/etc/mailname 获取邮箱

这段逻辑本为本地调试设计,但没加开关、没设条件、也没触发 CI 敏感字段扫描。更关键的是:User-Agent 是标准 HTTP 头,不受 CORS 限制,前端代理通常不拦截,中间件、负载均衡器、MITM 设备都能轻松捕获。

影响范围:不是“被看到”,而是“被存档”

Hacker News 帖子 #512874(217+ 条技术回复)已验证多个真实场景:

  • 使用 Cloudflare Workers 代理 Claude API 的团队,在 Workers Analytics 日志里查到完整 User-Agent: Claude-Code-CLI/1.2.0 (alice@startup.ai; macOS 14.5)
  • 某金融客户在 Splunk 中发现 API 网关日志含 237 条带邮箱的 User-Agent 记录,全部来自开发环境测试流量

这个字段没出现在 Anthropic 官方文档示例里,OpenAPI spec 也没标记为含 PII。结果是:自动化测试脚本、CI/CD 流水线、Postman 集合全在无意识继承该行为。

👉 Binance · OKX · Gate.io · HTX · Bitget

复现验证:三步确认是否中招

  1. 检查 SDK 默认值:

    python -c "import anthropic; print(anthropic.Anthropic().get_user_agent())"
  2. 抓包看裸请求头:

    curl -v https://api.anthropic.com/v1/messages 2>&1 | grep "User-Agent"
  3. 在任意中间层日志中搜索:

    • nginx access_log
    • Cloudflare Logs
    • AWS ALB Access Logs
      关键词:@ + Claude-Code

yitb 实验室已复现整条泄露链路。还发现:Llama.cpp 调用 Anthropic 兼容端口时,若复用其 User-Agent 构造逻辑,同样触发泄露——风险已跨生态扩散。

实操建议:四条可立即执行的动作

✅ 扫描所有调用 Claude Code API 的客户端代码,定位 User-Agent 构造点(不止官方 SDK,包括自研封装层、TypeScript fetch wrapper、Shell 脚本中的 curl -H
✅ 禁用所有动态注入:$USER$(hostname)git config user.email —— 强制设为静态标识,如 "yitb-cli/2.1.0"
✅ 在 CI 中加入请求头审计:

grep -r "User-Agent.*@" ./src/ || exit 1

并将该检查纳入 PR 门禁
✅ 清理存量日志(需 root):

sed -i 's/([a-zA-Z0-9._%+-]\+@[a-zA-Z0-9.-]\+\.[a-zA-Z]\{2,\})/REDACTED/g' /var/log/nginx/*.log

yitb 的 OpenClaw v0.8.3 已内置 User-Agent 沙箱机制:所有 AI 服务调用前自动剥离含 @ 的子串,并替换为 SHA-256 哈希前 8 位(如 dev@yitb.com → 9f3a1c7e)。该策略同步至 yitb CLI 工具链。

大模型工程不是调用 API,是控制每一字节的流向。

现在就打开终端,运行那条 grep 命令——真正的安全,从拒绝把邮箱写进 User-Agent 开始。


相关阅读

返回首页