henleda/virtual-patch-copilot
GitHub: henleda/virtual-patch-copilot
一个模型无关的 AppSec 代理管道,能够自动发现应用漏洞、通过 F5 Distributed Cloud 实时部署虚拟补丁进行缓解、利用 exploit 验证策略有效性,并起草代码修复 PR,形成从漏洞发现到彻底修复的完整闭环。
Stars: 0 | Forks: 1
# virtual-patch-copilot
[](https://github.com/henleda/virtual-patch-copilot/actions/workflows/ci.yml)
[](LICENSE)

一个 agent pipeline,能够**发现应用漏洞,通过正确的 F5 Distributed Cloud (XC) 控制措施实时缓解每一个漏洞,并起草真实的代码修复方案**——在有人工监督且一切操作均可逆的前提下,将“AI 发现漏洞”到“代码修复发布”之间的暴露窗口从数周缩短至数分钟。
权宜之计(创可贴)为你争取时间;PR 才是最终解药。每一个被缓解的发现都会生成一个代码修复 PR,并且 copilot 会**根据该发现的实际 exploit 来验证自身的权宜之计**——不断优化,直到 exploit 被真正阻断——因此它绝不会声称一个无效的修复是有效的。
它是**与模型无关的**:每个 agent 的模型都在 `config/agents.yaml` 中配置,因此你可以将其运行在 Claude、OpenAI、Gemini 或本地 Ollama 上——无论是针对单个 agent 还是全局——都无需修改任何代码。

## 工作原理
```
repo ─▶ discover ─▶ verify ─▶ triage ─▶ generate ─┬▶ apply (XC band-aid: snapshot → self-test →
(find) (refute) (route) (XC config) │ attach → validate → refine → keep/rollback)
remediate └▶ open PR (the real code fix — the cure)
```
- **discover → verify**:发现候选漏洞并对抗性地反驳较弱的项目(经过校准的、严重程度加权的置信度阈值;每个不同的漏洞仅报告一次,并附带其实际 endpoint)。
- **triage**:将每个发现路由到最强的控制措施:`service_policy` · `waf` · `waf_data_guard` · `api_schema` · `malicious_user` · `bot_defense` · `rate_limit` —— 或者在没有合适的权宜之计时仅进行代码修复。
- **apply**:在人工批准的关卡后,将控制措施创建/附加到实时的 LB 上,然后**针对该发现自身的 exploit 验证其有效性**(一个探测 agent 会推导出 setup/exploit/legit 请求)。如果策略未能阻断,**refiner** 会诊断并重试,直到成功——或者诚实放弃(“需要代码修复”)。确定性的 linter 会在任何实时往返之前捕获自我冲突的策略。
- **remediate**:将代码解药起草为 GitHub PR。一个**账本**会追踪每个发现的状态 `found → mitigated → remediated → retired`,并且 **retire** 会在解药合并后分离权宜之计。
贯穿始终的安全护栏:除非明确开启,受保护的 LB/策略会拒绝任何修改操作;每次 apply 都会先进行快照,并在失败时回滚。
## 在 2 分钟内体验(无需云环境,无需密钥)
```
pip install -e ".[console]"
python3 demo/build_demo_out.py # curated dataset — the full story, offline
VPCOPILOT_OUT=demo/out vpcopilot console # http://127.0.0.1:8787
```
直接打开 `demo/out/report.html` 即可查看可分享的仪表板。请参阅 **[docs/DEMO.md](docs/DEMO.md)** 获取详细引导(以及基于 XC 实时环境的运行路径)。
**想在一个安全的代码库上真实运行它?** 在你自己的代码之前,先将其指向一个已知存在漏洞的 OSS 应用(VAmPI / OWASP crAPI)——一次扫描仅需一个模型密钥,且不会做出任何更改。请参阅 **[docs/TRY_IT.md](docs/TRY_IT.md)**。
## 快速开始(实时环境)
```
pip install -e ".[deploy,console,dev]" # deploy=GitHub PRs, console=web UI, dev=tests
cp .env.example .env # model key(s) + XC creds + GITHUB_TOKEN
# 编辑 config/agents.yaml 来为每个 agent 选择 models
vpcopilot console # scan, apply, PR, retire — all from the UI
# 或者 headless:
vpcopilot scan /path/to/app-repo --out out
```
`scan` 会将结果写入 `out/` 目录(包含 `findings.json`、`triage.json`、`policies/*.json`、代码修复 PR 草稿、`report.html`),并且**不会**对 XC 或 GitHub 进行任何写入操作——可以安全地在任何地方运行。只有在人工批准关卡之后的 `apply` / `pr` / `retire` 阶段,才会发生对实时环境的更改。完整的命令参考:**[docs/USAGE.md](docs/USAGE.md)**。
## 控制台
这是一个遵循完整生命周期的引导式流程——一个固定的顶部显眼横幅(对比于变更控制所需的数天,N 个可利用漏洞在数秒内被实时缓解)位于五个步骤的顶部:
1. **Scan** —— 指向一个 repo;只读,安全。
2. **Review** —— 查看发现结果 + 推荐的 XC 控制措施;点击某一行以检查 exploit / 代码 / 策略。
3. **Mitigate** —— 实时应用每个权宜之计;refiner 会以流式输出 `before 200 → after 403 BLOCKED` 的状态,并带有*在 N 次尝试中自愈* / *无法修复 → 发布代码修复* 的标签。
4. **Cure** —— 为每个发现打开代码修复 PR。
5. **Retire** —— 四状态账本追踪;在其代码解药合并后分离权宜之计。
凭据、XC 状态、各 agent 的模型配置以及可分享的 HTML 报告均位于 **Setup** 下。
**③ Mitigate** —— 应用每个权宜之计并观察其验证过程:

**⑤ Retire** —— 四状态账本(此处的 `crapi-sql-001` 一路走到了 *retired* 状态):

每次扫描还会生成一个独立的、可分享的 **`report.html`** —— 包含相同的显眼横幅以及一目了然的图表、自愈记录(`200 → 403`,*自愈 ×2*)、速率限制的行为证明以及账本:

## 文档
| 文件 | 内容 |
|---|---|
| [docs/TRY_IT.md](docs/TRY_IT.md) | 在你自己的代码库之前,先在安全的 repo(VAmPI / crAPI)上尝试 |
| [docs/DEMO.md](docs/DEMO.md) | 5 分钟运行手册(离线 + 实时) |
| [docs/USAGE.md](docs/USAGE.md) | 完整的 CLI + 控制台参考 |
| [DESIGN.md](DESIGN.md) | 架构 |
| [MODELS.md](MODELS.md) | 跨提供商模型说明 |
| [docs/QUALITY_PLAN.md](docs/QUALITY_PLAN.md) | 质量燃尽 |
| [docs/PROJECT_STATE.md](docs/PROJECT_STATE.md) | 运行时交接 —— 当前状态、基准测试结果、未决事项 |
## 安全与负责任的使用
这是一个**双用途安全工具**。`scan` 是只读的;`apply` / `pr` / `retire` 会更改实时系统,并且验证过程会触发真实的 exploit。请仅对你拥有的或获得明确授权测试的系统使用此工具。报告与安全护栏:[SECURITY.md](SECURITY.md)。
## 许可证
[Apache-2.0](LICENSE)。本项目与 F5, Inc. 没有任何隶属、认可或赞助关系;“F5”和“F5 Distributed Cloud”是 F5, Inc. 的商标,此处引用仅为描述通过其公开 API 进行的互操作。
标签:AI智能体, AppImage, CISA项目, F5, Python, Web应用防火墙, 安全运营, 扫描框架, 无后门, 自动化漏洞修复, 虚拟补丁, 逆向工具