用途:判定 SonarQube SCA 依赖漏洞(VULNERABILITY,状态 OPEN 或 CONFIRM)在当前代码库中是否可达,仅凭存在漏洞版本不作为结论;输出可粘贴到 SonarQube UI 的 SAFE 判定说明,并在用户明确授权后打包确认的依赖升级。
主要能力与流程:确定范围与模式(报告模式或 triage-and-fix 模式,后者需用户明确要求或传 --fix),声明项目、绑定目录、分支、范围与模式;调用 sonar-dependency-risks 技能拉取并按包与包管理器分组,保留 key、CVE、严重度、状态、包名版本、直接或传递依赖、原始序号;对每个唯一包版本调用 mcp__sonarqube__check_dependency,不可用时用 WebFetch 读取 GHSA 或 OSV 公告,无法确认修复版本或撤回状态则判 NEEDS_HUMAN;检查清单、锁文件与构建配置,区分运行时与开发/测试/构建依赖;研究漏洞机制、前置条件与攻击者可控输入;用语义导航(search-signatures、trace-callers,动态 JS/TS 用 search-bodies)验证可达性;按 VULNERABLE、VULNERABLE_NO_FIX、NOT_VULNERABLE、NEEDS_HUMAN 四种判定之一结案,并给出理由与一至两条证据。
判定护栏:仅处理 VULNERABILITY,不按可达性处理 MALWARE(应在报告中列于最前要求立即移除);PROHIBITED_LICENSE 无可达性可评,仅报数量;保留返回顺序。搜索干净不足以判 NOT_VULNERABLE,除非公告指明窄化的易受攻击 API 且搜索覆盖全部运行时代码;传递依赖(release.directSummary 为 false)不因项目自身无调用点而判 NOT_VULNERABLE;存在 timed_out_files 或运行时代码语言不被语义导航支持视为搜索不完整,只能 NEEDS_HUMAN;反射、生成代码、框架装配、插件加载、配置驱动执行及公告细节不确定时,除非聚焦子代理给出决定性证据,否则 NEEDS_HUMAN;不得自动将发现标为 SAFE;不得更改默认分支,未经用户明确确认不得推送或创建拉取请求;源代码搜索用语义导航,shell 仅用于仓库、包管理器与 SonarQube 操作。
报告与修复:每个发现输出独立代码块,含 Risk、Verdict、Fixed version(仅 VULNERABLE 必需)、Reason(不超过三句、400 字符)、Evidence;NOT_VULNERABLE 需在 Reason 前加 Proposed UI status: SAFE,并以 Not vulnerable because 开头,可整段粘贴。仅在 triage-and-fix 模式且用户明确确认所选修复、推送分支与创建 PR 后进入修复:从受审分支或 PR head 建特性分支,确认所报版本存在,直接依赖升级到修复版本,传递依赖仅在高或阻断严重度且父级扇出有限时提议固定版本,否则保留 VULNERABLE 并附手动修复说明;重新生成锁文件并运行仓库相关校验,在绑定 SonarQube 项目的目录运行 sonar analyze dependency-risks;每个包一个提交,确认的包提交合并为一个 PR;发布前扫描变更文件中的密钥并运行可用的 SonarQube 分析,在 git push 与创建 PR 前分别再次请求确认。分类:安全与审计。