Omv audit
Evidence-first vulnerability research workspace and Skills for Claude Code and Codex.
npx -y skills add bx33661/oh-my-vul --skill omv-auditAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 3 stars3 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Deep-audits a candidate finding from an Evidence.v1 file. Use when the user has an omv-find result they want to investigate further, wants to prove or disprove a vulnerability, needs to fill Evidence.v1 fields for omv-report, or invokes `/omv-audit`. Reads .omv/findings/<id>.yaml and produces a confirmed or blocked finding with all required evidence fields populated.
SKILL.md
10.7 KB, as published. Nobody here has run it
omv-audit
深度审计一个 candidate 漏洞发现,填充 Evidence.v1 文件,为 /omv-report 做好准备。
Stay in passive research mode: read public source code only. Do not send requests to live services, do not auto-execute PoC code. Local analysis, static reasoning, and local test descriptions are allowed.
Invocation
/omv-audit <id> [--force]
<id>对应.omv/findings/<id>.yaml文件--force允许重新审计已为 confirmed/blocked 的文件
Reference Loading
按需加载,不要一次性全读:
- 审计方法论与置信度框架:
references/audit-playbook.md - CVSS v3.1 度量决策表:
references/shared/cvss-builder.md - 14 个生态的 PatternPack manifest 位于
references/pattern-packs/,对应 Markdown registry 位于references/patterns/ - Evidence.v1 字段定义与 evidence/submission 评分规则:
contracts/evidence.v1.yaml - ThreatMap.v1 图证据字段:
contracts/threat-map.v1.yaml - Verification.v1 对抗复核 sidecar:
contracts/verification.v1.yaml
审计目标
读取 .omv/findings/<id>.yaml 后,你的目标是将以下字段填写为具体、可验证的值(非 unknown):
必填(confirmed 所需)
versions.tested— 实际测试的版本号evidence.source— 攻击者可控的输入入口(含 file:line)evidence.sink— 危险操作(含 file:line)evidence.guard— 缺失或可绕过的防御(含 file:line 或"不存在"的说明)evidence.reproducer— 本地复现步骤描述evidence.observed_result— 本地运行后实际观测到的结果(若 passive 模式无法在本地执行,保留unknown,在provenance.unverified_fields中列出,交由/omv-repro完成)cvss.vector/cvss.score/cvss.severitydedup.*— NVD/GHSA/生态系统数据库检索结果verdict.*— 当前可利用性判断(proven|plausible|blocked|disproven)、置信度和原因
如何达到目标,由你自主决定。 根据 finding 的实际情况——漏洞类别、已有线索、代码结构——自主选择切入点、阅读哪些文件、花多少精力在每个环节。参考 references/audit-playbook.md 获取思维框架,但不要把它当作执行脚本。
如果 finding 属于任一受支持生态,先加载 references/pattern-packs/ 下对应 JSON,再按需加载 references/patterns/ 下对应 Markdown registry,用其中的 source pattern、sink signature、expected guard、evidence criteria、false-positive checks 和 CWE 映射辅助判断。Pattern registry 是方法论,不是真实漏洞案例库;不要加载无关生态 registry。
当证据链足够清楚时,生成可选 ThreatMap.v1 sidecar,记录 source → transform → sink 的 dataflow 路径:
omv threat-map init <id>
这会在 .omv/threatmaps/<id>.yaml 生成骨架(finding_id 和 package 块已从 finding 填好,paths: [] 留待填写)。然后在每个已确认的 source → sink 路径下补一条 paths[] 条目:source(type/location/description)、transforms[](中间每一步:parse/decode/normalize/validate/authorize)、sink、guard(present/bypassable)、confidence。Schema 见 contracts/threat-map.v1.yaml。ThreatMap 是 Evidence.v1 的补充,不替代 evidence.source / evidence.sink / evidence.guard 摘要字段;sidecar 不修改父 Evidence.v1 文件。填写后运行 omv threat-map validate <id>。
如果进行了 verifier 对抗复核,先运行 omv verification init <id>,再把 verifier 的结论写入 .omv/verifications/<id>.yaml:同意则 decision.status: pass;找到反证则 decision.status: fail 并填写 disagreements / required_changes。写完运行 omv verification validate <id>。不要只把 verifier 结论留在聊天记录里。
解释审计结论时使用方法论语言:说明输入如何到达 sink、guard 为什么缺失或可绕过、哪些证据仍不充分。除非用户提供真实 finding 作为上下文,否则不要把真实包或真实 CVE 当作教程示例。
约束边界
以下是硬约束,不可逾越:
- 不攻击线上服务 — 所有分析基于公开源代码和本地环境
- 不自动执行 PoC —
evidence.reproducer只写步骤描述,不自动运行 - submission score < 75 时不得升为 confirmed — 低分时保留
candidate状态并列出缺失项 - blocked 必须填写
blockers列表 — 每条 blocker 说明具体原因 - 不伪造证据 — 无法验证的字段保留
unknown,在provenance.unverified_fields中列出 - CLI validation 是硬门槛 — 只有
omv findings validate <id>返回 OK 时,才允许把结论作为 confirmed 交给/omv-report
HARD-GATE: evidence before confirmed
NO status: confirmed WITHOUT:
- concrete evidence.source / sink / guard (prefer file:line)
- omv findings validate <id> OK in this turn when omv is available
- submission score ≥ 75
- no unresolved blockers
NO exploitability: proven WITHOUT non-unknown observed_result (or explicit user observation recorded)
NO "ready to submit" LANGUAGE — that is omv review --strict, not audit
If validate fails after you tried confirmed, revert to candidate, list errors, stop.
Subagent Team Orchestration
本 skill 支持 Codex 和 Claude Code 的 subagent 编排。你在审计流程中可以显式委托给专门的 subagent 角色,让它们在独立的 context 里并行或串行完成子任务:
# 数据流分析 → 交给 dataflow-tracer subagent(2-5 个文件静态分析)
Use the dataflow-tracer subagent to analyze: [finding_id], [package_url], [vuln_class]
# Guard 可绕过性评估 → 交给 guard-checker subagent(独立 context + bypass-bias)
Use the guard-checker subagent to evaluate whether the guard at [file:line] is bypassable
# CVSS 评分 → 交给 cvss-analyst subagent(纯推理,无网络访问)
Use the cvss-analyst subagent to compute CVSS for: [vuln_class], [impact_fields]
# 去重检索 → 交给 dedup-analyst subagent(WebSearch + WebFetch)
Use the dedup-analyst subagent to check duplicates for: [ecosystem], [package], [vuln_class]
# 对抗复核 → 交给 verifier subagent(默认反驳 bias),并写入 Verification.v1
Use the verifier subagent to refute the dataflow-tracer's conclusion for: [finding_id], then record the result in .omv/verifications/<id>.yaml
推荐编排序列(全量审计)
stage 1: dataflow-tracer → {source, sink, guard_note}
stage 2: guard-checker → {bypassable, method}(仅在 guard 存在时调)
stage 3: dedup-analyst → {dedup 状态}(与 stage 1 并行)
stage 4: cvss-analyst → {vector, score, severity}
stage 5: verifier → 对抗复核 source→sink 链,输出 Verification.v1 review
stage 6: synthesize → 汇聚后写 Evidence.v1 + ThreatMap.v1 + Verification.v1
编排决策规则:已知的字段跳过对应阶段(例如 dedup 已 searched 则跳过 stage 3;cvss 已填则跳过 stage 4)。Subagent 调用是建议而非强制——你可以在单 context 内完成全部审计或用 subagent 协助部分环节,取决于 finding 复杂度和你的判断。无论是否使用 subagent,只要做了对抗复核,结论都必须记录到 Verification.v1 sidecar。
Subagent 可用性
Codex 使用当前会话提供的原生 delegation 能力;Claude Code 使用 omv setup --platform claude-code 安装到 .claude/agents/ 的角色定义。若当前客户端没有 subagent 能力,在主 context 中顺序完成同样的审计阶段,不得因此跳过证据门槛。
结论规则
审计结束后根据证据完整性选择结论:
| 结论 | 触发条件 | 下一步 |
|---|---|---|
confirmed | 五项 source/sink/guard/reproducer/result 全部已知,submission score ≥ 75 | 运行 omv findings validate <id>,提示用户运行 /omv-report |
blocked | 证据链断裂,或发现疑似重复 CVE,或无法本地复现 | 填写 blockers,运行 omv findings validate <id>(预期 FAIL) |
candidate(保留) | 部分字段已填但 submission score 不足;或 observed_result 为 unknown 但其他字段已填 | 展示缺失项清单;若仅缺 observed_result,提示运行 /omv-repro <id> |
同时更新 verdict:
- 已本地证明可利用:
exploitability: proven,confidence: high|medium - 证据链合理但未复现:
exploitability: plausible,confidence: medium|low - 默认防护、环境前置或证据断裂阻止利用:
exploitability: blocked - 审计证明不是漏洞:
exploitability: disproven
如果尝试 confirmed 但 CLI validation 失败,必须保持或恢复为 candidate,逐条展示 validation errors,不得提示用户提交报告。
审计结束时始终运行:
omv findings validate <id>
然后运行或建议:
omv dashboard
如本轮做出关键判断(确认 source -> sink、发现 guard 缺失、判定重复或 blocked),在 .omv/notes/<id>.md 追加一条时间戳决策记录。不要把 notebook 内容写入 Evidence.v1。
Use the CLI result for lifecycle handoff:
- If the finding remains
candidatebecause onlyevidence.observed_resultis missing, tell the user to run/omv-repro <id>. - If the finding is
confirmedand validation returns OK, tell the user to run/omv-report <id>. - If the finding is
blocked, tell the user to review blockers and optionally runomv findings archive <id> --reason blocked.
Deterministic Helpers
omv findings validate <id>— 校验字段完整性,输出 evidence/submission 分数omv findings promote <id> --status confirmed|blocked— 更新 status 字段omv threat-map init <id>— 生成.omv/threatmaps/<id>.yamlThreatMap.v1 dataflow 骨架omv threat-map validate <id>— 校验 ThreatMap.v1 图证据和 Evidence 摘要一致性omv verification init <id>— 生成.omv/verifications/<id>.yamlVerification.v1 对抗复核骨架omv verification validate <id>— 校验 Verification.v1 和 Evidence hash 是否过期omv dashboard— 显示 active findings 的下一步动作python3 scripts/resolve_source_path.py --ecosystem npm --pkg <name>(Windows 使用py -3)— 获取源文件 raw URLpython3 scripts/collect_metadata.py --repo <github-url>(Windows 使用py -3)— 获取仓库元数据