Kuestenlogik/Bowire.VulnDb

GitHub: Kuestenlogik/Bowire.VulnDb

Bowire 安全扫描器的社区驱动多协议 API 漏洞模板库,提供覆盖 gRPC、GraphQL、REST 等协议的可重放安全检测规则。

Stars: 0 | Forks: 0

# Bowire.VulnDb **Bowire 安全扫描器的社区漏洞数据库。** 这是供 `bowire scan` 使用的多协议 API 安全模板。每个已知的漏洞或错误配置模式对应一个 YAML/JSON 文件;扫描器会遍历这些模板,针对目标重放每个模板的探测请求,根据响应评估断言,并输出结果。 作为 [Bowire 的 ADR](https://github.com/Kuestenlogik/Bowire/blob/main/docs/architecture/security-testing.md) 中定义的安全测试路线的核心仓库。采用 MIT 许可证;欢迎通过 PR 进行社区贡献。 ## 快速开始 ``` # 安装 bowire(如果已经安装请跳过) dotnet tool install -g Kuestenlogik.Bowire.Tool # 将精选的 template 集获取到本地缓存中(~/.bowire/vulndb)。 # 拉取最新的 GitHub release;无需 git clone。 bowire vulndb update # 针对你的 target 运行所有缓存的 template — scan 默认读取缓存, # 因此不需要 --templates flag。 bowire scan --target https://your-api.example.com # 查看缓存的内容 bowire vulndb list ``` `bowire vulndb update` 是唯一的对外网络调用,且仅仅是因为你手动执行了它。 对于气隙隔离 / 固定版本的安装,可以将 `--source` 指向仓库检出代码、一个发布版 `.tar.gz` 或一个 URL,或者使用 `--ref` 来固定某个发布版本: ``` bowire vulndb update --source ./Bowire.VulnDb # a local checkout / mirror bowire vulndb update --source bowire-vulndb-templates-v0.1.0.tar.gz bowire vulndb update --ref v0.1.0 # pin a release ``` 要显式运行单个模板(或一个文件夹)——显式指定的 `--template` / `--templates` 始终优先于缓存: ``` bowire scan --target https://your-api.example.com --template templates/graphql/introspection-enabled.json bowire scan --target https://your-api.example.com --templates templates/graphql ``` ## 模板目录结构 ``` templates/ grpc/ ← gRPC-specific findings (reflection, oversized-message, …) graphql/ ← GraphQL-specific findings (introspection, deep-nesting, …) rest/ ← REST / generic HTTP findings (security headers, open redirect, …) odata/ ← OData-specific findings ($expand IDOR, $filter injection, …) signalr/ ← SignalR hub findings (anonymous negotiate, group bypass, …) websocket/ ← WebSocket findings (origin check missing, subprotocol confusion) socketio/ ← Socket.IO findings (anonymous handshake, …) sse/ ← Server-Sent Events findings (unauthenticated stream, …) mcp/ ← Model Context Protocol findings (anonymous tools/list, …) ``` ### 这里*不*包含的内容:原生传输协议 模板的探测请求是通过 **HTTP** 重放的——扫描器的运行器基于 HttpClient。因此,上述每个目录都可以通过 HTTP 访问,无论是 原生支持(REST / GraphQL / OData / gRPC-Web / MCP)还是通过 HTTP 握手 (WebSocket 升级、SignalR 协商、Socket.IO 握手、SSE 流)。 **MQTT-over-TCP 没有 HTTP 接口,因此它没有模板结构。** 它的覆盖范围 作为原生探测内置于扫描器中 ([`Kuestenlogik/Bowire`](https://github.com/Kuestenlogik/Bowire), `src/Kuestenlogik.Bowire.Security.Scanner/`):匿名访问、通配符订阅 权限、保留消息污染和遗嘱消息滥用。运行命令为 `bowire scan --target mqtt://broker:1883 --suite protocol`。新的 MQTT CVE 仍然会由本仓库每月的 NVD 同步进行筛选——它只是作为那里的探测 而不是这里的模板出现。 每个模板都是一个 JSON 文件,其文件名保持稳定并与模板 ID 匹配(小写、以连字符分隔)。 ## 模板格式 模板是一个标准的 Bowire `BowireRecording`,其中包含扫描器会使用的三个额外字段。最小示例: ``` { "id": "bwr-graphql-001-introspection", "name": "GraphQL __schema introspection enabled in production", "attack": true, "vulnerability": { "id": "BWR-GRAPHQL-001", "cwe": "CWE-200", "owaspApi": "API3-2023-BOPLA", "severity": "medium", "cvss": 5.3, "protocols": ["graphql"], "remediation": "Disable introspection in production…" }, "steps": [ { "id": "probe-1", "protocol": "graphql", "httpVerb": "POST", "httpPath": "/graphql", "body": "{\"query\":\"{ __schema { types { name } } }\"}" } ], "vulnerableWhen": { "allOf": [ { "status": 200 }, { "bodyJsonPath": { "path": "$.data.__schema.types", "exists": true } } ] } } ``` 完整的 schema 记录在 [`docs/template-schema.md`](docs/template-schema.md) 中。 ## CI 验证 每个 PR 都会针对一个被故意错误配置以触发该发现的目标([`Kuestenlogik.Bowire.Samples.Vulnerable`](https://github.com/Kuestenlogik/Bowire.Samples/tree/main/src/Kuestenlogik.Bowire.Samples.Vulnerable)),运行新增和修改的模板。每个模板需要通过两项测试: - **正向测试** — 模板必须对易受攻击的样本触发报告(否则断言无效)。 - **反向测试** — 模板必须对已修复 / 加固的变体保持静默(否则断言过于宽松)。 未同时通过这两项测试的 PR 将被阻止合并。请参阅 [`.github/workflows/validate.yml`](.github/workflows/validate.yml)。 ## NVD 同步 每月一次的 workflow([`.github/workflows/nvd-sync.yml`](.github/workflows/nvd-sync.yml) → [`scripts/nvd-sync.mjs`](scripts/nvd-sync.mjs))会查询国家漏洞数据库,查找 Bowire 探测的协议接口上最新发布的 CVE,并为每个尚无模板的 CVE 打开一个带有 [`nvd-sync`](https://github.com/Kuestenlogik/Bowire.VulnDb/issues?q=label%3Anvd-sync) 标签的跟踪 issue —— 这就是新模板的筛选队列。它会针对现有的 issue 和覆盖型模板进行去重,限制每次运行打开的 issue 数量,并且从不自行编写模板。可以使用 `node scripts/nvd-sync.mjs --dry-run` 在本地以只读模式运行它。 ## 许可证 **MIT**(详见 [`LICENSE`](LICENSE))。 为什么这里是 MIT,而其他所有的 Bowire 仓库都是 Apache 2.0?因为本仓库是模板集,而不是软件。使用这些模板的扫描器在 [`Kuestenlogik/Bowire`](https://github.com/Kuestenlogik/Bowire) 中采用 Apache 2.0 许可证;本仓库中的 JSON 文件描述的是公开已知的漏洞和错误配置。安全模板集的事实标准是 MIT —— [`projectdiscovery/nuclei-templates`](https://github.com/projectdiscovery/nuclei-templates) 采用的是 MIT,并且 Bowire 的扫描器会通过同一个引擎读取这两套模板。符合该惯例可以保持两者的互换性。模板是对公开漏洞和错误配置的事实描述;JSON 结构本身就是我们的贡献。
标签:API安全, CISA项目, Homebrew安装, JSON输出, 主机安全, 多人体追踪, 数据可视化, 模板库, 漏洞检测规则, 自定义脚本