用途
本技能用于审计一个与私有后端通信的公开客户端代码库。目标是让公开面保持自包含:它可以暴露自己发起的调用和交换的数据结构(任何已发布客户端都无法避免),但不能暴露更多。关于服务端如何工作的每一个额外细节,都是攻击者的免费侦察信息,也是滥用的杠杆。
该技能产出三样东西:发现清单(泄露 + 客户端安全漏洞,每条带 file:line 和严重级别)、一组已应用的修复,以及一份包含残余建议的报告。
主要能力
- 按泄露分类法(leak-taxonomy)扫描整个仓库,覆盖 src/、tests/e2e、docs、README/CHANGELOG、CI 工作流、.env* 及其 .example、构建/配置文件、包清单、locale/i18n 字符串等。
- 区分必要最小披露(保留)与过度披露(修复):端点、请求/响应结构、客户端自身的重试/退避/防抖选择、输入校验上限、状态到 UI 的映射属于必要最小;描述服务端如何处理请求、服务端限制/配额、已发布客户端从不调用的端点、镜像内部服务逻辑的错误分支、反滥用机制、基础设施/技术栈标识、私有仓库/路径、编码后端行为的测试脚手架属于过度披露。
- 重写规则:客户端代码和测试可以陈述契约(如“HTTP 422 → 显示不支持的提供商消息”),但不得解释服务端做什么或为什么(如“服务端运行一次性域名检查并以 422 拒绝”)。
- 供应链快速检查:在 vendored/第三方代码中查找混淆模式(长 atob 字符串、String.fromCharCode 链、\xNN 转义序列);检查依赖的描述与行为是否一致。
- 预扫描仓库中攻击者为 agent 植入的隐藏指令:grep 文档中的 HTML 注释指令、注释中的 base64 块、package.json 的安装时钩子、调用 curl|wget|nc|base64|eval|exec 的 agent 配置文件。
- 审计仓库自带的 agent 配置(钩子清单、MCP 服务器列表、插件或技能文件夹),将其视为已发布的可执行代码。
- 将泄露框定为污点链(source→sink 数据流),而非仅仅“存在一个秘密”。
- 两个专门视角:权限差异(声明能力与实际使用不符,包括少声明、多声明、通配符作用域);描述-行为不匹配(客户端是否真的做了文档、注释和商店列表所声称的事)。
- Unicode 欺骗检查:同形字标识符、从右到左覆盖、混合脚本名称。
- 特别关注两类高价值且易漏的类别:距发布一步之遥的秘密(git 忽略的 .env* 中的真实值可能被源码包包含,因为打包器不遵守 .gitignore);测试/e2e 代码(确定性测试凭据、特殊查询参数、已发布客户端从不调用的端点、叙述服务端内部的注释)。
- 客户端加固:运行与泄露正交的客户端安全清单,优先处理特权跨上下文入口点的调用方校验、认证令牌存储与出口、不可信数据到达解释器、过宽能力、构建时配置。
- 修复:按影响排序应用修复,优先关闭秘密泄露通道,应用重写规则,删除硬编码服务端策略的死代码,裁剪测试/文档到客户端可观察契约,落地加固变更并附带测试。
- 验证:运行类型检查、单元测试、lint 和生产构建,捕获真实退出码;重新运行泄露扫描;扫描构建产物和源码包中的秘密、sourcemap 和内部字符串;确认合法流程仍工作。
- 报告:按报告模板输出,包含按严重级别排列的发现、已应用变更、残余建议(秘密轮换、git 历史暴露、有意推迟的权衡)和验证证据。
使用方式
根据请求规模调整工作量:快速“这有没有泄露”是阶段 1–2;“开源前清理”或“完整审计”是全部六个阶段。
工作流分为六个阶段:
- 界定公开/私有边界:确定被审计的公开产物及其私有对应物(后端、管理工具、基础设施、monorepo 兄弟项目),列出后端技术栈、托管、数据库、反滥用机制及测试/预发设施,写下该客户端的必要最小面。
- 扫描泄露:按分类法遍历整个仓库,用环境提供的搜索工具扫描起始模式,按类别分组命中,逐条在上下文中阅读。对每个确认的泄露,勾勒攻击者的下一步(泄露细节 → 使能什么 → 为何重要),并按滥用容易程度评级严重性。
- 客户端加固:运行 client-hardening.md,根据客户端类型选择机制文件(浏览器扩展/SPA/Web SDK 需同时读 browser-client.md;原生移动/桌面/CLI/服务端 SDK 跳过)。
- 修复:按影响顺序应用修复,默认保持行为不变。
- 验证:运行类型检查、测试、lint、生产构建,重新扫描,扫描构建产物和源码包。
- 报告:按模板撰写,注明 git 历史无法追溯修复,建议轮换和未来提交信息卫生。
对于大型代码库,可将阶段 2 分发给并行只读 agent(每个分类簇一个),合并其 file:line 发现,但阶段 1 的界定需自己完成,并将公开/私有边界传给每个 agent。阶段 4 修复保持单写者串行。资源预检:并发上限为 min((cores−1)×0.75, free_gb×0.7/per_agent, 6),只读 agent 每个约 0.7 GB;若 CPU 负载 > 85% 或空闲 RAM < 2×per_agent 则串行;每波前重新计算。
适用场景
- 开源前清理代码库,移除对私有后端的过度披露。
- 发布浏览器扩展、应用、SPA、CLI 或 SDK 前的安全审计。
- 对已有公开客户端进行完整泄露审计和客户端加固。
- 审计仓库自带的 agent 配置、钩子、MCP 服务器列表、插件或技能文件夹。
- 检查供应链依赖的描述与行为是否一致。
限制
- 本技能审计你自己的/已授权的代码以减少其公开攻击面,是防御性的:减少披露和加固客户端,而非构建漏洞利用。
- 不要过度标记不可避免的内容:端点、载荷形状、状态到 UI 映射是必要最小,标记它们会侵蚀报告的可信度。
- 模式命中只是线索,需在上下文中阅读后再判定为泄露。
- 保留陈述用户相关策略的用户可见字符串(如“验证码 10 分钟后过期”),但删除旁边不可见描述/注释中的内部框架。
- git 历史无法追溯修复:已移除的秘密或描述性提交主题仍留在日志中,建议轮换和未来提交信息卫生,而非重写公开仓库历史。
- 参考文件按需加载,不要全部内联。
- 关于具体收费、价格、平台支持等事实,资料中暂未提供。