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

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
复现验证:三步确认是否中招
检查 SDK 默认值:
python -c "import anthropic; print(anthropic.Anthropic().get_user_agent())"抓包看裸请求头:
curl -v https://api.anthropic.com/v1/messages 2>&1 | grep "User-Agent"在任意中间层日志中搜索:
- nginx
access_log - Cloudflare Logs
- AWS ALB Access Logs
关键词:@+Claude-Code
- nginx
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/*.logyitb 的 OpenClaw v0.8.3 已内置 User-Agent 沙箱机制:所有 AI 服务调用前自动剥离含 @ 的子串,并替换为 SHA-256 哈希前 8 位(如 dev@yitb.com → 9f3a1c7e)。该策略同步至 yitb CLI 工具链。
大模型工程不是调用 API,是控制每一字节的流向。
现在就打开终端,运行那条 grep 命令——真正的安全,从拒绝把邮箱写进 User-Agent 开始。
相关阅读