# Independent evaluation population v2 (milestone M4). Reserved 2026-09-26. # # RESERVED, NOT SCANNED. Chosen by web research alone (research-2026-09-26.md): advisories taken newest-first per # language under fixed criteria, never by how easy a case looks for this analyzer; 261 advisories examined, 224 # rejected with reasons. No repository was cloned, no scanner or project tooling run on any of them, and none is # referenced anywhere in this project's development tree (checked against every github.com URL under benchmarks/, # src/, tests/ and .kiro/, which includes the v1 population). # # Why a v2: v1 (2026-09-24) was evaluated and then used to retune the analyzer (file-owned gaps, Node vm sinks, # Django sources, quoted-only SQL escapes, guards, .gitignore semantics). A retune cannot be qualified on the # population that informed it. # # Rules for this file are v1's: no scan, trace, probe or census of these repositories before the population is # FROZEN and protocol-v2.md is committed; no rule, fact or query change may cite these cases before their # evaluation is recorded. # # `sites` are the sink or execution locations the ADVISORY names, declared here before any scan. Protocol v2 # credits a finding at one of them as well as one matching the fix's changed lines. # # Selected by the maintainer on 2026-09-26 ("balanced" rule-based selection, 17 cases -- the menu called it 16; the # list it showed held 17). Licences marked "verify" must be checked before any result is published. schema_version = 1 status = "frozen" frozen_on = "2026-09-26" freeze_record = "freeze-v2.json" reserved_on = "2026-09-26" selected_by = "maintainer" research = "research-2026-09-26.md" protocol = "protocol-v2.md" multi_language_members = ["wp-gopay-log-filter-sqli", "wp-user-registration-login-redirect", "wp-directorist-avatar-ssrf", "wp-groundhogg-confirm-redirect"] also_reserved = ["population-v1.toml", "../push/ghost-reserved.toml"] [[case]] id = "pgadmin-maintenance-sqli" repo = "https://github.com/pgadmin-org/pgadmin4" language = "python" also = ["javascript"] family = "injection" advisory = ["CVE-2026-7815", "GHSA-hp84-p2gq-6fvr"] vulnerable = "d112dc3b962218efc3613fa727d54f0fc5b1d527" fixed = "cf53953d9ad66c182a08e662c1ba29c5831b486b" ancestry = "parent" sink = "web/pgadmin/tools/maintenance/templates/maintenance/sql/command.sql (string concatenation of vacuum_index_cleanup, vacuum_parallel, buffer_usage_limit, reindex_tablespace) rendered in web/pgadmin/tools/maintenance/__init__.py :: create_maintenance_job() → render_template(...) → BatchProcess(cmd=psql, args=[..., '--command', query])" source = "JSON body of POST /maintenance/job//" sites = ["web/pgadmin/tools/maintenance/__init__.py::create_maintenance_job"] privilege = "authenticated (tools_maintenance permission)" license = "PostgreSQL (verified 2026-10-02: LICENSE, d112dc3b962218efc3613fa727d54f0fc5b1d527)" confidence = "high" benign = { base = "e7eaef0dc002c254e4dd15705df800c448e8eb4c", tip = "a50a553b0a7e529e5d87f52bdc6d3a5ee3e8b9e8", subject = "chore: feature tests use sys.executable; sync yarn.lock to package.json", how = "automatic proposal, reviewed" } [[case]] id = "qwed-sympy-eval" repo = "https://github.com/QWED-AI/qwed-verification" language = "python" also = [] family = "injection" advisory = ["CVE-2026-55585", "GHSA-q27q-98j4-9pfv"] vulnerable = "06801f68cbf9c9b5e54cc17f2a61cb2792da7a26" fixed = "6066b68c0c4f4cc2c3771824822aaa864d082ef8" ancestry = "first parent (fixed is the merge of PR #200; the PR commit `dc9d4db72ca4b4ae3f96d0e6a0c27a9e38a06f61` is a direct child of the vulnerable SHA)" sink = "src/qwed_new/api/main.py :: verify_math() → sympy.parsing.sympy_parser.parse_expr(expression_normalized) (also left_str/right_str); second path src/qwed_new/core/batch.py :: _verify_item() → parse_expr(item.query)" source = "POST /verify/math JSON expression; POST /verify/batch item query" sites = ["src/qwed_new/api/main.py::verify_math", "src/qwed_new/core/batch.py::_verify_item"] privilege = "authenticated tenant (API key; self-signup /auth/signup is on by default)" license = "Apache-2.0" confidence = "high" benign = { base = "5214f2c558641f4d02d3d75abf039f164e393131", tip = "637a880a8333875543090894fc13bf092783d90e", subject = "feat: emit VC v1.0 outputs from Docker action entrypoint (#313)", how = "chosen by hand after review" } [[case]] id = "contextforge-prompt-ssti" repo = "https://github.com/IBM/mcp-context-forge" language = "python" also = ["javascript"] family = "injection" advisory = ["GHSA-vwf3-4xxj-qg6h"] vulnerable = "0f8e0ad679f1fff685f486e17f642ac863c8ca9e" fixed = "4d31004661858a2e99055b3c0c9f14218b8f7120" ancestry = "parent" sink = "mcpgateway/services/prompt_service.py :: PromptService._render_template() → _compile_jinja_template() → _get_jinja_env().from_string(template).render() (plain jinja2.Environment)" source = "prompt template stored through register_prompt (prompts create/update API), rendered on prompt get" sites = ["mcpgateway/services/prompt_service.py::_render_template", "mcpgateway/services/prompt_service.py::_compile_jinja_template"] privilege = "authenticated (permission to create or update prompts)" license = "Apache-2.0" confidence = "high" benign = { base = "1f8fd58980f4565d4788ffc3587d6e3bd16b3342", tip = "9938c58f7819c526932c4ae4ad646a9c028cb19e", subject = "fix: add rust coverage reports (#4458)", how = "automatic proposal, reviewed" } [[case]] id = "lmdeploy-media-url-ssrf" repo = "https://github.com/InternLM/lmdeploy" language = "python" also = [] family = "untrusted_destination" advisory = ["GHSA-39wr-7q6h-cf68"] vulnerable = "71648d239c978452720a6d6692fe914efc8a7b94" fixed = "03c313006d17cc3feae86b633c44206a997c44db" ancestry = "parent" sink = "lmdeploy/vl/media/connection.py :: _load_http_url() → requests.Session().get(url_spec.geturl(), allow_redirects=True), gated by _is_safe_url() (the urlparse host differs from the requests host)" source = "image_url/video/audio URLs in POST /v1/chat/completions → serve/processors/multimodal.py :: MultimodalProcessor._parse_multimodal_item() → load_from_url()" sites = ["lmdeploy/vl/media/connection.py::_load_http_url"] privilege = "unauthenticated by default (api_keys is optional, default None)" license = "Apache-2.0" confidence = "medium" benign = { base = "b6a29db4d2d218838048975977f125dc9b1ac75d", tip = "3d9d23087b59fa44afe83deb03ee7cce04df3b4d", subject = "fix(benchmark): seed NumPy RNG so --seed controls random-mode lengths (#4785)", how = "automatic proposal, reviewed" } [[case]] id = "winml-cli-serve-cors" repo = "https://github.com/microsoft/winml-cli" language = "python" also = [] family = "config_secrets" advisory = ["CVE-2026-84452", "GHSA-96p9-rh4f-92cf"] vulnerable = "02179d185f0e3ac23518236b5ca1f61fd37ef680" fixed = "f4073e0ef4700a25b623487e7e45c421ca0b9993" ancestry = "parent" sink = "src/winml/modelkit/serve/cli_api.py :: module level app.add_middleware(CORSMiddleware, allow_origins=[\"*\"], ...) (same in serve/app.py :: create_app())" source = "any web page in the victim's browser calling POST /v1/cli/{command} on 127.0.0.1" sites = ["src/winml/modelkit/serve/cli_api.py::", "src/winml/modelkit/serve/app.py::create_app"] privilege = "unauthenticated (cross-origin from any website)" license = "MIT" confidence = "high" benign = { base = "8d631f6f1e5db26a04e8c13045280408c6f984dc", tip = "be3e59dd412d4918c5a852aa4d8f0207c34aaf6f", subject = "Remove preload ORT DLL (undo PR 689) (#1380)", how = "automatic proposal, reviewed" } [[case]] id = "reactpress-findall-column-sqli" repo = "https://github.com/fecommunity/reactpress" language = "typescript" also = ["javascript"] family = "injection" advisory = ["CVE-2026-61685", "GHSA-wmw4-mw6x-6vfm"] vulnerable = "c3dd10681b3d2b5e224f7ac647b3769557603975" fixed = "78ecb70af1c021455c05fdcbe137212c70e310d6" ancestry = "parent" sink = "server/src/modules/article/article.service.ts :: ArticleService.findAll() (query-string key interpolated as article.${key} into andWhere); same pattern in comment/file/page/knowledge services" source = "@Query() queryParams in ArticleController.findAll() (GET /api/article)" sites = ["server/src/modules/article/article.service.ts::findAll"] privilege = "unauthenticated" license = "MIT" confidence = "high" benign = { base = "295f5de807ed1ebec7b6b155cce16b24a743f247", tip = "903d4b2e2de1c259843f3a8c67701fa7d50d2205", subject = "docs: update documentation links to new site URL", how = "chosen by hand after review" } [[case]] id = "fuxa-tdengine-escape-sqli" repo = "https://github.com/frangoteam/FUXA" language = "javascript" also = ["typescript"] family = "injection" advisory = ["CVE-2026-47720", "GHSA-h9fj-c2qr-76g2"] vulnerable = "193a888f8e3f805325072829b1644a2c768c948b" fixed = "b78f6159d02a56ce5ff48207feb936afb3534fc8" ancestry = "parent" sink = "server/runtime/storage/tdengine/index.js :: TDengine.getDaqValue() (escapeTdString(tagid) doubles quotes but not backslashes, then SQL string for cursor.query)" source = "sids of GET /api/daq (server/api/daq/index.js) or Socket.IO DAQ_QUERY" sites = ["server/runtime/storage/tdengine/index.js::getDaqValue"] privilege = "unauthenticated (guest level; socket handler has no auth check)" license = "MIT" confidence = "medium" benign = { base = "e787e4140b5e71c5b02e23c295fa08b8df0edc53", tip = "bf998eeee3158e338724c71979b7cdafcfa74b32", subject = "Button control with configurable icon (#2349)", how = "automatic proposal, reviewed" } [[case]] id = "budibase-mongo-template-nosqli" repo = "https://github.com/Budibase/budibase" language = "typescript" also = ["javascript"] family = "injection" advisory = ["GHSA-pmpg-2mxq-6xwr", "GHSA-qw6m-8fw2-2v64"] vulnerable = "b7e63df737eede85d951aa9665b0c0778ece7ccb" fixed = "dd8c0654b35cd89ce3645f2355f4bf2ff9a5dd80" ancestry = "parent" sink = "packages/server/src/sdk/workspace/queries/queries.ts :: enrichContext() (handlebars processStringSync(..., {noEscaping: true}) into the json template, then JSON.parse) → packages/server/src/integrations/mongodb.ts :: MongoIntegration.read() (collection.find(json))" source = "query parameters / bindings (e.g. currentUser.email, request parameters) of POST /api/v2/queries/:queryId (packages/server/src/api/controllers/query/index.ts :: executeV2)" sites = ["packages/server/src/sdk/workspace/queries/queries.ts::enrichContext", "packages/server/src/integrations/mongodb.ts::read"] privilege = "authenticated app user (BASIC role)" license = "GPL-3.0 (root LICENSE says \"GPLv3 overall\"; server package.json GPL-3.0; GitHub NOASSERTION)" confidence = "medium" benign = { base = "a4423fc5bf237e6101c2e8348ef5372fff6484cd", tip = "272c6a61a2a386688792f9e26c2665f2f431a5c2", subject = "Merge pull request #18865 from Budibase/feature/18784-ai-credit", how = "automatic proposal, reviewed" } [[case]] id = "unleash-addon-webhook-ssrf" repo = "https://github.com/Unleash/unleash" language = "typescript" also = ["javascript"] family = "untrusted_destination" advisory = ["CVE-2026-63004", "GHSA-5vf6-jrqr-78fj"] vulnerable = "b9f3217d327f24094b4352130baa30387f85cffe" fixed = "2100db76af3473f13e6fb40096cf17a9c2b741a1" ancestry = "parent" sink = "src/lib/addons/addon.ts :: Addon.fetchRetry() (ky(url, ...)), called from webhook.ts / slack / teams / datadog / new-relic addons" source = "addon parameters.url saved through the admin addons API (CREATE_ADDON/UPDATE_ADDON), fired on feature events" sites = ["src/lib/addons/addon.ts::fetchRetry"] privilege = "authenticated (CREATE_ADDON/UPDATE_ADDON root permission)" license = "AGPL-3.0" confidence = "high" benign = { base = "d4efb3a31616483c438606edbecce13b868fc587", tip = "cb4e6250743fac364bae50b985b2b8348def7a2b", subject = "Merge commit '232b5d575c7d455ce7ac767183e61fd389dd8aac' into automation/sync-oss-upstream", how = "automatic proposal, reviewed" } [[case]] id = "medplum-external-auth-open-redirect" repo = "https://github.com/medplum/medplum" language = "typescript" also = ["javascript"] family = "untrusted_destination" advisory = ["CVE-2026-53728", "GHSA-m44r-7c5h-m6mj"] vulnerable = "5d4a8654b02aa67c444f96ae1eb5663c09854006" fixed = "7ae10035ddadde4dba7b18d3156553940465b3a1" ancestry = "parent" sink = "packages/server/src/auth/external.ts :: externalCallbackHandler() (res.redirect(redirectUrl) with URI accepted by getClientRedirectUri(client, body.redirectUri, true) prefix match in packages/server/src/oauth/clients.ts)" source = "redirectUri inside JSON state query parameter of GET /auth/external" sites = ["packages/server/src/auth/external.ts::externalCallbackHandler"] privilege = "unauthenticated (victim completes external IdP login)" license = "Apache-2.0" confidence = "high" benign = { base = "0dd335e8520b859563626d9bf50d602a5f3ad79a", tip = "20790b17d76f335e60dd703f65d4eb13bbb4754d", subject = "tweak(cdk): make `minHealthyPercent` 100 (#8836)", how = "automatic proposal, reviewed" } [[case]] id = "cct-studio-server-cmdi" repo = "https://github.com/davila7/claude-code-templates" language = "javascript" also = ["typescript", "python"] family = "injection" advisory = ["CVE-2026-73222", "GHSA-79wm-x847-7cvg"] vulnerable = "acdb5893412a81eaec9862ee24a4613bf296ab45" fixed = "bc4618b07232633c1c0aac12a43e436268d31783" ancestry = "parent" sink = "cli-tool/src/sandbox-server.js :: executeLocalTask() (spawn('claude', [finalPrompt], {shell: true})), route handler POST /api/install-agent and checkAndInstallAgent() (spawn('npx', [..., agentName, ...], {shell: true}))" source = "req.body.prompt, req.body.agentName, req.body.agent" sites = ["cli-tool/src/sandbox-server.js::executeLocalTask", "cli-tool/src/sandbox-server.js::checkAndInstallAgent"] privilege = "unauthenticated (server on 0.0.0.0, wildcard CORS)" license = "MIT" confidence = "high" benign = { base = "c2ed4066bc7ea66806e90d6c0b97988495ff44b2", tip = "025520a8bfc8ed05e9a197bf53fa2f871f666dea", subject = "feat(dashboard): hide Loops from navigation menu (#738)", how = "chosen by hand after review" } [[case]] id = "wp-gopay-log-filter-sqli" repo = "https://github.com/gopaycommunity/gopay-woocommerce-integration" language = "php" also = ["javascript"] family = "injection" advisory = ["CVE-2026-75959", "GHSA-88c4-2f34-57h5"] vulnerable = "626bc8b5f8d33de6eefd921e3a05ed52ac320bcd" fixed = "7190c985370f9758f226c2f2addd79532a2f93d5" ancestry = "parent" sink = "admin/views/log.php :: file scope (included by admin/class-gopay-gateway-admin.php), two $wpdb->get_results(sprintf(\"... REGEXP '[\\w\\W]*%s[\\w\\W]*' ...\", ..., strtoupper($log_table_filter)))" source = "filter_input(INPUT_GET, 'log_table_filter')" sites = ["admin/views/log.php::"] privilege = "admin (shop manager, manage_woocommerce)" license = "GPL-2.0-or-later (verified 2026-10-02: gopay-gateway.php header, 626bc8b5f8d33de6eefd921e3a05ed52ac320bcd)" confidence = "high" benign = { base = "2b5fe58d6dadbfecb01ed34611aed8502d11e612", tip = "88b10bda704a37e88121e22dc22f4e5019097272", subject = "GPY025-136: fix i18n and remove translation calls on non-literal text", how = "automatic proposal, reviewed" } [[case]] id = "wp-user-registration-login-redirect" repo = "https://github.com/themegrill/user-registration" language = "php" also = ["javascript"] family = "untrusted_destination" advisory = ["CVE-2026-80072", "GHSA-w78c-fx7q-9x8m"] vulnerable = "e52cf151cb229852e6209fb3a627aa51485139c1" fixed = "75c940dab15fd54d5a3fbb9f2213767b89467b08" ancestry = "parent" sink = "includes/functions-ur-core.php :: ur_process_login() (wp_redirect(wp_validate_redirect($redirect, $redirect)), and wp_send_json_success(['message'=>$redirect]) on the AJAX path)" source = "$post['redirect'] (login form POST) or wp_get_raw_referer()" sites = ["includes/functions-ur-core.php::ur_process_login"] privilege = "unauthenticated attacker, victim logs in" license = "GPL-3.0-or-later (verified 2026-10-02: license.txt, e52cf151cb229852e6209fb3a627aa51485139c1)" confidence = "high" benign = { base = "064dd7ab1585082b9b5cf078f2d22c0234f25e48", tip = "3b6acc4695e93d9d48969ed894c21419bd09b33a", subject = "Fix - Deactivate Licence button did nothing when the pro-activation transient was set (#1418)", how = "automatic proposal, reviewed" } [[case]] id = "wp-directorist-avatar-ssrf" repo = "https://github.com/sovware/directorist" language = "php" also = ["javascript"] family = "untrusted_destination" advisory = ["CVE-2026-84046", "GHSA-6q63-3w56-m722"] vulnerable = "77cfc9bc8b453f97ab7e720330706fa4ef056867" fixed = "1a67825d5cf6e7c768c3a692da1d18bae732bea9" ancestry = "parent" sink = "includes/rest-api/functions.php :: directorist_rest_upload_image_from_url() (download_url($image_url))" source = "$request['avater']['src'] in includes/rest-api/Version1/class-users-controller.php :: update_user_meta_fields() (REST user update)" sites = ["includes/rest-api/functions.php::directorist_rest_upload_image_from_url"] privilege = "authenticated (subscriber)" license = "GPL-3.0-or-later (verified 2026-10-02: license.txt + directorist-base.php header, 77cfc9bc8b453f97ab7e720330706fa4ef056867)" confidence = "medium" benign = { base = "61ddcdf84f18cbe7749036a912d2931cef8cbd5a", tip = "986becd484f8f2d9b60604737d4fb4bf08fa6d1b", subject = "Replaced Location with Address on the All Listings map view (#2280)", how = "chosen by hand after review" } [[case]] id = "wp-groundhogg-confirm-redirect" repo = "https://github.com/groundhoggwp/groundhogg" language = "php" also = ["javascript"] family = "untrusted_destination" advisory = ["CVE-2026-81741", "GHSA-m96f-c5vh-h7cm"] vulnerable = "9472a1dd79d4556c40eece501a61930793f170d3" fixed = "028247d4b8ec9ba051d3eb48f1466a759bc16bfd" ancestry = "parent (follow-up is the direct child of the fix)" sink = "templates/preferences.php :: file scope, case 'confirm': (wp_redirect($redirect_to))" source = "get_url_var('redirect_to') (query string, only through esc_url_raw(sanitize_text_field(...)))" sites = ["templates/preferences.php::"] privilege = "unauthenticated (crafted preferences link)" license = "GPL-3.0-or-later (verified 2026-10-02: groundhogg.php header, 9472a1dd79d4556c40eece501a61930793f170d3)" confidence = "high" benign = { base = "61c8a03f11b6030c630be6ae0b0c2ad641eb733a", tip = "e3a69f1c2814c6bebed940505894008748566b93", subject = "output a square image regardless of image dimensions", how = "automatic proposal, reviewed" } [[case]] id = "froxlor-admin-ip-second-order-sqli" repo = "https://github.com/froxlor/froxlor" language = "php" also = ["javascript"] family = "injection" advisory = ["CVE-2026-54348", "GHSA-w27m-rmmf-g5w4"] vulnerable = "9bf03de643a2edee4642bfc6c94db1f05253da02" fixed = "a1eaca5a1601c8a30e00814a4fc73ad0c185f89e" ancestry = "parent (ancestor of tag 2.3.8)" sink = "lib/Froxlor/Api/Commands/IpsAndPorts.php :: IpsAndPorts::listing() / listingCount() (implode(\", \", json_decode($this->getUserDetail('ip'), true)) into WHERE id IN (...)); also lib/Froxlor/Api/Commands/Domains.php :: validateIpAddresses()" source = "ipaddress API parameter of Admins.add / Admins.update (lib/Froxlor/Api/Commands/Admins.php), stored as JSON in panel_admins.ip, read back via getUserDetail('ip')" sites = ["lib/Froxlor/Api/Commands/IpsAndPorts.php::listing", "lib/Froxlor/Api/Commands/IpsAndPorts.php::listingCount", "lib/Froxlor/Api/Commands/Domains.php::validateIpAddresses"] privilege = "admin (API key with change_serversettings)" license = "LGPL-2.1 (per GitHub)" confidence = "high" benign = { base = "b595f061fbb68874423809fec9f2a42bf6b34175", tip = "9d274828bdc4eefec0058a5a3a25bf4eb69d0f70", subject = "avoid warnings regarding php8.5 in config/database.php; adjust phpunit for froxlor/framework testing", how = "automatic proposal, reviewed" } [[case]] id = "sulu-smart-content-sql2-injection" repo = "https://github.com/sulu/sulu" language = "php" also = ["javascript"] family = "injection" advisory = ["CVE-2026-92692", "GHSA-jg26-q8hg-3pq4"] vulnerable = "d061094f5b7bb1d5e974544fce30bede9c7adf8e" fixed = "d19c01487af8c3de2fb3aa145856707a6367392c" ancestry = "parent (2.6 branch; ancestor of tag 2.6.25)" sink = "src/Sulu/Component/Content/SmartContent/QueryBuilder.php :: QueryBuilder::buildCategoriesWhere() (also buildTagsWhere(), buildAudienceTargeting()), string-concatenated into the SQL2 WHERE clause built by buildWhere()" source = "?categories= query parameter, read in src/Sulu/Component/Category/Request/CategoryRequestHandler.php :: getCategories() (explode + trim only), passed by src/Sulu/Component/SmartContent/ContentType.php as websiteCategories" sites = ["src/Sulu/Component/Content/SmartContent/QueryBuilder.php::buildCategoriesWhere", "src/Sulu/Component/Content/SmartContent/QueryBuilder.php::buildWhere"] privilege = "unauthenticated (any public page with a category-filtered Smart Content block)" license = "MIT" confidence = "high" benign = { base = "777f4eb47d45dab420c82b43ae6f513638294de0", tip = "6621a429c5284bd05ee1b60f333aff83297fecde", subject = "Removing unused service argument (#7169)", how = "chosen by hand after review" }