Skip to content

Don't confirm Spring actuator CRITICAL from a generic HTTP 200 - #33

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

Don't confirm Spring actuator CRITICAL from a generic HTTP 200#33
cursor[bot] wants to merge 1 commit into
mainfrom
cursor/critical-bug-management-ec6f

Conversation

@cursor

@cursor cursor Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

Bug and impact

probe_spring_actuator() treated any HTTP 200 whose body was longer than 5 bytes as confirmed CWE-215 CRITICAL (credentials in /actuator/env, JVM heap dump at /actuator/heapdump). Fusion then pins probe-confirmed findings as un-droppable.

--probe / --full runs this on ports 8080, 8443, 8000, 8001, 8008, 8888 (and http-alt). A SPA catch-all, a login page after urllib follows a 3xx, or a generic JSON error that includes the request path is enough to report confirmed credential exposure.

The sibling probe check_http_admin_panels() was already hardened (content markers + SPA catch-all tests). This duplicate path was not, so the false CRITICAL still reached vuln_probe_result and the fusion gate.

Trigger: --probe/--full against a host with port 8080 open where GET /actuator/env returns HTTP 200 with a generic HTML or JSON body that is not byte-identical to a random-path 404 (path-in-body error JSON, CSRF/nonce in an SPA shell, redirect-to-login).

Root cause

Confirmation was status == 200 and len(body.strip()) > 5 with no actuator semantics. phpinfo in the same file already requires PHP Version + <table; admin-panel probes already require propertySources / JAVA PROFILE.

Fix

Require the same distinctive body markers as check_http_admin_panels before confirming each actuator path (propertySources/systemEnvironment, JAVA PROFILE/HPROF, dispatcherServlets/dispatcherHandlers, configuredLevel/effectiveLevel, etc.).

Validation

  • python3 -m pytest test_probers.py -q — 46 passed
  • New tests: generic HTML/JSON 200 must not confirm; heapdump still needs HPROF magic; real actuator JSON still confirms
Open in Web View Automation 

probe_spring_actuator treated any 200 with a body longer than 5 bytes as
confirmed CWE-215 CRITICAL. Fusion pins probe-confirmed findings, so SPA
catch-alls, login pages, and generic JSON errors on :8080 became
un-droppable credential-exposure reports. Require the same actuator body
markers already used by check_http_admin_panels.

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