You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Add render_template.py to omv-report — takes an Evidence.v1 YAML and
renders a pre-filled report skeleton for vuldb, ghsa, osv, or md formats.
Structural fields (package, versions, CVSS, CWE, source→sink→guard,
reproducer, dedup checklist) are filled deterministically; prose sections
carry [DRAFT: ...] markers for Claude to complete.
- Gates on status:confirmed + submission_score≥75 (--force bypasses)
- OSV emits pure JSON; VulDB/GHSA/MD emit Markdown with score footer
- Score computation mirrors contracts/evidence.v1.yaml scoring guide
- Adds confirmed-prototype-pollution.yaml fixture (100/100 scores)
- Adds four golden files (vuldb/ghsa/osv/md) for exact-match regression
- release_check.py: validate_renderer() runs all four formats at release time
- SKILL.md: confirmed path now documents running the renderer for a skeleton
Copy file name to clipboardExpand all lines: skills/omv-report/SKILL.md
+18Lines changed: 18 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -59,6 +59,24 @@ Use the validation result to choose output mode:
59
59
-`submissionScore` below 75 or `verdict.exploitability` not `proven`: do not produce a submission-ready report; explain what evidence or reproduction artifact is missing.
60
60
-`evidence.repro_artifacts` present: reference the artifacts as local reviewer evidence. If absent, warn that the report depends only on inline reproducer text.
61
61
62
+
### Deterministic Skeleton Renderer
63
+
64
+
For confirmed findings with submission score ≥ 75, run the deterministic renderer first to get a pre-filled skeleton:
The renderer fills all structural fields (package, versions, CVSS, CWE, source→sink→guard, reproducer, dedup checklist) and leaves `[DRAFT: ...]` markers for prose sections. Fill in every `[DRAFT: ...]` before submitting. Do not submit placeholders.
79
+
62
80
After producing a submission-ready report for a confirmed finding, suggest removing it from the active local queue:
[DRAFT: One paragraph: Prototype Pollution in demo-merge up to and including 2.4.1, classified as CWE-1321. Local reproducer confirmed Object.prototype mutation via __proto__ injection]
5
+
6
+
## Affected Versions
7
+
- Package: `npm:demo-merge`
8
+
- Tested version: `2.4.1`
9
+
- Affected range: `up to and including 2.4.1`
10
+
- Fixed version: `2.4.2`
11
+
12
+
## Technical Details
13
+
14
+
- Source: JSON.parse(req.body) passed to mergeDeep()
15
+
- Sink: target[key] = value in mergeDeep() at src/merge.js:42
16
+
- Guard: no blocklist for __proto__, constructor, prototype
17
+
18
+
Affected file: `src/merge.js`
19
+
Affected function: `mergeDeep()`
20
+
21
+
[DRAFT: Explain the root cause and why the guard is insufficient or absent.]
"summary": "demo-merge: Prototype Pollution in mergeDeep()",
7
+
"details": "[DRAFT: Root cause, affected component (src/merge.js mergeDeep()), impact, and attack requirements.] Source: JSON.parse(req.body) passed to mergeDeep() \u2192 Sink: target[key] = value in mergeDeep() at src/merge.js:42 \u2192 Guard: no blocklist for __proto__, constructor, prototype Observed: prints 'yes' confirming Object.prototype mutation",
8
+
"affected": [
9
+
{
10
+
"package": {
11
+
"ecosystem": "npm",
12
+
"name": "demo-merge"
13
+
},
14
+
"ranges": [
15
+
{
16
+
"type": "SEMVER",
17
+
"events": [
18
+
{
19
+
"introduced": "0"
20
+
},
21
+
{
22
+
"fixed": "2.4.2"
23
+
}
24
+
]
25
+
}
26
+
],
27
+
"versions": [
28
+
"2.4.1"
29
+
],
30
+
"database_specific": {
31
+
"cwe_ids": [
32
+
"CWE-1321"
33
+
],
34
+
"source": "Source: JSON.parse(req.body) passed to mergeDeep() \u2192 Sink: target[key] = value in mergeDeep() at src/merge.js:42 \u2192 Guard: no blocklist for __proto__, constructor, prototype"
0 commit comments