已开启
[Bug] refreshToken/clientSecret 结构化字段未脱敏并可能明文上传 #53
tianjun创建于  18 天前
tianjun
18 天前 创建

问题与复现

Cpx 与 Insight 的结构化敏感字段名单列出了 refreshToken、clientSecret,但查找使用 key.toLowerCase(),名单缺少对应的 refreshtoken、clientsecret。因此 camelCase 及纯大小写变体未命中;下划线/短横线变体正常。

只用合成输入即可复现,无真实密钥或会话数据:

{"credentials":{"refreshToken":"opaque-test-refresh-credential","clientSecret":"opaque-test-client-credential"},"max_tokens":4096}

将其作为工具调用 input 经过 Cpx redactRecord() → Claude emitter → JSONL 后,两项原值仍落盘。Insight 对该 JSONL 的清洗也保留原值,长值被独立残留复检拦截;值为 tiny/short 的大写变体则通过本地上传、push、物化,仍保留明文。

预期

按敏感键名匹配并脱敏,与 snake_case、kebab-case 行为一致;保持非敏感 max_tokens 不变。上传前在副本中清洗,原始捕获不被改写。

验证与修复方向

基于最新 master 9ce8017ee71e4dd3ddaebc2f568f3ca041d0c837。修复前两项 Cpx 落盘回归失败;两项 Insight 真实本地 bare Git 上传/物化回归失败,分别为长值熔断和短值明文上传。将两份名单中的这两个元素改为小写即可与现有查找一致,不增加依赖或改动数据格式。

已检查全部现有 Issue 和 open PR;Issue #23 / PR #54 处理 Authorization: Token 与裸 api_key=... 的字符串规则,和这里的结构化字段名单失配不同。本报告只包含合成测试凭证。

likedislike
Ttianjun
18 天前 添加了label:bug
tianjun
18 天前 评论:

/assign @Ethan_Zou

likedislike
CANN-robotCANN-robot成员
18 天前 将 Ethan_Zou 设为负责人
Ttianjun
18 天前 关联了pull request:fix(cpx): mask camelCase refresh tokens and client secrets