| name | cve-analyze |
| description | 自动分析 CVE issue 的影响性,填写受影响版本、ABI 变化、原因说明等字段,并在 issue 中评论分析结果。 |
cve-analyze
独立调用:/cve-analyze <issue_url>
集成调用:由 /cve-fix 编排流程在 /cve-match 之后自动调用。
输入
issue_url:GitCode 上的 CVE issue 链接
patch_urls:(可选,由 cve-search 提供)上游补丁链接列表,用于分析 ABI 变化
fix_strategy:(可选,由 cve-search 提供)upgrade 或 backport
执行流程
1. 获取 Issue Body
python3 ~/.claude/skills/cve-fix/get_gitcode_issue.py get_issue_body "<issue_url>"
返回 JSON {"body": "...", "title": "..."}。
2. 解析 Issue Body
从 body 中提取以下信息:
一、漏洞信息部分:
- 漏洞编号(CVE-XXXX-XXXXX)
- 漏洞归属组件
- 漏洞归属的版本:逗号分隔的版本列表(如
3.4.14,3.4.7),这是判断是否受影响的核心依据
- CVSS 评分(BaseScore、Vector)
- 漏洞简述
- 漏洞补丁信息
二、漏洞分析结构反馈部分:
- 各分支及其括号内版本(如
master(3.4.14), openEuler-24.03-LTS(3.4.14))
- 提取所有分支名称和对应版本号
3. 版本匹配判断
对每个分支执行以下判断逻辑:
漏洞归属版本列表 = 解析"漏洞归属的版本"字段(逗号分隔)
对于每个分支:
分支版本 = 括号内的版本号
如果 分支版本 在 漏洞归属版本列表中:
→ 该分支【受影响】
否则:
→ 该分支【不受影响】
4. AI 补充分析
结合以下信息生成影响性分析说明:
- 漏洞简述(来自 issue body)
- 漏洞归属组件与版本
- NVD 参考链接中的漏洞详情(如有)
- 组件与漏洞的实际关联性
生成内容包括:
- 影响性分析说明:简要描述漏洞本质、与当前组件的关系
- openEuler 评分:基于 CVSS 信息填写,无信息则填
N/A
5. ABI 变化判断
必须基于实际补丁/变更内容分析,不能仅凭修复策略类型(backport/升级)猜测。
判断依据——检查补丁或版本变更是否涉及以下任一项:
- 公共头文件变更:修改了
include/ 目录下的 .h 文件中的结构体定义(增删字段、调整字段顺序/类型)、枚举值变更、宏定义变更
- 导出符号变更:新增、删除或修改了库的导出函数签名(参数类型/个数变化、返回值类型变化)
- SO soname 变更:
.so 版本号发生变化(如 libfoo.so.1 → libfoo.so.2)
- 函数行为语义变更:虽然签名不变,但行为发生了不兼容的变化(如返回值含义改变)
获取补丁内容:
若 patch_urls 已提供(来自 cve-search),fetch 补丁 diff 进行分析:
- GitHub commit URL 追加
.patch 后缀获取原始 diff
- GitHub PR URL 追加
.patch 后缀获取原始 diff
若为独立调用(无 patch_urls),从 issue body 的"漏洞补丁信息"中提取补丁链接
判断方法:
- Backport 补丁:查看补丁 diff 中修改的文件列表和内容
- 仅修改
.c 源文件的内部逻辑(如条件判断、边界检查)→ 否
- 涉及
.h 头文件的结构体/接口定义变更 → 是
- 增删导出函数 →
是
- 版本升级:查看上游 changelog / release notes
- 搜索关键字:
ABI break、soname bump、API removal、API change、incompatible
- 对比新旧版本的主版本号变化(如 2.x → 3.x)→ 大概率
是
- 补丁版本号变化(如 2.7.4 → 2.7.5)且 changelog 无 ABI 相关描述 →
否
若信息不足无法确定,填 否,并在影响性分析说明中注明"ABI 变化待人工确认"。
6. 填写规则
参考 ~/.claude/skills/cve-analyze/references/cve-analyze.md 中的对照表:
受影响分支:
- 受影响版本排查:
受影响
- ABI 变化:根据步骤 5 的判断填写(
是 或 否)
- 原因说明:
正常修复
不受影响分支:
- 受影响版本排查:
不受影响
- ABI 变化:
否
- 原因说明:
不受影响-漏洞代码不存在
注意:版本是否受影响和原因说明必须严格对应,参见 references/cve-analyze.md。
7. 组装评论并发出
将分析结果组装为以下格式的评论内容,仅包含"二、漏洞分析结构反馈"中需要填写的部分(从"影响性分析说明"开始):
影响性分析说明:
<AI 生成的影响性分析说明>
openEuler评分:
BaseScore:<评分或 N/A>
受影响版本排查(受影响/不受影响):
1.master(<版本>):<受影响/不受影响>
2.openEuler-xxx(<版本>):<受影响/不受影响>
...
修复是否涉及abi变化(是/否):
1.master(<版本>):<是/否>
2.openEuler-xxx(<版本>):<是/否>
...
原因说明:
1.master(<版本>):<原因说明>
2.openEuler-xxx(<版本>):<原因说明>
...
通过以下命令发出评论:
python3 ~/.claude/skills/cve-fix/get_gitcode_issue.py comment_issue "<issue_url>" "<评论内容>"
输出
- 评论已发布到 issue
- 返回分析摘要供编排层使用(受影响分支数、不受影响分支数)
参考文件
~/.claude/skills/cve-analyze/references/cve-analyze.md — 原因说明填写规范
~/.claude/skills/cve-analyze/references/cve-issue-influence.md — Issue 影响性分析模板示例
示例
输入: /cve-analyze https://gitcode.com/src-openeuler/etcd/issues/1
Issue Body 解析结果:
- 漏洞归属版本:
3.4.14,3.4.7
- 分支列表:
master(3.4.14), openEuler-20.03-LTS-SP4(3.4.14), ...
- 漏洞简述:A POST based reflected Cross Site Scripting vulnerability on Keycloak
版本匹配:
3.4.14 在归属版本列表 [3.4.14, 3.4.7] 中 → 所有分支均受影响
生成评论:
影响性分析说明:
该漏洞为 Keycloak 的反射型 XSS 漏洞(CVE-2021-20323),与 etcd 组件无直接关联。但由于 etcd 版本 3.4.14 在漏洞归属版本范围内,各分支标记为受影响。
openEuler评分:
BaseScore:N/A
受影响版本排查(受影响/不受影响):
1.master(3.4.14):受影响
2.openEuler-20.03-LTS-SP4(3.4.14):受影响
3.openEuler-22.03-LTS-SP4(3.4.14):受影响
4.openEuler-24.03-LTS(3.4.14):受影响
5.openEuler-24.03-LTS-Next(3.4.14):受影响
6.openEuler-24.03-LTS-SP1(3.4.14):受影响
7.openEuler-24.03-LTS-SP2(3.4.14):受影响
8.openEuler-24.03-LTS-SP3(3.4.14):受影响
修复是否涉及abi变化(是/否):
1.master(3.4.14):否
2.openEuler-20.03-LTS-SP4(3.4.14):否
3.openEuler-22.03-LTS-SP4(3.4.14):否
4.openEuler-24.03-LTS(3.4.14):否
5.openEuler-24.03-LTS-Next(3.4.14):否
6.openEuler-24.03-LTS-SP1(3.4.14):否
7.openEuler-24.03-LTS-SP2(3.4.14):否
8.openEuler-24.03-LTS-SP3(3.4.14):否
原因说明:
1.master(3.4.14):正常修复
2.openEuler-20.03-LTS-SP4(3.4.14):正常修复
3.openEuler-22.03-LTS-SP4(3.4.14):正常修复
4.openEuler-24.03-LTS(3.4.14):正常修复
5.openEuler-24.03-LTS-Next(3.4.14):正常修复
6.openEuler-24.03-LTS-SP1(3.4.14):正常修复
7.openEuler-24.03-LTS-SP2(3.4.14):正常修复
8.openEuler-24.03-LTS-SP3(3.4.14):正常修复