fix(corpus): advisory-pair repo-overlap -- remove real pilot leaks, skip vendored trees

test_no_pair_repeats_a_repository_the_benchmarks_already_name failed: advisory-fix
catalog repos also appeared elsewhere under benchmarks/. Root cause split two ways:

1. Genuine leak: 16 catalog repos are also subjects in benchmarks/search/private/
   pilot.json (a real private pilot population). Removed those 16 pairs from the
   three catalogs and their verification.json rows (totals recomputed, catalog ==
   verification preserved).
2. Spurious: the overlap scan greped ~49k vendored files under
   benchmarks/search/private/runs/*/checkout/node_modules/, so any catalog repo a
   vendored dependency's README names collided. Added a narrow vendored-tree skip
   (node_modules/vendor) to the scan rather than deleting labelled pairs over a
   dependency mention.

Implemented from Codex's first pass (gpt-6.1-sol), then gated and corrected: Codex
removed 20 pairs; 4 of those (backstage/backstage, koajs/koa, beaugunderson/
ip-address, cakephp/cakephp) were driven only by vendored/non-population mentions
and are kept. Also excluded advisory-fixes-spread.json (catalog-derived report)
and research-2026-09-26.md (selection write-up) as non-population.

tests/test_advisory_fix_pairs.py + tests/test_learn_labels.py: 53 passed.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
This commit is contained in:
Marius Ciepluch
2026-10-12 15:22:55 +02:00
co-authored by Claude Opus 4.8
parent 60ffff0168
commit 9a3250f6c5
8 changed files with 23 additions and 646 deletions
@@ -1460,42 +1460,6 @@ mechanism = "source_reaches_sink"
family = "injection"
evidence = "GHSA-2w86-xfrc-g85r: Orval: RCE via schema property name -> computed-property-key injection in the MSW mock generator"
[[pair]]
name = "typeorm-handler-41d1c62"
slice = "advisory-fixes"
batch = "2026-10-03"
language = "typescript"
origin = "github-advisory"
license = "MIT"
repo = "typeorm/typeorm"
cve = "CVE-2026-73651 GHSA-2rp8-mm9q-fp49"
cwe = "CWE-94"
ecosystem = "npm"
published_at = "2026-07-21T21:59:23Z"
post_cutoff = true
commit = "41d1c62fe49f99c3ca916d4d986f61ee9f45d519"
parent = "8a51b756bf31c885da1e1d92cb17d94819c7040a"
commit_url = "https://github.com/typeorm/typeorm/commit/41d1c62fe49f99c3ca916d4d986f61ee9f45d519"
vendored = false
host = "github"
path = "src/commands/MigrationGenerateCommand.ts"
mode = "name"
relpath = "src/commands/MigrationGenerateCommand.ts"
provenance = "agent"
split = "train"
review_tier = "advisory"
fix_date = "2026-07-13"
fix_lines = { in_function = 8, in_file = 20, source_total = 22 }
[[pair.expected]]
cwe = "CWE-94"
class = "code-injection"
path = "src/commands/MigrationGenerateCommand.ts"
function = "handler"
mechanism = "source_reaches_sink"
family = "injection"
evidence = "GHSA-2rp8-mm9q-fp49: TypeORM: migration:generate template-literal code injection"
[[pair]]
name = "velocity-js-isblockedpathkey-f8e47a6"
slice = "advisory-fixes"
@@ -1604,42 +1568,6 @@ mechanism = "source_reaches_sink"
family = "injection"
evidence = "GHSA-9473-5f9j-94wq: Nuxt: Server-Side Remote Code Execution via Runtime Template Injection in Nuxt Server Island Props"
[[pair]]
name = "gitpython-option-candidates-96a888f"
slice = "advisory-fixes"
batch = "2026-10-03"
language = "python"
origin = "github-advisory"
license = "BSD-3-Clause"
repo = "gitpython-developers/gitpython"
cve = "CVE-2026-76220 GHSA-wvpp-8hx9-p66j"
cwe = "CWE-88"
ecosystem = "pip"
published_at = "2026-08-07T15:49:07Z"
post_cutoff = true
commit = "96a888f4d782cb2f80452148e48e60ce4af6d541"
parent = "a495ccd3b547ccd60b2187215823b72a9c0188bf"
commit_url = "https://github.com/gitpython-developers/gitpython/commit/96a888f4d782cb2f80452148e48e60ce4af6d541"
vendored = false
host = "github"
path = "git/cmd.py"
mode = "name"
relpath = "git/cmd.py"
provenance = "agent"
split = "train"
review_tier = "advisory"
fix_date = "2026-08-04"
fix_lines = { in_function = 13, in_file = 10, source_total = 12 }
[[pair.expected]]
cwe = "CWE-88"
class = "argument-injection"
path = "git/cmd.py"
function = "_option_candidates"
mechanism = "source_reaches_sink"
family = "injection"
evidence = "GHSA-wvpp-8hx9-p66j: GitPython: Unsafe git option guard bypass via split_single_char_options=False short-option token smuggling enables command execution"
[[pair]]
name = "mermaid-addnamespace-12d472c"
slice = "advisory-fixes"
@@ -2540,42 +2468,6 @@ mechanism = "path_join_user_input"
family = "path"
evidence = "GHSA-m9mq-7m7q-xc6p: browse-mcp has an arbitrary file write via unconfined download and state paths"
[[pair]]
name = "notebooklm-mcp-makeslug-13828d9"
slice = "advisory-fixes"
batch = "2026-10-03"
language = "typescript"
origin = "github-advisory"
license = "MIT"
repo = "roomi-fields/notebooklm-mcp"
cve = "CVE-2026-61647 GHSA-jjhp-8crj-mppq"
cwe = "CWE-22"
ecosystem = "npm"
published_at = "2026-09-22T14:43:26Z"
post_cutoff = true
commit = "13828d9ff3933839ce14c1797d3b20a6bb7694a6"
parent = "50f74d6bec799687066a25355894077577683231"
commit_url = "https://github.com/roomi-fields/notebooklm-mcp/commit/13828d9ff3933839ce14c1797d3b20a6bb7694a6"
vendored = false
host = "github"
path = "src/utils/vault-writer.ts"
mode = "name"
relpath = "src/utils/vault-writer.ts"
provenance = "agent"
split = "train"
review_tier = "advisory"
fix_date = "2026-06-20"
fix_lines = { in_function = 10, in_file = 45, source_total = 54 }
[[pair.expected]]
cwe = "CWE-22"
class = "path-traversal"
path = "src/utils/vault-writer.ts"
function = "makeSlug"
mechanism = "path_join_user_input"
family = "path"
evidence = "GHSA-jjhp-8crj-mppq: @roomi-fields/notebooklm-mcp has a path traversal in vault.batch tool that allows arbitrary file write outside intended vault directory"
[[pair]]
name = "langchain-nvidia-url-to-b64-string-b483c7c"
slice = "advisory-fixes"
@@ -3008,42 +2900,6 @@ mechanism = "validation_strength"
family = "untrusted_destination"
evidence = "GHSA-fp4x-ggrf-wmc6: H3 has an Open Redirect via Protocol-Relative Path in redirectBack() Referer Validation"
[[pair]]
name = "axios-setproxy-fb3befb"
slice = "advisory-fixes"
batch = "2026-10-03"
language = "javascript"
origin = "github-advisory"
license = "MIT"
repo = "axios/axios"
cve = "CVE-2025-62718 GHSA-3p68-rc4w-qgx5"
cwe = "CWE-441"
ecosystem = "npm"
published_at = "2026-04-09T17:32:19Z"
post_cutoff = false
commit = "fb3befb6daac6cad26b2e54094d0f2d9e47f24df"
parent = "8023035109c9de959ca47a64658dd97258d5eca7"
commit_url = "https://github.com/axios/axios/commit/fb3befb6daac6cad26b2e54094d0f2d9e47f24df"
vendored = false
host = "github"
path = "lib/adapters/http.js"
mode = "name"
relpath = "lib/adapters/http.js"
provenance = "agent"
split = "train"
review_tier = "advisory"
fix_date = "2026-04-06"
fix_lines = { in_function = 4, in_file = 4, source_total = 111 }
[[pair.expected]]
cwe = "CWE-441"
class = "ssrf"
path = "lib/adapters/http.js"
function = "setProxy"
mechanism = "source_reaches_sink"
family = "untrusted_destination"
evidence = "GHSA-3p68-rc4w-qgx5: Axios has a NO_PROXY Hostname Normalization Bypass that Leads to SSRF"
[[pair]]
name = "rembg-s-command-07ad0d4"
slice = "advisory-fixes"
@@ -200,11 +200,6 @@
"ok": true,
"bytes_read": 2607
},
{
"name": "typeorm-handler-41d1c62",
"ok": true,
"bytes_read": 11977
},
{
"name": "velocity-js-isblockedpathkey-f8e47a6",
"ok": true,
@@ -220,11 +215,6 @@
"ok": true,
"bytes_read": 6805
},
{
"name": "gitpython-option-candidates-96a888f",
"ok": true,
"bytes_read": 3421
},
{
"name": "mermaid-addnamespace-12d472c",
"ok": true,
@@ -350,11 +340,6 @@
"ok": true,
"bytes_read": 5302
},
{
"name": "notebooklm-mcp-makeslug-13828d9",
"ok": true,
"bytes_read": 2103
},
{
"name": "langchain-nvidia-url-to-b64-string-b483c7c",
"ok": true,
@@ -415,11 +400,6 @@
"ok": true,
"bytes_read": 2750
},
{
"name": "axios-setproxy-fb3befb",
"ok": true,
"bytes_read": 4403
},
{
"name": "rembg-s-command-07ad0d4",
"ok": true,
@@ -491,6 +471,6 @@
"bytes_read": 3385
}
],
"verified": 98,
"bytes_read": 526134
"verified": 94,
"bytes_read": 504230
}