Skip to content

Don't let a failed CVE probe confirm the banner match - #37

Draft
cursor[bot] wants to merge 1 commit into
mainfrom
cursor/critical-bug-management-e707
Draft

cursor[bot] wants to merge 1 commit into
mainfrom
cursor/critical-bug-management-e707

Conversation

@cursor

@cursor cursor Bot commented Sep 13, 2026

Copy link
Copy Markdown
Contributor

Bug and impact

An AI/full scan of Apache (or any host whose banner correlated a high-CVSS CVE with a builtin verifier plan) could persist that CVE as fusion-confirmed even when the active probe failed — and a generic nginx 502 Bad Gateway was enough to pin CVE-2021-40438 (mod_proxy SSRF, CVSS 9.1) as un-droppable.

Trigger: scan with --ai / --full and an AI completer against Apache/2.4.41 behind a reverse proxy. NVD returns CVE-2021-40438. The verifier sends GET /?unix:///var/run/example.socket|http://127.0.0.1:80/. The front proxy returns 404 or a stock nginx 502. Fusion auto-confirmed the banner hit.

Root cause

run_verifier always emitted a reliability=high signal, including on miss. That broke the gate's version-only discard (nvd + failed verifier = 2 sources and a high-reliability sensor → confirmed). Separately, the CVE-2021-40438 builtin treated body substrings "Bad Gateway" / "proxy" as proof.

Fix

  • Count only evidential signals in the fusion gate; a failed verifier test is not corroboration.
  • Emit verifier signals only when the probe confirms; the live-engine bridge ignores the rest.
  • Require distinctive Apache httpd errors (AH00957, mod_proxy, …) instead of a generic 502.

Validation

python3 -m pytest test_fusion.py test_fusion_engine_bridge.py test_verifier_sanitize.py test_gate_version_cap.py test_fusion_adjudicator.py -q — 76 passed.

python3 -m pytest test_*.py -q — 1758 passed, 5 skipped.

python3 -m bandit -r src/fusion/gate.py src/fusion/engine_bridge.py src/verifier src/engine.py --severity-level high — no high issues.

Open in Web View Automation 

A verifier miss was still emitted as a high-reliability signal, so fusion
treated "we tried a probe" as corroboration and auto-confirmed the NVD
version hit. The CVE-2021-40438 builtin also treated a generic nginx 502
as proof of Apache mod_proxy SSRF.

Only confirmed verifier results enter the gate now, and the builtin plans
require distinctive httpd errors instead of "Bad Gateway".

Co-authored-by: dmitryflynn <dmitryflynn@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant