Back to Blog
high SEVERITY3 min read

Spring Boot Actuator Wildcard Exposure in 2021.04 Provisioning

A misconfigured Spring Boot Actuator in the ArkCase 2021.04 provisioning template exposed all management endpoints through wildcard inclusion. The fix narrows exposure to health and info endpoints only, eliminating unauthenticated access to sensitive runtime data.

O
By Orbis AppSec
•Technically reviewed by Anupam Mediratta•Published September 23, 2026•Reviewed September 23, 2026

Answer Summary

The affected code is the `application-2021.04.yaml` provisioning template used for ArkCase deployments. An attacker could retrieve heap dumps, environment variables, and log files without authentication through fully exposed Actuator endpoints. The fix changes `management.endpoints.web.exposure.include` from wildcard `'*'` to explicit `health,info`. This is a first-party configuration fix with no CVE assigned. CWE-200: Exposure of Sensitive Information to an Unauthorized Actor.

Vulnerability at a Glance

cweCWE-200
fixRestrict to explicit `health,info` endpoints
riskUnauthenticated access to heap dumps, environment secrets, and application logs
languageYAML (Spring Boot configuration)
root causeWildcard `'*'` value in `management.endpoints.web.exposure.include`
vulnerabilitySpring Boot Actuator overexposure

Affected Versions

Affected application-2021.04.yaml provisioning template (2021.04 release series)
Fixed in Commit hardening the exposure configuration
Ecosystem Spring Boot (YAML configuration)
CVE / GHSA not assigned
CWE CWE-200: Exposure of Sensitive Information to an Unauthorized Actor

The Vulnerability Explained

Spring Boot Actuator provides production-ready operational endpoints for monitoring and managing applications. The management.endpoints.web.exposure.include property controls which of these endpoints are accessible via HTTP. When set to the wildcard value '*', every Actuator endpoint becomes reachable—including those designed for diagnostic access that leak sensitive runtime state.

The vulnerable configuration:

management:
  endpoints:
    web:
      exposure:
        include: '*'

This single line exposed the application's internals without authentication. An attacker—or anyone with network access—could retrieve:

  • /actuator/env: Environment variables, including database credentials, API keys, and secrets injected through SPRING_APPLICATION_JSON or shell environment
  • /actuator/logfile: The complete application log stream, potentially containing PII, session identifiers, or authentication tokens
  • /actuator/heapdump: A binary dump of the entire JVM heap, extractable offline to recover in-memory secrets, session objects, and cryptographic material
  • /actuator/threaddump: Live thread state revealing internal request handling, synchronization patterns, and potentially sensitive data on stack frames

The provisioning template's purpose—automated Vagrant environment setup—meant this configuration propagated to development and potentially staging deployments. While production might layer additional network controls, the configuration itself assumed no authentication boundary existed.

The Fix

The remediation replaces the wildcard with an explicit allowlist:

management:
  endpoints:
    web:
      exposure:
        include: 'health,info'

This change implements two critical boundaries:

  1. Principle of least exposure: Only health and info endpoints remain reachable. The health endpoint provides binary up/down status and basic health indicators; info exposes static build metadata—neither reveals runtime secrets or mutable state.

  2. Fail-closed configuration: Future Actuator endpoints added by Spring Boot upgrades won't automatically expose themselves. The explicit list requires conscious review to expand.

The health endpoint remains valuable for load balancer health checks and container orchestration probes without authentication. The info endpoint supports deployment verification through static properties like build.version and build.time. All diagnostic and sensitive operations now require explicit reconfiguration or alternative access mechanisms (JMX, authenticated HTTP, or direct JVM attachment).

Key Takeaways

  • Wildcard exposure in Actuator is never safe for network-facing services: The '*' value was designed for local development with JMX or no security context. Any YAML configuration setting this value on management.endpoints.web.exposure.include requires immediate audit.

  • Provisioning templates are production code: Infrastructure-as-code configurations propagate to real environments. The application-2021.04.yaml template served automated deployment, making its security properties binding on all generated instances.

  • Actuator endpoints have asymmetric sensitivity: health and info are intentionally safe for unauthenticated access; env, heapdump, and logfile assume privileged access. Mixing these in wildcard exposure ignores this design boundary.

  • Defense-in-depth applies to configuration: Even where network segmentation might limit exploitability, explicit endpoint restrictions prevent configuration drift from becoming vulnerability exposure.

How Orbis AppSec Detected This

Orbis AppSec identified this vulnerability through static analysis of YAML configuration files:

Element Detail
Source The management.endpoints.web.exposure.include property value
Sink HTTP exposure of Actuator endpoints to unauthenticated requests
Missing control Explicit endpoint filtering or Spring Security integration
CWE CWE-200: Exposure of Sensitive Information to an Unauthorized Actor
Fix Replace wildcard '*' with explicit 'health,info' endpoint list

The detection pattern matches Spring Boot configuration properties where management.endpoints.web.exposure.include contains '*' without accompanying management.server.port isolation or spring.security authentication requirements.

Orbis AppSec automatically detected this vulnerability and opened a pull request with the fix. Try Orbis AppSec on your repositories to find and fix issues like this automatically.

Conclusion

The include: '*' pattern in Spring Boot Actuator configuration represents a silent security regression—functional for operations, catastrophic for confidentiality. This fix in the ArkCase 2021.04 provisioning template demonstrates that configuration hygiene matters as much as code security. Explicit endpoint exposure, not wildcard convenience, should govern production-ready Spring Boot deployments.

Prevention and further reading

Frequently Asked Questions

Why was the `include: '*'` pattern considered defense-in-depth rather than an exploitable vulnerability in this specific template?

The provisioning template is used during Vagrant-based development deployments, so the actual exploitability depended on network exposure of those environments. The fix makes the security boundary explicit regardless of deployment context, ensuring production-like configurations don't inherit the wildcard pattern.

Does the fixed `include: 'health,info'` configuration prevent custom Actuator endpoints from functioning?

Custom endpoints remain available if explicitly registered, but the `web.exposure.include` property only controls which built-in endpoints are exposed over HTTP. Custom endpoints require separate `@Endpoint` or `@WebEndpointExtension` annotations and their own exposure configuration.

Which specific Actuator endpoints were reachable before the fix that are now blocked?

The wildcard exposed `/actuator/env` (environment variables including secrets), `/actuator/logfile` (application logs), `/actuator/heapdump` (JVM heap dump), `/actuator/metrics` (runtime metrics), and `/actuator/threaddump` among others—only `/actuator/health` and `/actuator/info` remain exposed after the fix.

View the Security Fix

Check out the pull request that fixed this vulnerability

View PR #710

Related Articles

critical

Lampa Desktop Auto-Update Heuristic Bypass: Execution of Unverified

Lampa Desktop's auto-update mechanism downloaded JavaScript and CSS from `raw.githubusercontent.com` using only heuristic validation—file size thresholds and string pattern matching—that attackers could trivially satisfy. The fix introduces cryptographic integrity verification by cross-referencing Git blob hashes from the GitHub Contents API, ensuring downloaded code matches the repository's authoritative state before execution.

high

adm-zip 0.6.0 Preserves SUID Bits From ZIPs: CVE-2026-102282

The `adm-zip` dependency resolved to 0.6.0 in this project's dependency tree, a version affected by CVE-2026-102282: during extraction it applies the Unix permission bits stored in each ZIP entry's external file attributes verbatim, including the setuid (`04000`), setgid (`02000`), and sticky bits. An attacker who controls an archive passed to `extractAllTo()` or `extractEntryTo()` can therefore have the extractor create a setuid binary owned by whatever user the extraction process runs as. The

high

requestInput() Type Confusion: NaN and Object Bypass in JavaScript

The `requestInput()` utility function lacked validation on its `type` parameter and failed to handle `NaN` results from float conversions, creating a type confusion weakness. An attacker could supply malformed inputs that propagate unhandled `NaN` values or unexpected object types through the type system. The fix adds explicit guards against `NaN` type parameters and rejects non-primitive type values.

critical

No Rate Limit on /api/uploads/presign Enables DoS

The `/api/uploads/presign` endpoint accepted unlimited concurrent requests to generate storage presigned URLs, giving an attacker a free lever to exhaust storage-provider quotas and server resources. The fix adds an `express-rate-limit` middleware capping each client to 30 requests per minute on that route.

high

CVE-2026-54673: builder-util-runtime Leaks Auth Headers on Redirect

electron-updater and electron-builder rely on builder-util-runtime to fetch update manifests and artifacts over HTTP. A flaw in that shared HTTP executor allowed credential headers attached to the original update-feed request to be re-sent after a redirect, exposing them to any host the redirect pointed to. The project fixes this by upgrading builder-util-runtime to 9.7.0 and collapsing a duplicate, older copy of the package that electron-updater had pinned on its own.

high

image-size 1.2.1 DoS: Zero-Valued Dimensions in Image Buffer Parser

A high-severity denial-of-service vulnerability in image-size 1.2.1 allows attackers to crash Node.js services using malicious image buffers with zero-valued dimensions. The fix removes the vulnerable `queue` dependency and tightens dimension validation in version 2.0.3.