Hinotoi-agent/vulnweave

GitHub: Hinotoi-agent/vulnweave

VulnWeave 是一款本地优先的安全研究图谱工具,将源代码安全事实与 Obsidian 漏洞笔记连接起来,辅助人工审查者完成候选证明、重复检查和漏洞库管理。

Stars: 0 | Forks: 0

# VulnWeave **VulnWeave** 是一款本地优先的漏洞研究图谱工具,专为那些审查源代码、证明安全发现以及维护长期漏洞库的人员而设计。 它将通常分散在不同地方的两部分安全研究连接了起来: 1. **代码证据** —— 从源仓库中提取的安全相关事实:命令、scope/tenant 意图、直接加载 sink 和不变量违规。 2. **研究记忆** —— Obsidian 漏洞笔记、目标、CWE、标签、PR、CVE 以及重复/变体关系。 其目标并不是取代人工审查。VulnWeave 为审查者提供了一个图谱形工作台:映射仓库,浮现候选不变量,证明或驳回候选对象,然后将发现与先前的工作连接起来,从而使重复检查和变体搜寻随着时间的推移变得更加容易。 ## 为什么会有这个项目 安全发现很少是孤立的事实。一份有价值的报告通常依赖于类似如下的链条: ``` entry point -> trust boundary -> identity/scope assumption -> sensitive sink -> proof -> patch/report history ``` 大多数工具都会丢失这种上下文: - SAST 工具能找到嘈杂的语法模式,但不知道你先前的重复判定。 - 笔记记录了人类的判断,但很难跨仓库、CWE、PR 和变体进行查询。 - PR 和漏洞披露记录了结果,但与源代码级的证据脱节。 VulnWeave 试图让这种链条变得明确且可重用。 ## VulnWeave 目前能做什么 ### 源代码仓库图谱 `vulnweave map` 会遍历源代码树并生成一个小型的安全相关图谱。目前的 MVP 可识别以下模式: - 类似于 `CommandSpec(name="/resume", remote_invocable=True)` 的命令/控制平面注册 - 提及 `sender`、`user` 或 `tenant` 等字段的 actor/scope 构建 - 诸如 `load_by_id`、`get_by_id` 和 `read_by_id` 之类的直接对象/session 加载 sink - provider endpoint 重写、凭据来源、HTTP 请求 sink 和 endpoint 验证守卫 - 文件系统写入/提取 sink 附近的路径验证守卫,用于 symlink/TOCTOU 审查 - 到达 shell/process 执行 sink 的由调用者控制的命令参数 - 在没有 endpoint 守卫的情况下到达出站 HTTP 请求的、由调用者控制的 URL 参数 - 诸如远程控制平面命令 + scoped session 意图 + 全局直接加载 sink 等不变量 ### 候选审查 `vulnweave candidates` 读取源仓库或已持久化的图谱目录,并打印带有支持性证据的审查候选对象。这些**不是自动的漏洞声明**;它们是用于人工证明的结构化提示。 ### 候选到漏洞导出 `vulnweave export-finding` 将源代码候选对象桥接到 Obsidian 漏洞笔记中。它接收一个候选 ID,写入一份包含 frontmatter、证据、证明策略、重复检查清单以及补丁/披露占位符的草稿笔记,然后该笔记可以并入 `vulnweave vault-graph`。 ### 漏洞库图谱 `vulnweave vault-graph` 扫描 Obsidian vault 并生成图谱产物,有助于: - 在开启新 issue 或 PR 之前进行重复检查 - 跨仓库和 bug 类别进行同级/变体搜寻 - 按目标、CWE、CVE、标签或披露状态进行覆盖范围审查 - 保持公开的 PR、笔记和目标页面相互连接 vault 扫描器读取常规 Markdown 以及可选的 YAML frontmatter。它会提取: - 漏洞笔记和目标笔记 - wikilink 和 hashtag - CWE/CVE 提及 - GitHub 仓库和 pull request URL - 诸如 `type`、`target`、`status`、`severity`、`cwe`、`tags`、`pr` 和 `repo` 的 frontmatter 字段 ## 安装 对于本地开发: ``` git clone https://github.com/Hinotoi-agent/vulnweave cd vulnweave python3 -m venv .venv source .venv/bin/activate python -m pip install --upgrade pip python -m pip install -e ".[dev]" vulnweave --help ``` 旧的 `security-kg` 命令目前仍作为兼容性别名保留: ``` security-kg --help ``` 如果你只想从检出的代码中运行而不安装它: ``` PYTHONPATH=src python -m security_kg.cli --help ``` ## 快速开始 运行内置的冒烟测试 fixture: ``` vulnweave map examples/remote_resume_drift --out /tmp/vulnweave-smoke vulnweave candidates /tmp/vulnweave-smoke vulnweave vault-graph --vault examples/vault --dry-run vulnweave doctor --repo examples/remote_resume_drift --graph /tmp/vulnweave-smoke --vault examples/vault ``` 你应该会看到一个映射图谱摘要、至少一个来自该 fixture 的由不变量支持的候选对象、一次 vault 图谱试运行摘要,以及通过的 doctor 检查。 ## 源代码仓库工作流 映射一个仓库并打印简短摘要: ``` vulnweave map /path/to/repo ``` 持久化图谱以供日后审查: ``` vulnweave map /path/to/repo --out /path/to/repo/.vulnweave ``` 从实时仓库路径或已持久化的图谱中查找候选对象: ``` vulnweave candidates /path/to/repo vulnweave candidates /path/to/repo/.vulnweave ``` 输出机器可读的格式: ``` vulnweave map /path/to/repo --json vulnweave candidates /path/to/repo/.vulnweave --json ``` 将候选对象导出为 vault 漏洞笔记: ``` vulnweave export-finding /path/to/repo/.vulnweave \ --candidate resume-load_by_id-3 \ --vault /path/to/example-vault \ --target "Target - Example App" \ --repo-url https://github.com/example-org/example-repo ``` 导出的笔记包含 YAML frontmatter、图谱路径、证据、证明策略、CVSS 评估清单、重复检查清单、复现占位符、补丁/PR 笔记以及披露/CVE 笔记。 一个典型的候选审查循环如下所示: ``` map repo -> inspect candidates -> read the exact source paths and functions in the evidence -> reproduce or reject the suspected trust-boundary drift -> search prior findings/PRs/CVEs for duplicates -> write a maintainer-safe patch or report -> add the finding to the vault -> rebuild the vault graph ``` ## Obsidian 漏洞库工作流 在 vault 中构建图谱产物: ``` vulnweave vault-graph \ --vault "/path/to/example-vault" \ --findings-dir "03 - Findings" \ --targets-dir "02 - Targets" \ --output-dir "99 - Graph" ``` 试运行而不写入文件: ``` vulnweave vault-graph --vault /path/to/example-vault --dry-run ``` 打印重复、过期草稿、缺失字段和变体搜寻提示: ``` vulnweave vault-insights --vault /path/to/example-vault ``` 该命令会写入: - `vulnweave-graph.json` —— 用于脚本、仪表板或后续导入程序的机器可读图谱 - `VulnWeave Graph.canvas` —— 展示漏洞、目标、标签、CWE、CVE、repo 和 PR 的 Obsidian Canvas 视图 - `VulnWeave Graph.md` —— 包含摘要计数、链接和 Dataview 助手的仪表板笔记 ## 建议的笔记约定 VulnWeave 可处理普通的 Markdown,但当漏洞使用可预测的 frontmatter 时,它会变得更加有用: ``` --- type: finding target: Target - Example App status: draft severity: High cwe: CWE-94 tags: - prompt-injection - remote-to-local pr: https://github.com/example-org/example-repo/pull/123 repo: https://github.com/example-org/example-repo --- ``` 正文可以使用正常的 Obsidian 链接和标签: ``` Links to [[Target - Example App]] and #remote-to-local. Related class: CWE-94. Possible duplicate: https://github.com/example-org/example-repo/pull/123 ``` 建议的漏洞部分: - **边界** —— 谁控制输入以及跨越了什么信任边界? - **CVSS 评估** —— 哪些权限、拓扑假设以及已证实的 C/I/A 影响支持该评分?当维护者有理由要求降低评分时,保留一个保守的替代方案。 - **不变量** —— 本应坚持什么安全属性? - **证据** —— 源代码路径、函数、图谱节点、日志或屏幕截图。 - **证明策略** —— 确认影响所需的最小安全复现步骤。 - **重复检查** —— 相关的 issue、PR、CVE、安全公告和先前的笔记。 - **补丁/报告备注** —— 对维护者安全的框架描述和修复方向。 ## 端到端工作流 ``` source repo -> vulnweave map -> vulnweave candidates -> local proof / duplicate check / patch -> vault finding note -> vulnweave vault-graph -> Obsidian duplicate, coverage, and variant review ``` ## 输出模型 VulnWeave 目前使用简单的 JSON/JSONL 产物,因此数据易于检查和编写脚本: - `meta.json` —— 图谱元数据和源代码根目录,包括 `schema_version: vulnweave.graph.v1` - `nodes.jsonl` —— 每行一个图谱节点 - `edges.jsonl` —— 每行一条图谱边 - `vulnweave-graph.json` —— 合并后的 vault 图谱导出文件,包含 `schema_version: vulnweave.vault_graph.v1` JSON 候选输出使用 `schema_version: vulnweave.candidates.v1`。这使得该工具保持本地优先,并在 schema 仍在演进时避免要求使用数据库。 ## Doctor 检查 使用 `doctor` 检查本地路径和预期的图谱/vault 结构: ``` vulnweave doctor --repo /path/to/repo --graph /path/to/repo/.vulnweave --vault /path/to/example-vault ``` ## 开发 ``` python -m pip install --upgrade pip python -m pip install -e ".[dev]" python -m pytest -q python -m ruff check src tests examples python -m compileall -q src tests examples ``` CI 会在 Python 3.9 和 3.12 上运行相同的核心检查。 ## 设计原则 - **本地优先:** 除非你选择发布结果,否则源代码仓库和 vault 将保留在你的机器上。 - **证据重于声明:** 候选对象应指向具体的路径、符号和关系。 - **人类在环:** 该工具支持证明和报告;它不会替你声明 CVE。 - **图谱形记忆:** 每一个发现都应变得更容易与先前的发现进行比较。 - **普通文件优先:** JSONL 和 Markdown 优先,仅在工作流需要时才使用数据库。 ## 路线图 近期: - 改进过程间可达性和特定于框架的 handler 映射。 - 在 Python 之外添加更多语言前端。 - 添加置信度评分和对已知安全模式的抑制/允许列表支持。 - 添加更丰富的 vault 老化/状态分析以及可选的 GitHub PR 状态同步。 长期: - 交互式图谱仪表板。 - 从候选证据生成证明骨架。 - 跨仓库 bug 类别聚类。 - 用于 SARIF、GitHub issue 和披露跟踪器的导入/导出桥接。 ## 状态 VulnWeave 是一个早期的 MVP。请将其用作研究助手和工作流脚手架,而不是完整的扫描器。
标签:GPT, Homebrew安装, 云安全监控, 时序数据库, 本地优先, 漏洞管理, 逆向工具, 防御加固, 静态分析