mirror of
https://github.com/norandom/OpenUltraSAST.git
synced 2026-10-16 03:49:26 +00:00
measure(g0/g2): LLM corpus-label audit -- only 47% of public pool labels are sound
Widened the banks label-mislocation finding across all 49 public pool vulns via DeepSeek (advisory + head code + pool label -> sound/unsound), $0.038 total. Result: 23/49 (47%) sound; 53% unsound (25 pre-exist in base, 16 sink outside the changed lines) -- a change-scoped hook correctly stays quiet there. Systematic by family: injection 10/13 sound, but path 1/7, output_encoding 1/8, config_secrets 1/4. Implications: record-07's floor (catch 3/92) is scored against a corpus ~half unfair to a delta hook; the honest catchable denominator is the sound subset (caveat added to record 07 NOTES). Fair pilot re-score: only bedrock + graphiti (injection) of the 5 are sound and the engine missed both = the real detection gaps for the LLM-guided hunter. Also: GEPA-style reflective-retry (future spec) + GLM cyber model (future spec) noted; DeepSeek is the working default. Artifact: benchmarks/measurements/2026-10-12-pool-p1-label-audit/. Co-Authored-By: Claude Opus 4.8 <[email protected]>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
53b1d31d82
commit
a43e6293f5
@@ -336,3 +336,27 @@ context:**
|
|||||||
measure catch + false-alarm (on ordinary changes) vs regex 1/5. The single-shot path is insufficient; the hunter
|
measure catch + false-alarm (on ordinary changes) vs regex 1/5. The single-shot path is insufficient; the hunter
|
||||||
is the real "#1".
|
is the real "#1".
|
||||||
- Feed confirmed source shapes (e.g. library param → path join) back as guarded static facts (#2).
|
- Feed confirmed source shapes (e.g. library param → path join) back as guarded static facts (#2).
|
||||||
|
|
||||||
|
## Future: GEPA-style reflective retries for the LLM arm (maintainer note 2026-10-12)
|
||||||
|
|
||||||
|
The LLM arm (both the corpus-label audit and the search-with-proof detector) should later use a **GEPA-style
|
||||||
|
reflective-retry loop** (DSPy GEPA: reflect on failed/low-confidence outputs, evolve the prompt, retry) rather than
|
||||||
|
single-shot calls — aligned with [[learned-decisions-not-hand-tuning]] (learned decisions + local memory, not hand
|
||||||
|
rules). Deferred to a future spec; the current sizing/audit uses single-shot DeepSeek. GLM 5.3 "cyber" model is
|
||||||
|
also future-spec (brand new); DeepSeek is the working default today though it is not a security-specialised model.
|
||||||
|
|
||||||
|
## POOL-P1 LABEL AUDIT (LLM, 2026-10-12) — 47% of labels are sound
|
||||||
|
|
||||||
|
Widened the banks label-mislocation check across all **49 public** pool vulns via DeepSeek (advisory + head code +
|
||||||
|
pool label → sound/unsound). Full artifact: `benchmarks/measurements/2026-10-12-pool-p1-label-audit/`.
|
||||||
|
- **label_sound = 23/49 (47%)**; 53% unsound (25 pre-exist in base, 16 sink outside changed lines). Cost $0.038.
|
||||||
|
- By family (sound/total): injection 10/13, access_control 5/8, untrusted_destination 4/7, deserialization 1/2,
|
||||||
|
config_secrets 1/4, **path 1/7, output_encoding 1/8**. Injection labels mostly sound; path/output_encoding mostly
|
||||||
|
mislocate or pre-exist.
|
||||||
|
- **record 07's floor (catch 3/92) is scored against a corpus ~half unfair to a delta hook** — on the ~53%
|
||||||
|
pre-existing/mislocated vulns a change-scoped hook correctly stays quiet. The honest catchable denominator is the
|
||||||
|
sound subset; record 07 needs this caveat + a sound-subset recomputation.
|
||||||
|
- **Fair pilot re-score:** only bedrock + graphiti (injection) of the 5 are sound; the engine missed both — the
|
||||||
|
real detection gaps. The 23 sound targets are the fair local eval set for "#2 guided by #1".
|
||||||
|
- Next: run the agentic search-with-proof hunter on the sound targets (start bedrock + graphiti), size its
|
||||||
|
per-vuln call count/cost, measure catch + false-alarm. Then recompute record 07 on the sound subset.
|
||||||
|
|||||||
@@ -23,3 +23,9 @@ Ledger: benchmarks/unseen/usage-p1.jsonl — one `baseline` row (this is G0's ex
|
|||||||
- **Sizing**: 100 vulns is ~±10% for one overall catch number; per-family (deser=4, config=10) is far too thin for
|
- **Sizing**: 100 vulns is ~±10% for one overall catch number; per-family (deser=4, config=10) is far too thin for
|
||||||
family-level decisions — needs slices 2+.
|
family-level decisions — needs slices 2+.
|
||||||
- Raw per-change records streamed to the RustFS store; local subdirs pruned-as-we-go (records + inputs.json kept).
|
- Raw per-change records streamed to the RustFS store; local subdirs pruned-as-we-go (records + inputs.json kept).
|
||||||
|
- **CORPUS-LABEL CAVEAT (added 2026-10-12):** an LLM audit of the 49 public pool vulns found only **47% (23/49)
|
||||||
|
of labels are sound** (sink in the changed lines AND change-introduced); 53% pre-exist in base or are mislocated,
|
||||||
|
where a change-scoped hook *correctly* stays quiet. So this catch rate is scored against a corpus ~half of which
|
||||||
|
is unfair to a delta hook — the honest catchable denominator is the sound subset, and the floor should be
|
||||||
|
recomputed on it. By family the mislocation is systematic (path 1/7, output_encoding 1/8 sound; injection 10/13).
|
||||||
|
See `benchmarks/measurements/2026-10-12-pool-p1-label-audit/`.
|
||||||
|
|||||||
@@ -0,0 +1,43 @@
|
|||||||
|
# pool-p1 label audit (LLM corpus-honesty pass) — 2026-10-12
|
||||||
|
|
||||||
|
## Why
|
||||||
|
The engine-on pilot's banks "miss" turned out to be a **mislocated SZZ label**: the pool labelled the vuln at
|
||||||
|
`function=_load`, `head_lines=[[30],[104],[138-141]]`, but the real sink is `from_prompt_path` **line 44**
|
||||||
|
(outside the changed lines) and it **pre-exists in base** — so a change-scoped pre-push hook *correctly* stays
|
||||||
|
quiet. The pool documents this bias itself ("SZZ last-writer proxy… can misidentify"; "the flaw may already exist
|
||||||
|
in base, so a delta hook can correctly stay quiet"). We widened the check across the whole public pool to see if it
|
||||||
|
is systematic (maintainer directive 2026-10-12, "widen via LLM").
|
||||||
|
|
||||||
|
## Method
|
||||||
|
For each of the **49 public** pool vulns (the 51 private/redacted entries have no code to audit), one DeepSeek
|
||||||
|
`deepseek-flash` call given: the GHSA advisory (ground truth) + the vuln file at the head revision + the pool's
|
||||||
|
label (function, function_lines, changed head_lines). The model returns JSON: the real sink location, whether it
|
||||||
|
falls inside the changed lines (±10), introduced-vs-preexisting, and `label_sound` (fair target = sink in the
|
||||||
|
changed lines AND change-introduced). Audit cost: **$0.038 total** (~$0.001/call), ~2s/call. Raw per-repo verdicts
|
||||||
|
in `results.jsonl`; aggregate in `summary.txt`. Harness: scratchpad `label_audit.py`.
|
||||||
|
|
||||||
|
## Result
|
||||||
|
- **label_sound = 23/49 (47%)**; unsound = 26/49 (53%).
|
||||||
|
- introduced 23 / preexisting 25 / unclear 1; sink_in_changed_lines True 33 / False 16.
|
||||||
|
- **By family (sound/total):** injection 10/13, access_control 5/8, untrusted_destination 4/7, deserialization
|
||||||
|
1/2, config_secrets 1/4, **path 1/7**, **output_encoding 1/8**. Injection labels are mostly sound; path and
|
||||||
|
output_encoding labels mostly mislocate or pre-exist.
|
||||||
|
|
||||||
|
## Implications
|
||||||
|
1. **record 07's floor (catch 3/92) is scored against a corpus ~half of which is unfair to a change-scoped hook.**
|
||||||
|
On the ~53% pre-existing/mislocated vulns a delta hook *should* stay quiet; counting them as required catches
|
||||||
|
depresses the measured catch rate. The honest catchable denominator is the sound subset. record 07 should carry
|
||||||
|
this caveat and, ideally, a sound-subset recomputation (public repos only locally; private entries un-auditable).
|
||||||
|
2. **Fair pilot re-score:** of the 5 engine-on pilot repos only **bedrock + graphiti (injection) are sound**, and
|
||||||
|
the engine missed both — those are the *real* detection gaps to attack with the LLM-guided hunter. banks,
|
||||||
|
launch-editor, socketio are unsound (quiet is defensible).
|
||||||
|
3. The 23 sound targets are the fair local evaluation set for the "#2 guided by #1" detection work.
|
||||||
|
|
||||||
|
## Caveats
|
||||||
|
- The audit is itself an LLM judgement; validated against the manual banks finding (matched). 5 `sound=True`
|
||||||
|
verdicts are confidence <0.7 and warrant a human spot-check: jupyter-lsp, role-strategy-plugin,
|
||||||
|
codeigniter-restserver, **graphiti**, mcp-remote (graphiti is a pilot target — its soundness is medium-confidence).
|
||||||
|
- Advisory line references are sometimes approximate; the model estimates the sink line.
|
||||||
|
- Private pool entries (51/100) are not audited — no code. The public-subset rate may not transfer to them.
|
||||||
|
- deepseek-flash is a general model, not security-specialised; a GEPA-style reflective-retry pass (future spec) and
|
||||||
|
the GLM "cyber" model (future spec) would raise audit confidence.
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
{"repo": "jenkinsci/metrics-plugin", "family": "config_secrets", "advisory": "GHSA-gg9m-x3cg-69vh", "vuln_path": "src/main/java/jenkins/metrics/api/Metrics.java", "label_function": "metricRegistry", "label_head_lines": [[28, 28], [36, 36], [41, 41], [54, 54], [69, 69], [72, 73], [75, 75], [82, 82], [118, 128], [162, 162], [171, 171], [187, 187], [203, 203], [210, 218], [225, 225], [234, 234], [243, 243], [252, 252], [261, 261], [265, 265], [267, 267], [272, 272], [281, 286], [300, 300], [312, 313], [330, 330], [338, 338], [358, 358], [383, 384], [435, 436], [495, 495], [500, 500], [505, 505], [511, 511], [516, 517], [521, 521], [532, 532], [538, 538], [548, 548], [553, 553], [585, 588], [594, 599], [603, 603], [658, 676]], "head": "06a8665d291df51a3d0c10df96ccca0ecbe1f560", "adv_available": true, "code_available": true, "latency": 1.25, "verdict": {"real_sink": "src/main/java/jenkins/metrics/api/Metrics.java:203:metricRegistry", "sink_in_changed_lines": true, "introduced_vs_preexisting": "preexisting", "label_sound": false, "confidence": 0.55, "note": "The labelled function_lines [202,208] overlap changed line 203, but the advisory describes a pre-existing plaintext access-key storage issue fixed later, not a sink introduced by this change."}, "error": null}
|
||||||
|
{"repo": "aws/bedrock-agentcore-sdk-python", "family": "injection", "advisory": "GHSA-j6g5-3hh3-pgw8", "vuln_path": "src/bedrock_agentcore/tools/code_interpreter_client.py", "label_function": "install_packages", "label_head_lines": [[7, 7], [11, 11], [14, 14], [36, 59], [87, 87], [92, 92], [435, 756]], "head": "bcdc6ebda4224d2e2ba696fec65b7078bb7a8970", "adv_available": true, "code_available": true, "latency": 1.12, "verdict": {"real_sink": "src/bedrock_agentcore/tools/code_interpreter_client.py:540-581:install_packages", "sink_in_changed_lines": true, "introduced_vs_preexisting": "introduced", "label_sound": true, "confidence": 0.75, "note": "The install_packages function (lines 540-581) falls within the changed head range [435,756], and the advisory describes a vulnerability introduced in this SDK version, making the label a fair pre-push target."}, "error": null}
|
||||||
|
{"repo": "kludex/starlette", "family": "path", "advisory": "GHSA-v5gw-mw7f-84px", "vuln_path": "starlette/staticfiles.py", "label_function": "lookup_path", "label_head_lines": [[48, 48], [55, 55], [166, 170]], "head": "24c1fac62a80bb153c6548145334fc643991e35a", "adv_available": true, "code_available": true, "latency": 1.01, "verdict": {"real_sink": "starlette/staticfiles.py:172:lookup_path", "sink_in_changed_lines": true, "introduced_vs_preexisting": "preexisting", "label_sound": false, "confidence": 0.85, "note": "The vulnerable os.path.commonprefix check at line 172 is the real sink, but it lies outside the changed head ranges (166-170) and pre-existed the diff, so the label is not a fair introduced-sink target."}, "error": null}
|
||||||
|
{"repo": "contentful/contentful-mcp-server", "family": "untrusted_destination", "advisory": "GHSA-2xhg-73j7-rrgx", "vuln_path": "packages/mcp-server/src/tools/register.ts", "label_function": "registerAllTools", "label_head_lines": [[4, 4], [27, 27]], "head": "6e0038494a09c435f6a0a9a76fde2dc077f18b18", "adv_available": true, "code_available": true, "latency": 1.52, "verdict": {"real_sink": "packages/mcp-tools/src/tools/jobs/space-to-space-migration/exportSpace.ts:126:exportSpace", "sink_in_changed_lines": false, "introduced_vs_preexisting": "preexisting", "label_sound": false, "confidence": 0.9, "note": "The real vulnerable sink is in exportSpace.ts/importSpace.ts (spreading LLM-controlled host into CMA options), not in the labelled register.ts file, whose changed lines only touch unrelated registration code."}, "error": null}
|
||||||
|
{"repo": "flarum/tags", "family": "access_control", "advisory": "GHSA-32wx-4gxx-h48f", "vuln_path": "src/Listener/SaveTagsToDatabase.php", "label_function": "handle", "label_head_lines": [[19, 19], [51, 51], [57, 57]], "head": "73c0626e722d2be2b82804eec5746646b64b0c44", "adv_available": true, "code_available": true, "latency": 1.22, "verdict": {"real_sink": "src/Listener/SaveTagsToDatabase.php:88:handle", "sink_in_changed_lines": true, "introduced_vs_preexisting": "introduced", "label_sound": true, "confidence": 0.75, "note": "The advisory describes missing permission checks when editing tags; the changed line 57 is within the handle function where the vulnerable tag-editing logic lives, and the diff touched this function, though the exact dangerous check may be around line 88."}, "error": null}
|
||||||
|
{"repo": "matrix-org/matrix-appservice-bridge", "family": "access_control", "advisory": "GHSA-35g4-qx3c-vjhx", "vuln_path": "src/components/room-upgrade-handler.ts", "label_function": "onJoinedNewRoom", "label_head_lines": [[1, 218]], "head": "e52f25cc6edbddc089eed366b71f988908d3a02c", "adv_available": true, "code_available": true, "latency": 1.08, "verdict": {"real_sink": "src/components/room-upgrade-handler.ts:97:onJoinedNewRoom", "sink_in_changed_lines": true, "introduced_vs_preexisting": "introduced", "label_sound": true, "confidence": 0.75, "note": "The advisory's missing predecessor check concerns the room upgrade handling in onJoinedNewRoom, which is within the changed lines and introduced by this change."}, "error": null}
|
||||||
|
{"repo": "jenkinsci/active-choices-plugin", "family": "output_encoding", "advisory": "GHSA-rp4x-h577-chvq", "vuln_path": "src/test/java/org/biouno/unochoice/jenkins_cert_2192/TestDynamicReferenceXss.java", "label_function": "testChoicesParameterXss", "label_head_lines": [[1, 121]], "head": "d0b768c18bafd812b52fe579def8b14e26033ec9", "adv_available": true, "code_available": true, "latency": 1.19, "verdict": {"real_sink": "src/main/java/org/biouno/unochoice/DynamicReferenceParameter.java:getReferencedParametersAsArray", "sink_in_changed_lines": false, "introduced_vs_preexisting": "preexisting", "label_sound": false, "confidence": 0.75, "note": "The labelled file is a test that verifies escaping; the actual vulnerable sink is the unescaped parameter-name handling in DynamicReferenceParameter (main source), which is not in the changed test lines."}, "error": null}
|
||||||
|
{"repo": "jenkinsci/ontrack-plugin", "family": "access_control", "advisory": "GHSA-qw28-g63m-jxqv", "vuln_path": "src/main/java/net/nemerosa/ontrack/jenkins/dsl/SandboxDSLLauncher.java", "label_function": "run", "label_head_lines": [[1, 49]], "head": "3ec46f46aa648c1301da97adbfa2ff8c78037fb4", "adv_available": true, "code_available": true, "latency": 1.55, "verdict": {"real_sink": "src/main/java/net/nemerosa/ontrack/jenkins/dsl/SandboxDSLLauncher.java:44:run", "sink_in_changed_lines": true, "introduced_vs_preexisting": "introduced", "label_sound": true, "confidence": 0.85, "note": "The dangerous GroovySandbox.run call with Whitelist.all() is the sandbox-bypass sink, located at line 44 within the changed range [1,49], and the whole file was introduced in this change."}, "error": null}
|
||||||
|
{"repo": "simonhaenisch/md-to-pdf", "family": "injection", "advisory": "GHSA-x949-7cm6-fm6p", "vuln_path": "src/lib/md-to-pdf.ts", "label_function": "convertMdToPdf", "label_head_lines": [[15, 15], [18, 18], [20, 20], [60, 60], [75, 77]], "head": "bb466261ba28f283e01e01260a4de04c2c398c6d", "adv_available": true, "code_available": true, "latency": 1.11, "verdict": {"real_sink": "src/lib/md-to-pdf.ts:20:convertMdToPdf", "sink_in_changed_lines": true, "introduced_vs_preexisting": "preexisting", "label_sound": false, "confidence": 0.85, "note": "The dangerous grayMatter() call at line 20 is the RCE sink, but it is pre-existing code not introduced by the changed lines (15,18,20,60,75-77), so the label is unfair."}, "error": null}
|
||||||
|
{"repo": "imzbf/md-editor-v3", "family": "output_encoding", "advisory": "GHSA-3rm2-h79c-8qw6", "vuln_path": "packages/MdEditor/layouts/Content/composition/useCopyCode.ts", "label_function": "initCopyEntry", "label_head_lines": [[35, 35], [37, 37], [39, 43], [46, 50]], "head": "c431fe7000a57f802a2c854f621b2493c10f3894", "adv_available": true, "code_available": true, "latency": 1.32, "verdict": {"real_sink": "packages/MdEditor/layouts/Content/composition/useMarkdownIt.ts:206:highlight", "sink_in_changed_lines": false, "introduced_vs_preexisting": "preexisting", "label_sound": false, "confidence": 0.95, "note": "The advisory's actual XSS sink is the unescaped language interpolation in useMarkdownIt.ts's highlight callback, not the copy-button code in useCopyCode.ts, so the label points at the wrong file/function."}, "error": null}
|
||||||
|
{"repo": "jupyter-lsp/jupyterlab-lsp", "family": "path", "advisory": "GHSA-4qhp-652w-c22x", "vuln_path": "py_src/jupyter_lsp/paths.py", "label_function": "normalized_uri", "label_head_lines": [[1, 1], [4, 4], [7, 15], [17, 17]], "head": "00759e435c9845db6b4d33344e997a898004c669", "adv_available": true, "code_available": true, "latency": 1.23, "verdict": {"real_sink": "py_src/jupyter_lsp/paths.py:7:normalized_uri", "sink_in_changed_lines": true, "introduced_vs_preexisting": "introduced", "label_sound": true, "confidence": 0.6, "note": "The advisory concerns unsecured endpoints in jupyter-lsp, and the changed lines [7,15] introduce the normalized_uri function in paths.py, which is the path-handling sink tied to the vulnerability."}, "error": null}
|
||||||
|
{"repo": "masci/banks", "family": "path", "advisory": "GHSA-x8wg-4xgc-vr54", "vuln_path": "src/banks/registries/directory.py", "label_function": "_load", "label_head_lines": [[30, 30], [104, 104], [138, 141]], "head": "5e7093c9b3c2bbe2e0bc281f5a3602bbdabf00b9", "adv_available": true, "code_available": true, "latency": 1.23, "verdict": {"real_sink": "src/banks/registries/directory.py:44:from_prompt_path", "sink_in_changed_lines": false, "introduced_vs_preexisting": "preexisting", "label_sound": false, "confidence": 0.9, "note": "The advisory's dangerous sink is the path interpolation in PromptFile.from_prompt_path (line 44), which is not in the changed head lines [30,30],[104,104],[138,141]; the label points at _load lines 135-141, which merely reconstruct paths and are not the write sink."}, "error": null}
|
||||||
|
{"repo": "bytebase/dbhub", "family": "access_control", "advisory": "GHSA-mwwr-p57h-56pf", "vuln_path": "src/utils/allowed-keywords.ts", "label_function": "checkReadOnly", "label_head_lines": [[10, 13], [18, 71], [74, 78], [80, 80], [87, 87], [88, 88], [92, 120]], "head": "4236ba4923bcf9ec0c01942cb49bd70a50ca4766", "adv_available": true, "code_available": true, "latency": 1.4, "verdict": {"real_sink": "src/utils/allowed-keywords.ts:80:checkReadOnly", "sink_in_changed_lines": true, "introduced_vs_preexisting": "preexisting", "label_sound": false, "confidence": 0.75, "note": "The advisory's real vulnerability is the dead-code readonly gating in the connectors (postgres/index.ts:175-177), not the keyword classifier; the labelled checkReadOnly sink is a pre-existing keyword-based guard that the change only refactored, so the label points at the wrong, non-introduced sink."}, "error": null}
|
||||||
|
{"repo": "laravel/pulse", "family": "injection", "advisory": "GHSA-8vwh-pr89-4mw2", "vuln_path": "src/Livewire/Concerns/RemembersQueries.php", "label_function": "remember", "label_head_lines": [[7, 9], [21, 21], [23, 23]], "head": "37f64394258d7e690667010cc587c4ec1bc95a83", "adv_available": true, "code_available": true, "latency": 1.18, "verdict": {"real_sink": "src/Livewire/Concerns/RemembersQueries.php:21:remember", "sink_in_changed_lines": true, "introduced_vs_preexisting": "introduced", "label_sound": true, "confidence": 0.85, "note": "The advisory's vulnerable remember() method is at line 21, which is within the changed head lines, and the diff added the callable parameter/execution path that constitutes the RCE sink."}, "error": null}
|
||||||
|
{"repo": "webpack/webpack-bundle-analyzer", "family": "output_encoding", "advisory": "GHSA-pgr8-jg6h-8gw6", "vuln_path": "src/viewer.js", "label_function": "chartData", "label_head_lines": [[3, 3], [5, 5], [25, 25], [35, 35], [51, 51], [56, 60], [62, 62], [64, 72], [74, 98]], "head": "279bb2638f1cddf04b319966c71565c48d874f3a", "adv_available": true, "code_available": true, "latency": 1.25, "verdict": {"real_sink": "src/viewer.js:51:startServer", "sink_in_changed_lines": true, "introduced_vs_preexisting": "preexisting", "label_sound": false, "confidence": 0.75, "note": "The dangerous JSON.stringify(chartData) sink is at line 51 in startServer, which is in the changed lines, but the advisory describes a pre-existing XSS issue fixed by escaping, not a sink introduced by this change."}, "error": null}
|
||||||
|
{"repo": "ondata/ckan-mcp-server", "family": "untrusted_destination", "advisory": "GHSA-798p-78g2-v556", "vuln_path": "src/server.ts", "label_function": "createServer", "label_head_lines": [[22, 22]], "head": "6cb16d5a32df83b640070392329633b3f315564e", "adv_available": true, "code_available": true, "latency": 1.1, "verdict": {"real_sink": "src/utils/http.ts:validateServerUrl", "sink_in_changed_lines": false, "introduced_vs_preexisting": "preexisting", "label_sound": false, "confidence": 0.95, "note": "The actual SSRF sink is validateServerUrl in src/utils/http.ts, which is not in the changed lines of src/server.ts (only line 22 changed, a version string), so the label is misattributed and unfair."}, "error": null}
|
||||||
|
{"repo": "geosolutions-it/jai-ext", "family": "injection", "advisory": "GHSA-v92f-jx6p-73rx", "vuln_path": "jt-jiffle/jt-jiffle-language/src/main/java/it/geosolutions/jaiext/jiffle/Jiffle.java", "label_function": "createRuntimeInstance", "label_head_lines": [[217, 217], [437, 437], [555, 557]], "head": "8d2ab594dc3295c5c6eabb7da3568f734521bf2d", "adv_available": true, "code_available": true, "latency": 1.15, "verdict": {"real_sink": "jt-jiffle/jt-jiffle-language/src/main/java/it/geosolutions/jaiext/jiffle/Jiffle.java:555:createRuntimeInstance", "sink_in_changed_lines": true, "introduced_vs_preexisting": "introduced", "label_sound": true, "confidence": 0.75, "note": "The changed lines 555-557 fall within the createRuntimeInstance function where the Jiffle script is compiled via Janino, matching the advisory's code injection sink."}, "error": null}
|
||||||
|
{"repo": "neoteroi/blacksheep", "family": "output_encoding", "advisory": "GHSA-6pw3-h7xf-x4gp", "vuln_path": "tests/test_requests.py", "label_function": "test_request_charset", "label_head_lines": [[638, 653]], "head": "6801abe96ae0b1797b735d62c965c7aff3704cee", "adv_available": true, "code_available": true, "latency": 1.22, "verdict": {"real_sink": "blacksheep/scribe.py:write_request (header serialization)", "sink_in_changed_lines": false, "introduced_vs_preexisting": "preexisting", "label_sound": false, "confidence": 0.75, "note": "The labelled test test_request_charset in tests/test_requests.py is unrelated to the CRLF header-injection sink, which lives in the client request serialization code (scribe.py) and was not introduced by this test change."}, "error": null}
|
||||||
|
{"repo": "locize/i18next-locize-backend", "family": "path", "advisory": "GHSA-mgcp-mfp8-3q45", "vuln_path": "i18nextLocizeBackend.js", "label_function": "interpolate", "label_head_lines": [[71, 97], [136, 137], [142, 142], [145, 149], [159, 173], [181, 181], [185, 219], [223, 223], [248, 248], [254, 254], [260, 260], [270, 270], [276, 276], [281, 282], [315, 315], [322, 322], [350, 350], [354, 355], [357, 357]], "head": "32005b0fcd6ea9dfc43c2cc50ab64bbeade9f2fe", "adv_available": true, "code_available": true, "latency": 1.25, "verdict": {"real_sink": "i18nextLocizeBackend.js:78:interpolate", "sink_in_changed_lines": true, "introduced_vs_preexisting": "preexisting", "label_sound": false, "confidence": 0.85, "note": "The interpolate helper at lines 78-96 is the described dangerous sink and falls within the changed range [71,97], but the advisory states it pre-existed and the patch fixed it, so the change did not introduce it."}, "error": null}
|
||||||
|
{"repo": "jenkinsci/junit-plugin", "family": "output_encoding", "advisory": "GHSA-64mj-3p92-589v", "vuln_path": "src/test/java/hudson/tasks/junit/HistoryTest.java", "label_function": "testFailedSince", "label_head_lines": [[30, 33], [38, 40], [42, 44], [46, 46], [48, 48], [50, 52], [57, 57], [63, 63], [70, 70], [74, 74]], "head": "f69ed5dc6bf866b0479cab9c5f379085ad025b84", "adv_available": true, "code_available": true, "latency": 1.28, "verdict": {"real_sink": "src/main/java/hudson/tasks/junit/CaseResult.java:getDescription:unknown", "sink_in_changed_lines": false, "introduced_vs_preexisting": "preexisting", "label_sound": false, "confidence": 0.85, "note": "The advisory's XSS sink is in the JUnit plugin's main source (escaping test result descriptions), not in the test file HistoryTest.java, and the changed lines are test-only edits unrelated to the vulnerable sink."}, "error": null}
|
||||||
|
{"repo": "langchain-ai/langchain-community", "family": "untrusted_destination", "advisory": "GHSA-pc6w-59fv-rh23", "vuln_path": "libs/community/langchain_community/document_loaders/evernote.py", "label_function": "__init__", "label_head_lines": [[1, 152]], "head": "6057ba567d4339b48acbffb55f0885dcd05a0892", "adv_available": true, "code_available": true, "latency": 1.47, "verdict": {"real_sink": "libs/community/langchain_community/document_loaders/evernote.py:180:_parse_note_xml", "sink_in_changed_lines": true, "introduced_vs_preexisting": "preexisting", "label_sound": false, "confidence": 0.75, "note": "The XXE sink is etree.iterparse in _parse_note_xml, not __init__, and the diff shows the whole file as changed (likely a move/rename), so the sink is pre-existing rather than introduced by this change."}, "error": null}
|
||||||
|
{"repo": "jenkinsci/influxdb-plugin", "family": "config_secrets", "advisory": "GHSA-rv97-r8f7-8wmg", "vuln_path": "src/main/java/jenkinsci/plugins/influxdb/InfluxDbPublicationService.java", "label_function": "<global>", "label_head_lines": [[1, 302]], "head": "e5d995db00d8f9b7b06a0b8a124c52515bfcc44e", "adv_available": true, "code_available": true, "latency": 1.21, "verdict": {"real_sink": "src/main/java/jenkinsci/plugins/influxdb/InfluxDbPublicationService.java:1:<global>", "sink_in_changed_lines": true, "introduced_vs_preexisting": "unclear", "label_sound": false, "confidence": 0.3, "note": "The advisory describes plaintext credential storage in the plugin's global config (Target/InfluxDbPublisher), not this service file; the whole-file changed range is too coarse to confirm the actual sink was introduced here."}, "error": null}
|
||||||
|
{"repo": "decentralized-identity/veramo", "family": "injection", "advisory": "GHSA-38cw-85xc-xr9x", "vuln_path": "packages/daf-typeorm/src/data-store-orm.ts", "label_function": "decorateQB", "label_head_lines": [[1, 322]], "head": "cd2052fe5245ce3c631e8e180a225bf1d841e89d", "adv_available": true, "code_available": true, "latency": 1.23, "verdict": {"real_sink": "packages/daf-typeorm/src/data-store-orm.ts:180:decorateQB", "sink_in_changed_lines": true, "introduced_vs_preexisting": "introduced", "label_sound": true, "confidence": 0.75, "note": "The advisory's SQL injection sink is the unsanitized item.column passed to orderBy/addSelect in decorateQB, which matches the labelled function and falls within the changed head lines [1,322]."}, "error": null}
|
||||||
|
{"repo": "mjmlio/mjml", "family": "path", "advisory": "GHSA-45h5-66jx-r2wf", "vuln_path": "packages/mjml-parser-xml/src/index.js", "label_function": "MJMLParser", "label_head_lines": [[37, 37], [150, 150]], "head": "b17d5585830822ecdc7bd6b3628249e3731e2750", "adv_available": true, "code_available": true, "latency": 1.27, "verdict": {"real_sink": "packages/mjml-parser-xml/src/index.js:66:handleInclude", "sink_in_changed_lines": false, "introduced_vs_preexisting": "preexisting", "label_sound": false, "confidence": 0.85, "note": "The dangerous fs.readFileSync on the user-controlled mj-include path is at line 66, far from the changed lines 37 and 150, and the traversal behavior pre-exists this diff."}, "error": null}
|
||||||
|
{"repo": "jenkinsci/docker-plugin", "family": "access_control", "advisory": "GHSA-76w6-m7vv-7hhw", "vuln_path": "src/main/java/com/nirima/jenkins/plugins/docker/DockerManagementServer.java", "label_function": "getImages", "label_head_lines": [[1, 88]], "head": "826961e2f5737fbd734f3ab9a1a2d02a0f995620", "adv_available": true, "code_available": true, "latency": 1.25, "verdict": {"real_sink": "src/main/java/com/nirima/jenkins/plugins/docker/DockerAPI.java:doTestConnection", "sink_in_changed_lines": false, "introduced_vs_preexisting": "preexisting", "label_sound": false, "confidence": 0.9, "note": "The advisory's actual vulnerable sink is DockerAPI.DescriptorImpl#doTestConnection, not DockerManagementServer.getImages, so the label points at the wrong file/function and is not a fair pre-push target."}, "error": null}
|
||||||
|
{"repo": "jenkinsci/role-strategy-plugin", "family": "access_control", "advisory": "GHSA-rm4m-39fj-288c", "vuln_path": "src/main/java/com/michelin/cio/hudson/plugins/rolestrategy/RoleMap.java", "label_function": "SuppressFBWarnings", "label_head_lines": [[28, 28], [33, 34], [39, 47], [49, 51], [62, 62], [64, 65], [70, 70], [83, 89], [96, 105], [108, 108], [111, 121], [127, 129], [131, 136], [138, 144], [146, 149], [151, 151], [153, 162], [164, 164], [174, 174], [176, 194], [196, 213], [215, 217], [222, 224], [226, 226], [243, 246], [257, 257], [268, 271], [272, 272], [282, 282], [285, 285], [291, 291], [297, 297], [329, 330], [332, 332], [341, 341], [348, 348], [350, 350], [382, 384], [396, 397], [399, 399], [409, 413], [415, 418], [419, 419], [421, 421], [424, 426], [431, 433], [437, 440], [442, 453], [454, 454], [456, 456], [471, 471], [481, 481], [495, 495], [499, 506], [513, 513], [515, 515], [517, 519]], "head": "fb70998f467a42cf2164d72bde3a21ec878490e0", "adv_available": true, "code_available": true, "latency": 1.59, "verdict": {"real_sink": "src/main/java/com/michelin/cio/hudson/plugins/rolestrategy/RoleMap.java:479:SuppressFBWarnings", "sink_in_changed_lines": true, "introduced_vs_preexisting": "introduced", "label_sound": true, "confidence": 0.55, "note": "The advisory's fix concerns parent-permission checks in RoleMap, and the labelled function/lines (479-487) fall within the changed head ranges, though the exact dangerous sink is likely the permission-check logic rather than the SuppressFBWarnings annotation."}, "error": null}
|
||||||
|
{"repo": "jenkinsci/jira-plugin", "family": "access_control", "advisory": "GHSA-fpg6-xqj4-j7wf", "vuln_path": "src/main/java/hudson/plugins/jira/JiraSite.java", "label_function": "doValidate", "label_head_lines": [[15, 19], [37, 42], [284, 284], [297, 298], [300, 300], [382, 384], [385, 385], [455, 455], [458, 458], [474, 477], [479, 479], [496, 496], [498, 498], [500, 502], [504, 516], [523, 523], [525, 525], [533, 533], [542, 542], [550, 550], [552, 552], [561, 561], [571, 571], [574, 576], [578, 578], [595, 595], [602, 602], [604, 604], [620, 620], [622, 622], [638, 638], [640, 640], [658, 658], [660, 660], [671, 671], [708, 718], [736, 736], [772, 772]], "head": "23a00c1cedaaa3d4b0b00ff8f1cdeece5053bc2c", "adv_available": true, "code_available": true, "latency": 1.31, "verdict": {"real_sink": "src/main/java/hudson/plugins/jira/JiraSite.java:729:doValidate", "sink_in_changed_lines": true, "introduced_vs_preexisting": "introduced", "label_sound": true, "confidence": 0.85, "note": "The advisory describes the doValidate form validation method lacking POST/Administer permission checks, and the changed lines include the doValidate function range [729,770] where the fix adds those checks."}, "error": null}
|
||||||
|
{"repo": "chriskacerguis/codeigniter-restserver", "family": "untrusted_destination", "advisory": "GHSA-cc7g-9pcj-7gwm", "vuln_path": "application/libraries/REST_Controller.php", "label_function": "__construct", "label_head_lines": [[195, 195], [203, 203]], "head": "ac033c423175a62f5768e9951021b91bf6a55b80", "adv_available": true, "code_available": true, "latency": 1.3, "verdict": {"real_sink": "application/libraries/REST_Controller.php:203:__construct", "sink_in_changed_lines": true, "introduced_vs_preexisting": "introduced", "label_sound": true, "confidence": 0.6, "note": "The advisory describes an XXE in REST_Controller's constructor where XML request body parsing (simplexml_load_string) is enabled; the changed line 203 is within the constructor and likely introduces the vulnerable XML parsing, though the exact sink line is inferred from the diff range."}, "error": null}
|
||||||
|
{"repo": "ballcat-projects/ballcat-codegen", "family": "injection", "advisory": "GHSA-fv3m-xhqw-9m79", "vuln_path": "ballcat-codegen-backend/src/main/java/com/hccake/ballcat/codegen/engine/FreemarkerTemplateEngine.java", "label_function": "FreemarkerTemplateEngine", "label_head_lines": [[1, 48]], "head": "47e08b41732b363c078dacee05bdc78cbb8fc4c8", "adv_available": true, "code_available": true, "latency": 1.52, "verdict": {"real_sink": "ballcat-codegen-backend/src/main/java/com/hccake/ballcat/codegen/engine/FreemarkerTemplateEngine.java:38:render", "sink_in_changed_lines": true, "introduced_vs_preexisting": "introduced", "label_sound": true, "confidence": 0.85, "note": "The whole file (lines 1-48) is newly added in the diff, and the dangerous sink is template.process(context, sw) at line 38, which executes attacker-controlled Freemarker template content without validation, matching the advisory's RCE via template engine injection."}, "error": null}
|
||||||
|
{"repo": "getzep/graphiti", "family": "injection", "advisory": "GHSA-gg5m-55jj-8m5g", "vuln_path": "graphiti_core/driver/falkordb_driver.py", "label_function": "build_fulltext_query", "label_head_lines": [[40, 72], [75, 75], [206, 206], [249, 251], [265, 265], [280, 280]], "head": "36056ad1413ee20cffdb940fb8afe8cf81d46cca", "adv_available": true, "code_available": true, "latency": 1.41, "verdict": {"real_sink": "graphiti_core/driver/falkordb_driver.py:280:build_fulltext_query", "sink_in_changed_lines": true, "introduced_vs_preexisting": "introduced", "label_sound": true, "confidence": 0.6, "note": "The advisory describes Cypher label injection via node_labels concatenated into label expressions, and the changed lines 249-280 in build_fulltext_query are where the FalkorDB fulltext/label query construction occurs, matching the labelled sink."}, "error": null}
|
||||||
|
{"repo": "docsifyjs/docsify", "family": "output_encoding", "advisory": "GHSA-2mm9-c2fx-c7m4", "vuln_path": "src/core/fetch/index.js", "label_function": "isExternal", "label_head_lines": [[25, 25], [76, 76], [105, 135], [137, 148]], "head": "6c13bdb7bdbcc2de4b36906a5e982092e4456d95", "adv_available": true, "code_available": true, "latency": 1.28, "verdict": {"real_sink": "src/core/fetch/index.js:23:isExternal", "sink_in_changed_lines": false, "introduced_vs_preexisting": "preexisting", "label_sound": false, "confidence": 0.75, "note": "The advisory's isURL bypass concerns the isExternal function at line 23, which is outside the changed head-line ranges (25, 76, 105-135, 137-148), so the label targets unrelated changed lines."}, "error": null}
|
||||||
|
{"repo": "nvbn/thefuck", "family": "path", "advisory": "GHSA-8wwf-2644-f8x4", "vuln_path": "thefuck/rules/dirty_untar.py", "label_function": "side_effect", "label_head_lines": [[2, 2], [4, 4], [21, 21], [32, 32], [36, 37], [42, 42]], "head": "6da0bc557f0fd94ea1397d3a7f508be896cc98d8", "adv_available": true, "code_available": true, "latency": 1.12, "verdict": {"real_sink": "thefuck/rules/dirty_untar.py:44:side_effect", "sink_in_changed_lines": false, "introduced_vs_preexisting": "preexisting", "label_sound": false, "confidence": 0.85, "note": "The dangerous os.remove(file) sink is at line 44, outside the changed head ranges (which only touch lines 2,4,21,32,36-37,42), and the side_effect deletion logic pre-exists the change."}, "error": null}
|
||||||
|
{"repo": "i18next/i18next-http-middleware", "family": "output_encoding", "advisory": "GHSA-c3h8-g69v-pjrg", "vuln_path": "lib/index.js", "label_function": "getBody", "label_head_lines": [[7, 16], [20, 22], [105, 107], [116, 116], [137, 137], [139, 140], [147, 149], [158, 175], [178, 178]], "head": "d77fa7fc8e4b32fe7f16bbb1f55a032b3a956a13", "adv_available": true, "code_available": true, "latency": 1.34, "verdict": {"real_sink": "lib/index.js:44:handle", "sink_in_changed_lines": false, "introduced_vs_preexisting": "preexisting", "label_sound": false, "confidence": 0.85, "note": "The advisory's dangerous sink is the Content-Language header write in handle() (line ~44), which is outside the labelled getBody changed lines [158,172] and pre-existed the change."}, "error": null}
|
||||||
|
{"repo": "vitejs/launch-editor", "family": "injection", "advisory": "GHSA-c27g-q93r-2cwf", "vuln_path": "packages/launch-editor/index.js", "label_function": "launchEditor", "label_head_lines": [[110, 110]], "head": "033271cfa9f257c62721604fa424c7614c7bb9da", "adv_available": true, "code_available": true, "latency": 1.22, "verdict": {"real_sink": "packages/launch-editor/index.js:161:launchEditor", "sink_in_changed_lines": false, "introduced_vs_preexisting": "preexisting", "label_sound": false, "confidence": 0.85, "note": "The dangerous cmd.exe spawn with unsanitized args is at line ~161, far from the single changed line 110, and the vulnerable spawn pattern pre-existed the change."}, "error": null}
|
||||||
|
{"repo": "jenkinsci/sonar-gerrit-plugin", "family": "config_secrets", "advisory": "GHSA-6fv3-w7j6-5xfc", "vuln_path": "src/main/java/org/jenkinsci/plugins/sonargerrit/config/AuthenticationConfig.java", "label_function": "setPassword", "label_head_lines": [[25, 25], [31, 31], [34, 34], [38, 38], [41, 41], [46, 46], [49, 49], [54, 54]], "head": "be36d7871d41dfdaea987d5218aaa662a0fb1f06", "adv_available": true, "code_available": true, "latency": 1.11, "verdict": {"real_sink": "src/main/java/org/jenkinsci/plugins/sonargerrit/config/AuthenticationConfig.java:31:password field", "sink_in_changed_lines": false, "introduced_vs_preexisting": "preexisting", "label_sound": false, "confidence": 0.75, "note": "The advisory's unencrypted-credential sink is the plaintext password field (line 31), which is not in the changed lines; the change only touched setPassword at line 54, so the label is not a fair introduced-sink target."}, "error": null}
|
||||||
|
{"repo": "actions/toolkit", "family": "injection", "advisory": "GHSA-7r3h-m5j6-3q42", "vuln_path": "packages/core/src/core.ts", "label_function": "toCommandValue", "label_head_lines": [[1, 3], [44, 52], [68, 73]], "head": "0759cdc2309acfd91b6503597dcfa02a3cee99d0", "adv_available": true, "code_available": true, "latency": 1.34, "verdict": {"real_sink": "packages/core/src/core.ts:47:exportVariable", "sink_in_changed_lines": true, "introduced_vs_preexisting": "introduced", "label_sound": true, "confidence": 0.85, "note": "The advisory's dangerous sink is the delimiter-based GITHUB_ENV construction in exportVariable (line ~47), which falls within the changed head range [44,52], and the diff introduced this file-command delimiter logic."}, "error": null}
|
||||||
|
{"repo": "i18next/i18next-http-backend", "family": "untrusted_destination", "advisory": "GHSA-xvq9-wjp8-hwqf", "vuln_path": "i18nextHttpBackend.js", "label_function": "isSafeUrlSegmentBase", "label_head_lines": [[17, 17], [23, 23]], "head": "2b2e771b0103fb7e90c9beba9ac285cec7839bd3", "adv_available": true, "code_available": true, "latency": 1.04, "verdict": {"real_sink": "i18nextHttpBackend.js:17:isSafeUrlSegmentBase", "sink_in_changed_lines": true, "introduced_vs_preexisting": "introduced", "label_sound": true, "confidence": 0.75, "note": "The changed line 17 is inside isSafeUrlSegmentBase, the validation function whose incomplete checks (no colon/scheme rejection) permit the SSRF described in the advisory."}, "error": null}
|
||||||
|
{"repo": "jenkinsci/radargun-plugin", "family": "deserialization", "advisory": "GHSA-723p-9rcj-xv8j", "vuln_path": "src/main/java/org/jenkinsci/plugins/radargun/config/YamlNodeConfigParser.java", "label_function": "YamlNodeConfigParser", "label_head_lines": [[1, 43]], "head": "ccf710e1dd0910776b654a674e5c54d86c4c84a4", "adv_available": true, "code_available": true, "latency": 1.22, "verdict": {"real_sink": "src/main/java/org/jenkinsci/plugins/radargun/config/YamlNodeConfigParser.java:17:YamlNodeConfigParser", "sink_in_changed_lines": true, "introduced_vs_preexisting": "introduced", "label_sound": true, "confidence": 0.9, "note": "The unsafe `new Yaml()` constructor (line 17) is the dangerous sink enabling arbitrary type instantiation, and it lies within the changed lines [1,43] introduced by this change."}, "error": null}
|
||||||
|
{"repo": "jenkinsci/gitlab-oauth-plugin", "family": "untrusted_destination", "advisory": "GHSA-pg59-2w33-8vmc", "vuln_path": "src/main/java/org/jenkinsci/plugins/GitLabSecurityRealm.java", "label_function": "doCommenceLogin", "label_head_lines": [[36, 36], [102, 103], [105, 105], [111, 111], [128, 128], [140, 140], [146, 146], [165, 165], [192, 192], [205, 205], [232, 232], [234, 234], [243, 243], [246, 246], [271, 271], [287, 287], [341, 341], [346, 346], [405, 406], [436, 436], [445, 445], [468, 468], [496, 499], [531, 532], [548, 548]], "head": "281cc7285bb66094030f2b2ef6fe02198e18662b", "adv_available": true, "code_available": true, "latency": 1.32, "verdict": {"real_sink": "src/main/java/org/jenkinsci/plugins/GitLabSecurityRealm.java:271:doCommenceLogin", "sink_in_changed_lines": true, "introduced_vs_preexisting": "introduced", "label_sound": true, "confidence": 0.75, "note": "The advisory describes an open redirect via the Referer header in doCommenceLogin, and line 271 is within the changed head lines, consistent with the change introducing the vulnerable redirect behavior."}, "error": null}
|
||||||
|
{"repo": "sorlen008/desktopcommandermcp", "family": "untrusted_destination", "advisory": "GHSA-5xx3-j724-wmx5", "vuln_path": "src/tools/filesystem.ts", "label_function": "readFileFromUrl", "label_head_lines": [[115, 115], [139, 139], [145, 145], [161, 161], [164, 164], [194, 194], [199, 199], [210, 210], [220, 220], [223, 223], [233, 237], [240, 241], [259, 259], [265, 265], [271, 271], [274, 274], [280, 280], [282, 285], [297, 297], [299, 300], [321, 321]], "head": "e73492923f0bbac5d88356600369fbfb4e01d6bd", "adv_available": true, "code_available": true, "latency": 1.39, "verdict": {"real_sink": "src/tools/filesystem.ts:164:readFileFromUrl", "sink_in_changed_lines": true, "introduced_vs_preexisting": "introduced", "label_sound": true, "confidence": 0.75, "note": "The advisory names readFileFromUrl (function_lines 164-212) and the diff includes changed head line 164, consistent with the SSRF sink being introduced/touched in this change."}, "error": null}
|
||||||
|
{"repo": "zereight/gitlab-mcp", "family": "path", "advisory": "GHSA-cv3r-c5h8-f4g5", "vuln_path": "index.ts", "label_function": "validateConfiguration", "label_head_lines": [[8, 8], [255, 328], [339, 340], [460, 477], [481, 505], [510, 512], [1097, 1116], [3520, 3521], [3587, 3590], [3617, 3620], [3646, 3649], [3766, 3767], [3768, 3768], [4353, 4354], [4378, 4381], [4417, 4420], [4450, 4453], [4503, 4503], [4534, 4535], [5757, 5871], [5879, 5901], [5903, 5933], [5935, 5964], [5966, 5979], [5981, 5990], [5992, 6006], [6010, 6037], [6053, 6057], [6067, 6067], [6069, 6069], [6073, 6115], [6153, 6155]], "head": "1f1fd4541b154a7bef35ca632588b4d0425b7d0f", "adv_available": true, "code_available": true, "latency": 1.3, "verdict": {"real_sink": "index.ts:7354:app.get(\"/sse\")", "sink_in_changed_lines": false, "introduced_vs_preexisting": "preexisting", "label_sound": false, "confidence": 0.9, "note": "The advisory's actual dangerous sink is the unauthenticated /sse endpoint around line 7354, but the label points to validateConfiguration at lines 258-327, which is unrelated and not the vulnerable sink."}, "error": null}
|
||||||
|
{"repo": "zenitram/malla", "family": "output_encoding", "advisory": "GHSA-ch57-39q2-4crm", "vuln_path": "src/malla/static/js/relay_node_analysis.js", "label_function": "renderTable", "label_head_lines": [[1, 182]], "head": "5535894df529154ea549bc1a523d9c8d301bdf27", "adv_available": true, "code_available": true, "latency": 1.37, "verdict": {"real_sink": "src/malla/static/js/relay_node_analysis.js:124:renderTable", "sink_in_changed_lines": true, "introduced_vs_preexisting": "introduced", "label_sound": true, "confidence": 0.9, "note": "The advisory's relay_node_analysis.js sink at line ~124 is the candidate.node_name innerHTML injection in renderTable, which lies within the changed head range [1,182] and was introduced by this change."}, "error": null}
|
||||||
|
{"repo": "fastapi-users/fastapi-users", "family": "access_control", "advisory": "GHSA-5j53-63w8-8625", "vuln_path": "fastapi_users/router/oauth.py", "label_function": "get_oauth_associate_router", "label_head_lines": [[1, 1], [9, 10], [139, 250]], "head": "ce15284fe9fd363f0bd19d9580e37f4d265b1e0f", "adv_available": true, "code_available": true, "latency": 1.15, "verdict": {"real_sink": "fastapi_users/router/oauth.py:65:authorize", "sink_in_changed_lines": false, "introduced_vs_preexisting": "preexisting", "label_sound": false, "confidence": 0.9, "note": "The advisory's dangerous sink is the stateless state token generation in authorize() at line ~65, which is outside the changed head lines [139,250] and pre-exists the change."}, "error": null}
|
||||||
|
{"repo": "adfinis/document-merge-service", "family": "injection", "advisory": "GHSA-v5gf-r78h-55q6", "vuln_path": "document_merge_service/api/jinja.py", "label_function": "get_jinja_env", "label_head_lines": [[1, 33]], "head": "98a27bbd66e7d133f90e1b0dbce816dc80bf9d1d", "adv_available": true, "code_available": true, "latency": 0.93, "verdict": {"real_sink": "document_merge_service/api/jinja.py:28:get_jinja_env", "sink_in_changed_lines": true, "introduced_vs_preexisting": "introduced", "label_sound": true, "confidence": 0.75, "note": "The vulnerable sink is the Jinja2 Environment created in get_jinja_env (line 28), which is within the changed range [1,33] and is the SSTI/RCE root cause introduced by this change."}, "error": null}
|
||||||
|
{"repo": "punkpeye/mcp-remote", "family": "injection", "advisory": "GHSA-6xpm-ggf7-wc3p", "vuln_path": "src/lib/utils.ts", "label_function": "sanitizeUrl", "label_head_lines": [[709, 710], [712, 724]], "head": "3ad0fc047653e15b29b01d122848a729feb4ec78", "adv_available": true, "code_available": true, "latency": 1.37, "verdict": {"real_sink": "src/lib/utils.ts:708:sanitizeUrl", "sink_in_changed_lines": true, "introduced_vs_preexisting": "introduced", "label_sound": true, "confidence": 0.55, "note": "The advisory describes command injection via crafted authorization_endpoint URL, and the sanitizeUrl function at lines 708-729 is within the changed range, though the exact dangerous sink line cannot be confirmed from the truncated file."}, "error": null}
|
||||||
|
{"repo": "blackprint/engine-js", "family": "injection", "advisory": "GHSA-g3q2-vcjq-rgrc", "vuln_path": "src/utils.js", "label_function": "setDeepProperty", "label_head_lines": [[1, 3], [5, 6], [8, 10], [12, 14], [17, 18], [20, 21], [22, 22], [24, 25]], "head": "3d73bdb3ea662651171c2936ebe05a7951e03264", "adv_available": true, "code_available": true, "latency": 1.24, "verdict": {"real_sink": "src/utils.js:11:setDeepProperty", "sink_in_changed_lines": true, "introduced_vs_preexisting": "introduced", "label_sound": true, "confidence": 0.75, "note": "The advisory's dangerous sink is the prototype-pollution guard/assignment in setDeepProperty, whose lines fall within the changed head ranges, and the diff appears to add this guard logic."}, "error": null}
|
||||||
|
{"repo": "rap2hpoutre/laravel-log-viewer", "family": "config_secrets", "advisory": "GHSA-63qj-p8gh-5xxx", "vuln_path": "src/controllers/LogViewerController.php", "label_function": "index", "label_head_lines": [[9, 9], [12, 17], [22, 23], [26, 30], [35, 35], [48, 48]], "head": "5649c0bc37d8941a2408ed99d0f6f87a83f3eead", "adv_available": true, "code_available": true, "latency": 1.1, "verdict": {"real_sink": "src/controllers/LogViewerController.php:26:index", "sink_in_changed_lines": true, "introduced_vs_preexisting": "introduced", "label_sound": true, "confidence": 0.85, "note": "The dl request's base64_decode pathToLogFile download is the arbitrary-file-read sink, and it lies within the changed lines 22-30 introduced by this diff."}, "error": null}
|
||||||
|
{"repo": "nyariv/sandboxjs", "family": "injection", "advisory": "GHSA-66h4-qj4x-38xp", "vuln_path": "src/Sandbox.ts", "label_function": "hasOwnProperty", "label_head_lines": [[171, 171], [174, 174], [177, 178], [190, 191], [205, 205]], "head": "3cf2ba0cc0fa878687d11f28e9204100f6b88c10", "adv_available": true, "code_available": true, "latency": 1.14, "verdict": {"real_sink": "src/Sandbox.ts:190:hasOwnProperty", "sink_in_changed_lines": true, "introduced_vs_preexisting": "preexisting", "label_sound": false, "confidence": 0.75, "note": "The advisory's real sink is the prototype-whitelist check (Map.prototype access via hasOwnProperty/prototype handling), which is pre-existing code merely touched by the diff, not introduced by it."}, "error": null}
|
||||||
|
{"repo": "miguelgrinberg/python-socketio", "family": "deserialization", "advisory": "GHSA-g8c6-8fjj-2r4m", "vuln_path": "socketio/redis_manager.py", "label_function": "_publish", "label_head_lines": [[1, 60]], "head": "47620bbebd92a1b388df72a88c0ca35cdb530073", "adv_available": true, "code_available": true, "latency": 1.23, "verdict": {"real_sink": "socketio/redis_manager.py:57:_listen", "sink_in_changed_lines": true, "introduced_vs_preexisting": "preexisting", "label_sound": false, "confidence": 0.85, "note": "The dangerous pickle.loads sink is in _listen (line ~57), not the labelled _publish (lines 42-43), and the diff range [1,60] covers the whole file so the sink pre-exists rather than being introduced by this change."}, "error": null}
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
total audited=49
|
||||||
|
label_sound=True : 23 (47%)
|
||||||
|
label_sound=False: 26 (53%)
|
||||||
|
errors/no-verdict: 0
|
||||||
|
introduced_vs_preexisting: {'preexisting': 25, 'introduced': 23, 'unclear': 1}
|
||||||
|
sink_in_changed_lines: {True: 33, False: 16}
|
||||||
|
advisory unavailable: 0 | code unavailable: 0
|
||||||
|
|
||||||
|
-- SOUND (fair, change-located, introduced targets) --
|
||||||
|
aws/bedrock-agentcore-sdk-python injection :: The install_packages function (lines 540-581) falls within the changed
|
||||||
|
flarum/tags access_control :: The advisory describes missing permission checks when editing tags; th
|
||||||
|
matrix-org/matrix-appservice-bridge access_control :: The advisory's missing predecessor check concerns the room upgrade han
|
||||||
|
jenkinsci/ontrack-plugin access_control :: The dangerous GroovySandbox.run call with Whitelist.all() is the sandb
|
||||||
|
jupyter-lsp/jupyterlab-lsp path :: The advisory concerns unsecured endpoints in jupyter-lsp, and the chan
|
||||||
|
laravel/pulse injection :: The advisory's vulnerable remember() method is at line 21, which is wi
|
||||||
|
geosolutions-it/jai-ext injection :: The changed lines 555-557 fall within the createRuntimeInstance functi
|
||||||
|
decentralized-identity/veramo injection :: The advisory's SQL injection sink is the unsanitized item.column passe
|
||||||
|
jenkinsci/role-strategy-plugin access_control :: The advisory's fix concerns parent-permission checks in RoleMap, and t
|
||||||
|
jenkinsci/jira-plugin access_control :: The advisory describes the doValidate form validation method lacking P
|
||||||
|
chriskacerguis/codeigniter-restserver untrusted_destination :: The advisory describes an XXE in REST_Controller's constructor where X
|
||||||
|
ballcat-projects/ballcat-codegen injection :: The whole file (lines 1-48) is newly added in the diff, and the danger
|
||||||
|
getzep/graphiti injection :: The advisory describes Cypher label injection via node_labels concaten
|
||||||
|
actions/toolkit injection :: The advisory's dangerous sink is the delimiter-based GITHUB_ENV constr
|
||||||
|
i18next/i18next-http-backend untrusted_destination :: The changed line 17 is inside isSafeUrlSegmentBase, the validation fun
|
||||||
|
jenkinsci/radargun-plugin deserialization :: The unsafe `new Yaml()` constructor (line 17) is the dangerous sink en
|
||||||
|
jenkinsci/gitlab-oauth-plugin untrusted_destination :: The advisory describes an open redirect via the Referer header in doCo
|
||||||
|
sorlen008/desktopcommandermcp untrusted_destination :: The advisory names readFileFromUrl (function_lines 164-212) and the di
|
||||||
|
zenitram/malla output_encoding :: The advisory's relay_node_analysis.js sink at line ~124 is the candida
|
||||||
|
adfinis/document-merge-service injection :: The vulnerable sink is the Jinja2 Environment created in get_jinja_env
|
||||||
|
punkpeye/mcp-remote injection :: The advisory describes command injection via crafted authorization_end
|
||||||
|
blackprint/engine-js injection :: The advisory's dangerous sink is the prototype-pollution guard/assignm
|
||||||
|
rap2hpoutre/laravel-log-viewer config_secrets :: The dl request's base64_decode pathToLogFile download is the arbitrary
|
||||||
|
|
||||||
|
-- by family: sound/total --
|
||||||
|
access_control 5/8
|
||||||
|
config_secrets 1/4
|
||||||
|
deserialization 1/2
|
||||||
|
injection 10/13
|
||||||
|
output_encoding 1/8
|
||||||
|
path 1/7
|
||||||
|
untrusted_destination 4/7
|
||||||
|
|
||||||
|
-- sound but confidence<0.7 (spot-check) --
|
||||||
|
jupyter-lsp/jupyterlab-lsp conf=0.6
|
||||||
|
jenkinsci/role-strategy-plugin conf=0.55
|
||||||
|
chriskacerguis/codeigniter-restserver conf=0.6
|
||||||
|
getzep/graphiti conf=0.6
|
||||||
|
punkpeye/mcp-remote conf=0.55
|
||||||
Reference in New Issue
Block a user