Skip to content

Don't confirm CVE-2024-38476/38477 from an Apache 403 page - #43

Draft
cursor[bot] wants to merge 1 commit into
mainfrom
fix/apache-403-htaccess-cve-confirm
Draft

cursor[bot] wants to merge 1 commit into
mainfrom
fix/apache-403-htaccess-cve-confirm

Conversation

@cursor

@cursor cursor Bot commented Oct 4, 2026

Copy link
Copy Markdown
Contributor

Bug and impact

The CVE verifier builtins for CVE-2024-38476 (Apache substitution encoding / source disclosure) and CVE-2024-38477 (mod_proxy NULL dereference DoS) sent GET /.htaccess and GET /.htpasswd and treated HTTP 403 plus the substring htaccess / htpasswd as probe confirmation.

A default Apache 2.4.6 / 2.4.29 403 page includes You don't have permission to access /.htaccess on this server. Shared-hosting Apache also emits Server unable to read htaccess file, denying access to be safe. Fusion maps a successful verifier signal to probe_confirmed and the gate pins it as un-droppable. An --ai / --full scan of those Apache 2.4.x banners therefore reported a confirmed CRITICAL that was never tested.

A 403 on .ht* is the secure default (<Files ".ht*"> Require all denied</Files>). It does not prove substitution encoding or a mod_proxy crash.

Trigger: --ai / --full against Apache/2.4.29 (Ubuntu 18.04) or Apache/2.4.6 (CentOS 7 / RHEL 7), both in the CVE-2024-38476 affected range. NVD correlates the CVE. Verifier GET /.htaccess → 403 body containing htaccess → fusion-confirmed CRITICAL. Same path for CVE-2024-38477 via /.htpasswd.

Distinct from #41 (CVE-2019-0211 / server-status + apache footer) and #42 (CVE-2021-39275 / encoded win.ini + fonts).

Root cause

The builtins used expected_status: [200, 403] and expected_body_patterns: ["htaccess"] / ["htpasswd"]. 403 is access denied, not evidence of either bug. The requested filename is echoed on stock early-2.4 error pages and on common shared-host 403 text.

Fix

  • Drop the CVE-2024-38476 and CVE-2024-38477 builtins.
  • Skip both CVEs in generate_plans_for_cves and reverify_with_context so an AI completer cannot reinvent the same probe.

Validation

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

python3 -m bandit -r src/verifier/planner.py --severity-level high — no high issues.

New cases: default Apache 403 on /.htaccess / /.htpasswd no longer yields a plan (builtin or AI); a leftover plan against that 403 still matches, which is why generation is skipped.

Open in Web View Automation 

A default or shared-hosting 403 that echoes .htaccess/.htpasswd is not
evidence of substitution encoding or a mod_proxy crash. Drop the builtins
and skip AI re-planning so fusion cannot pin a false CRITICAL.

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