运行时感知的 SCA —— 证明哪些 CVE 实际可达,而不仅仅是已安装。
VulnReach 现已正式成为 OWASP 项目。 🎉




语言支持: Python 已完全可用于生产环境(污点、AST、路由、运行时)。Java 和 JavaScript 具备可用的调用图分析,处于实验阶段。Go、C# 和 PHP 在路线图上。详见 ROADMAP.md。
VulnReach 在标准 SCA 输出之上增加了可达性上下文 —— 通过静态分析、污点跟踪和实时运行时覆盖率,证明检测到的哪些 CVE 在您的应用程序中确实可以被触达。
POST /scan/{id}/cancel 停止进行中的扫描GET /scan/{id} 返回 summary + 分类分桶VULNREACH_ALLOW_DOCKER_DAEMON=true 显式选择启用docker-socket-proxyPOST /findings/{id}/next-steps 为确定性发现生成面向分析师的修复指导(立即行动、验证探针、升级路径、监控)。惰性 / 按需:扫描从不调用 LLM,LLM 失败时优雅降级。确定性判定为只读。详见 docs/api.md。scan.runtime.ebpf 跟踪模式(面向 Linux,显式选择启用)参见:
每个 CVE 都通过五层证据链进行分类:
1. SCA (Trivy) → 该包是否已安装且存在漏洞?
2. 污点分析 (tainter) → 用户输入是否流入易受攻击的汇聚点?
3. AST 分析 → 易受攻击的函数是否在您的调用图中?
4. 路由暴露 → 该调用路径是否可从 HTTP 端点触达?
5. 运行时覆盖率 → 易受攻击的代码是否实际被执行?
结果是分为四个层级的优先发现列表:
| 层级 | 含义 |
|---|---|
DYNAMICALLY_REACHABLE | 运行时覆盖率确认代码被执行 —— 立即修复 |
STATICALLY_REACHABLE | 通过 AST/污点证明代码路径 —— 高优先级 |
UNCERTAIN |
安全须知 —— 在开始之前,将
.env.example复制为.env.local, 并将每个CHANGE_ME值替换为强随机密钥。
在未设置真实凭据并配置CORS_ORIGINS之前,不要将 VulnReach 暴露在公共网络上。
git clone https://github.com/ihrishikesh0896/vulnreach.git
cd vulnreach
# 1. 创建您的本地配置
cp .env.example .env.local
# 2. 填写每个 CHANGE_ME —— 使用 openssl rand -hex 32 生成密钥
$EDITOR .env.local
# 3. 启动整个技术栈
docker compose up --build
# 可选:启用动态运行时扫描(通过受限 socket 代理访问 Docker daemon)
# docker compose -f docker-compose.yml -f docker-compose.runtime.yml up --build
认证选项:
POST /loginSettings -> API Keys 中创建,然后用作 Authorization: Bearer <API_KEY># 获取令牌(替换为您在 .env.local 中设置的凭据)
TOKEN=$(curl -s -X POST http://localhost:8000/login \
-H "Content-Type: application/json" \
-d '{"username":"<your-admin-user>","password":"<your-admin-password>"}' | jq -r .access_token)
# 从 GitHub 仓库开始扫描
curl -X POST http://localhost:8000/scan \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"repo_url":"https://github.com/yourorg/yourapp"}'
# 轮询获取结果
curl http://localhost:8000/scan/<scan_id> \
-H "Authorization: Bearer $TOKEN" | jq .summary
coverage.py 进行基于 Docker 的覆盖率收集policy.block_if 在确认严重发现时使构建失败Authorization: Bearer <API_KEY>)GET /scan/{id}/export/pdfprovider: none;支持 Ollama 以离线使用扫描目标:multi-tier-dvpa —— 一个故意存在漏洞的 Python/Django 应用程序,11 个包中有 72 个原始 CVE。
46% 的发现从无差别的"全部修复"队列中移出,进入优先级行动列表。在典型的生产服务中(许多传递依赖从未被调用),这一数字可升至 70–90%。
完整方法论、证据链详情和包级细分: docs/benchmark.md
scan.yml 配置参考trivy 在 PATH 中(安装)jq(用于快速开始示例 —— 安装)可选(缺失时均优雅跳过):
semgrep —— pip install semgreptainter —— pip install tainter(污点流分析;参见开发指南)Apache 2.0 —— 参见 LICENSE。
| 仅有弱信号 —— 需调查 |
NOT_REACHABLE | 无证据 —— 从告警队列中抑制 |
| 层级 | 结果 |
|---|
| 原始 CVE(Trivy) | 72 |
| 已分类发现(VulnReach) | 90 |
| DYNAMICALLY_REACHABLE —— 立即修复 | 49 |
| STATICALLY_REACHABLE —— 本迭代修复 | 23 |
| UNCERTAIN —— 需调查 | 18 |
| NOT_REACHABLE —— 抑制 | 0 |
| CI 流水线门禁 | BLOCKED |