一个闭环漏洞修复流水线:检测 → 复现漏洞利用 → 生成补丁 → 通过验证框架验证补丁——在任何修复被信任之前。
大多数“AI 修复你的 CVE”演示都止步于生成补丁。kavach-loop 拒绝信任补丁,直到它针对真实运行的实例证明了以下两件事:(1) 原始漏洞利用不再有效,(2) 应用仍能正常运行。示例是一个真实的严重 CVE。
⚠️ 范围与安全: 每个涉及网络的模块都硬锁定到 localhost(
127.0.0.1/::1),并拒绝任何其他目标。漏洞利用代码的存在是为了证明补丁能对你自行运行的一次性容器生效——而不是为了攻击任何东西。请仅针对捆绑的目标运行此工具。
Langflow ≤ 1.8.2 中的未认证远程代码执行——GHSA-vwmf-pq79-vjvx / NVD。POST /api/v1/build_public_tmp/{flow_id}/flow 在无认证的情况下构建一个公开流程;攻击者提供的节点 code 在无沙箱的情况下到达 exec(),通过从路由处理器到 sink 的六跳调用链。
flowchart LR
T["exploit_repro/<br/>disposable Langflow 1.8.2<br/>container (localhost only)"]
D["detection/<br/>Semgrep rule over<br/>live-extracted source"]
E["exploit_repro/exploit.py<br/>PoC: confirm RCE is real"]
P["patch_gen/<br/>LLM unified diff,<br/>applied to a real copy"]
V["proof_harness/verify.py<br/>exploit blocked? + app<br/>still works? → one verdict"]
T --> D --> E --> P --> V
V -->|fused confidence score| OUT["trusted / rejected"]
| 阶段 | 模块 | 它实际做了什么 |
|---|---|---|
| 检测 | detection/detect.py + rules/unauthenticated-exec-sink.yaml | 对从目标容器实时拉取的源代码运行一次真实的 Semgrep 扫描。该规则如实标记出可可靠检测的前置条件(未认证路由将攻击者构造的输入转发到下游调用),而非完整的六跳污点分析——并且明确说明了这一点,标记为 confidence: LOW,因此每次命中仍需人工确认。 |
| 复现 | exploit_repro/exploit.py | 仅限 localhost 的 PoC,用于确认 RCE 确实会触发,从而确保我们修补的是真实漏洞,而非静态分析的猜测。 |
| 修补 | patch_gen/generate.py | 从运行中的容器获取漏洞函数的真实当前源代码,检索 1–2 个参考修复模式,请求 LLM 生成统一 diff,然后将其应用到第二个一次性容器并重启,使修补后的代码重新加载。 |
| 验证 | proof_harness/verify.py + test_functionality.py | 将两项检查融合为一个结论:PoC 现在必须失败,并且 Langflow 正常的已认证 REST API(健康检查、版本、whoami、流程 CRUD)必须仍然通过。通过掏空应用来阻止漏洞利用的补丁会被拒绝。 |
诚实是关键:检测规则准确记录了它能证明什么、不能证明什么,而验证器拒绝仅因漏洞利用停止工作就判定补丁合格。
pip install -r requirements.txt # requests, pytest, openai, semgrep
export OPENAI_API_KEY=... # for patch_gen
cd exploit_repro/langflow-cve-2026-33017
docker compose up -d # vulnerable target on 127.0.0.1:7860
curl -s http://127.0.0.1:7860/health
cd ../..
python detection/detect.py # static-analysis finding
python exploit_repro/exploit.py # confirm the RCE (localhost only)
python patch_gen/generate.py # generate + apply + verify a patch
pytest proof_harness/ # functionality smoke tests
停止并清除:docker compose down -v。
各个阶段(检测、漏洞复现、补丁生成、验证 harness)均已实现,并针对真实目标运行。main.py 是一个轻量的编排骨架——目前各阶段按上述方式直接驱动。将它们接入单个 main() 调用是下一步工作。
Kavach(कवच)在梵语中意为“盔甲”。这个循环就是盔甲:在它被攻击并证明能够守住之前,任何东西都不会发布。