AI-powered CVE intelligent repair, conflict resolution, and code migration patch flow
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 4 个月前 | ||
| 14 小时前 | ||
| 4 个月前 | ||
| 20 天前 | ||
| 2 个月前 |
openEuler社区AI漏洞修复项目
项目概述
nvwa-cve-fixer 是openEuler社区一个基于人工智能的 CVE(Common Vulnerabilities and Exposures)智能修复平台,提供自动化的补丁回移植、冲突解决和代码迁移能力。该项目集成了多个子模块,形成完整的 CVE 修复工作流,当前主要分为3个模块:
- patch-backporting:基于大语言模型的补丁回移植引擎,负责分析补丁内容,理解代码语义,自动回移植到目标版本。
- patchflow:CVE 补丁处理服务,可以批量回合补丁并且解决布丁冲突,当前主要负责openEuler社区kernel仓库补丁修复。
- peripheral_rpm:CVE 补丁处理服务,当前负责分析软件包是否受影响,以及提供补丁修复能力,当前主要负责openEuler外围用户态软件包补丁修复。
nvwa 一词源自中国神话中的造物之神"女娲",象征着这个工具能够"修补"软件世界中的安全漏洞。
背景与动机
安全漏洞是软件系统面临的重大威胁。当上游社区发布 CVE 修复补丁时,下游发行版(如 openEuler)需要将这些补丁快速、准确地回移植到各个支持的生命周期版本中。传统的人工回移植方式面临以下挑战:
- 效率低下:需要人工分析补丁内容,理解代码变更逻辑
- 容易出错:手动移植容易引入新的 bug 或遗漏关键修复
- 资源消耗:每个 CVE 都需要安全专家投入大量精力
- 版本众多:一个 CVE 可能影响数十个分支版本
nvwa-cve-fixer 通过 AI 技术自动化这一过程,显著提升 openEuler社区CVE 修复效率。
核心概念
CVE (Common Vulnerabilities and Exposures)
CVE 是国际通用的漏洞标识符系统,每个 CVE ID 代表一个已知的安全漏洞。例如 CVE-2024-3094 代表 XZ Utils 的后门漏洞。
补丁回移植 (Backporting)
将新版本代码中的修复补丁应用到旧版本代码的过程。由于旧版本代码结构可能与新版本不同,补丁往往不能直接应用,需要智能分析和适配。
Patch Flow
自动化补丁处理的工作流,包括:获取上游补丁 → 分析影响版本 → 解决代码冲突 → 验证修复正确性 → 创建合并请求。
架构概览
nvwa-cve-fixer/
│
├── patch-backporting/ # PortGPT: AI 驱动的补丁回移植引擎
│ └── src/
│ ├── agent/ # LLM Agent 模块
│ ├── tools/ # 工具函数
│ └── backporting.py # 主入口
│
├── patchflow/ # CVE 补丁处理服务
│ └── src/
│ ├── cvekit/ # 命令行工具核心
│ ├── cve_service/ # CVE 服务(API/MCP)
│ └── git_webhook/ # Git Webhook 处理
│
└── peripheral_rpm/ # RPM 包 CVE 自动修复工具链
├── skills/ # OpenCode Skills
└── tools/ # 辅助工具
├── cve-deal/ # CVE 处理工具
└── atomgit-notifier/ # Issue 监控服务
核心模块详解
1. patch-backporting (PortGPT)
基于大语言模型的自动化补丁回移植工具,论文发表于 IEEE S&P 2026。
核心能力:
- 自动分析上游修复补丁的逻辑
- 智能适配目标代码的上下文
- 处理代码路径和变量名不匹配的场景
- 生成与原补丁语义等价的修复代码
技术特点:
- 支持 OpenAI 和 Azure OpenAI 双后端
- 基于语义理解而非简单的文本替换
- 提供 Docker 容器化部署,开箱即用
快速开始:
# 安装依赖
cd patch-backporting
curl -sSL https://pdm-project.org/install-pdm.py | python3 -
pdm install
source .venv/bin/activate
# 配置并运行
cd src
cp example.yml my_config.yml
# 编辑 my_config.yml 填入你的配置
python backporting.py --config my_config.yml --debug
Docker 部署:
# 构建镜像
docker build -t patch-backporting .
# 运行容器
docker run --rm -v $(pwd):/app/src patch-backporting \
python backporting.py --config config.yml
2. patchflow
CVE 补丁处理服务,提供 cvekit 命令行工具,支持完整的 CVE 处理流程。
核心功能:
| 功能 | 描述 |
|---|---|
| parse-issue | 解析 CVE Issue,提取关键信息 |
| setup-env | 克隆并准备源码环境 |
| get-commits | 获取引入和修复 commit |
| analyze-branches | 分析分支受影响性 |
| apply-patch | 应用补丁到目标分支 |
| create-pr | 创建 Pull Request |
| backport | AI 驱动的补丁冲突修复 |
| backport-batch | 批量回移植处理 |
快速开始:
# 安装
cd patchflow/src
pip install -r requirements.txt
python3 setup.py install
# 环境配置
export REPO_URL=https://atomgit.com/your-org/your-repo
export FORK_REPO_URL=https://atomgit.com/your-fork/your-repo
export ATOMGIT_TOKEN=${ATOMGIT_TOKEN}
export LLM_PROVIDER=openai
export API_KEY=${API_KEY}
# 基本操作流程
cvekit --action parse-issue --cve-id CVE-2024-XXXX
cvekit --action setup-env
cvekit --action get-commits --cve-id CVE-2024-XXXX
cvekit --action analyze-branches --cve-id CVE-2024-XXXX
cvekit --action apply-patch --cve-id CVE-2024-XXXX --patch-path /path/to/patch
cvekit --action backport --cve-id CVE-2024-XXXX --branch target-branch
cvekit --action create-pr --cve-id CVE-2024-XXXX --branch target-branch
批量回移植:
# 从 Excel 生成配置
cvekit --action backport-batch \
--backport-excel ./cve_list.xlsx \
-o ./batch_config.yml
# 生成报告
cvekit --action backport-batch --backport-config ./batch_config.yml --debug
# 交互式执行回移植
cvekit --action backport-batch --backport-config ./batch_config.yml.report.yml -i
3. peripheral_rpm
RPM 包的端到端 CVE 自动修复工具链,集成 OpenCode Skills 实现智能化处理。
核心组件:
skills/rpm-patch-applier
RPM 补丁应用适配 Skill,处理源码 RPM 的补丁应用:
- 阶段 1:源码准备(展开 tarball + git init)
- 阶段 2:补丁应用与冲突解决(AI 辅助)
- 阶段 3:Spec 文件更新(Patch 声明、%patch 指令、Release bump)
- 阶段 4:验证(rpmbuild -bp 确认补丁可正确应用)
skills/cve-analyze
CVE 影响性分析 Skill:
- 自动分析 CVE issue 的影响范围
- 填写受影响版本、ABI 变化、原因说明等字段
- 按模板格式化分析结果并发布评论
tools/cve-deal
CVE Issue 端到端处理工具,6 步完整流程:
- 抓取 Issue(解析 CVE ID、CVSS、目标分支)
- 准备分析数据(NVD 信息、Fork 仓库、AI 查找补丁)
- 受影响性分析(AI + 确定性脚本)
- 应用补丁到分支(AI 辅助 + spec 修改)
- 提交 PR(跨仓库 PR 创建)
- 生成评论(模板化 CVE 分析报告)
tools/atomgit-notifier
AtomGit Issue 监控通知服务:
- 轮询 AtomGit API 获取 CVE 类型通知
- 自动触发 cve-deal 流程处理
- 实时反馈处理进度和结果
快速开始:
# 配置 OpenCode
pip install opencode
opencode config set default-proxy Sisyphus
opencode config set default-model zhipuai-coding-plan/glm-5-turbo
# 部署 Skills
cp -r peripheral_rpm/skills/* ~/.config/opencode/skills/
# 配置 AtomGit Token
cd peripheral_rpm/tools/atomgit-notifier
echo "your_atomgit_token" > token
chmod 600 token
# 配置监控仓库
vim repos.conf # 每行一个 owner/repo
# 启动监控服务
bash atomgit_notifier.sh
触发 CVE 处理:
在 CVE issue 下评论:
@username /branches <openEuler-22.03-LTS,master>
工作流程详解
CVE 处理完整流程
┌─────────────────────────────────────────────────────────────────┐
│ CVE 处理工作流 │
└─────────────────────────────────────────────────────────────────┘
[1] Issue 检测
│ atomgit-notifier 监控 CVE 类型 issue
▼
[2] CVE 解析
│ 提取 CVE ID、CVSS、目标分支、评论内容
▼
[3] 补丁获取
│ 从 NVD/上游仓库获取修复 commit 和补丁文件
▼
[4] 分支分组
│ 基于 Git tree hash + spec hash 分组等价分支
▼
[5] 受影响性判断
│ AI 分析 + 确定性脚本判断版本是否受影响
▼
[6] 补丁应用
│ AI 辅助冲突解决,自动更新 spec 文件
▼
[7] PR 提交
│ 自动创建跨仓库 PR 到 AtomGit/GitCode
▼
[8] 结果评论
│ 按 openEuler CVE 模板格式化并发布分析结果
补丁回移植流程(patch-backporting)
[新版本修复补丁] ──► [PortGPT 分析] ──► [目标版本代码]
│
▼
┌─────────────────┐
│ 冲突检测与解决 │
│ 语义等价验证 │
│ 补丁适配生成 │
└─────────────────┘
│
▼
[生成的修复补丁]
技术亮点
| 特性 | 说明 |
|---|---|
| AI 驱动 | 基于大语言模型实现智能补丁回移植和冲突解决,理解代码语义而非简单文本匹配 |
| 多平台支持 | 支持 GitCode、Gitee 等代码托管平台 |
| 断点续传 | 工作流状态持久化,支持从失败步骤恢复 |
| 批量处理 | 支持 Excel 配置文件批量处理大量 CVE |
| 多语言支持 | 提供中英文界面 |
| 容器化部署 | 提供 Docker 镜像,快速部署 |
| 科研支撑 | 核心算法发表于 IEEE S&P 2026 |
安装与配置
环境依赖
sudo yum install -y git rpm-build curl jq
# Python 依赖
pip install opencode packaging openpyxl GitPython PyYAML
LLM 配置
支持多种 LLM 提供商:
# OpenAI(默认)
export LLM_PROVIDER=openai
export API_KEY=sk-your-api-key
# Azure OpenAI
export LLM_PROVIDER=azure
export AZURE_ENDPOINT=https://your-resource.openai.azure.com/
export AZURE_DEPLOYMENT=gpt-4
export API_KEY=your-azure-api-key
# 本地模型(OpenAI 兼容接口)
export LLM_PROVIDER=local
export LLM_BASE_URL=http://localhost:11434/v1
export MODEL_NAME=llama3
export API_KEY=optional-token
AtomGit Token 配置
# 创建 Personal Access Token
# 访问 https://atomgit.com/settings/tokens
# 配置 Token
export ATOMGIT_TOKEN=your_atomgit_token
# 或写入配置文件
cd peripheral_rpm/tools/atomgit-notifier
echo "your_token" > token
chmod 600 token
配置文件示例
backport-batch 配置
project: linux
project_url: https://atomgit.com/openeuler/kernel
project_dir: /path/to/source-repo
target_path: /path/to/target-repo
target_release: openEuler-24.03-LTS-SP1-patchpool
patch_dataset_dir: /path/to/patch_dataset
llm_provider: minimax
api_key: ${API_KEY}
commits:
- commit: 2d1a8bfb61ec
commit_title: 'etm4x: Fix etm4_count race by moving cpuhp callbacks to init'
- commit: 16a0cbac6609
commit_title: 'drivers: arch_topology: Refactor do-while loops'
常见问题
Q: 如何判断生成的补丁是否正确?
A: 建议从以下三个维度验证:
- 逻辑块匹配:生成的补丁是否修改了 GT 相同的逻辑块代码
- 位置正确性:代码变更位置是否与 GT 相同或等价
- 语义等价:修改后的代码语义是否与 GT 等价
Q: 支持哪些代码托管平台?
A: 当前支持:
- AtomGit(主要目标平台)
- GitCode
- Gitee(向后兼容)
Q: 如何处理补丁冲突?
A: 有两种方式:
- 自动解决:使用
cvekit --action backport命令,AI 会尝试自动解决冲突 - 手动辅助:在 OpenCode 中使用
/rpm-patch-applierSkill,AI 会指导你逐步解决冲突
Q: 批量处理有什么限制?
A:
- 单次批量处理建议不超过 100 个 commit
- 建议使用
--debug参数先测试小批量,确认无误后再大规模处理 - 敏感信息(token、api_key)建议通过环境变量传入
Q: 如何调试处理失败的问题?
A:
- 查看工作目录日志:
/tmp/cve-{name}-{issue_number}/cve_deal.log - 检查工作流状态:
workflow_state.json - 使用
--start-step N从指定步骤重新执行 - 查看 OpenCode session:
opencode /sessions /use <session_id>
许可证
本项目包含多个子模块,各模块遵循其对应的开源许可证:
| 模块 | 许可证 |
|---|---|
| patch-backporting | MIT License |
| patchflow | 遵循 openEuler 相关许可证 |
| peripheral_rpm | 遵循 openEuler 相关许可证 |
目录结构
nvwa-cve-fixer/
├── patch-backporting/ # PortGPT 补丁回移植引擎
│ ├── src/ # 源代码
│ │ ├── agent/ # LLM Agent
│ │ ├── tools/ # 工具函数
│ │ └── backporting.py # 主入口
│ ├── docs/ # 文档(含论文 PDF)
│ ├── test/ # 测试用例
│ ├── Dockerfile
│ └── README.md
│
├── patchflow/ # CVE 补丁处理服务
│ ├── src/ # 源代码
│ │ ├── cvekit/ # cvekit 核心模块
│ │ ├── cve_service/ # CVE 服务(API/MCP)
│ │ ├── git_webhook/ # Git Webhook
│ │ └── tests/ # 测试用例
│ ├── docs/zh/ # 中文文档
│ └── README.md
│
├── peripheral_rpm/ # RPM CVE 修复工具链
│ ├── skills/ # OpenCode Skills
│ │ ├── rpm-patch-applier/
│ │ └── cve-analyze/
│ ├── tools/ # 辅助工具
│ │ ├── cve-deal/ # CVE 处理工具
│ │ └── atomgit-notifier/ # Issue 监控服务
│ └── README.md
│
└── README.md # 本文件
参与贡献
欢迎提交 Issue 和 Pull Request!
- Fork 本仓库
- 创建特性分支:
git checkout -b feature/your-feature - 提交更改:
git commit -m 'Add some feature' - 推送分支:
git push origin feature/your-feature - 创建 Pull Request
项目维护者:openEuler CVE 修复团队