Feb 15, 2026·7 min read·1345 visits
Critical RCE (CVSS 10.0) in Oracle WebLogic Proxy Plug-in. Attackers use path traversal (`..;`) to access internal servlets and inject base64-encoded commands into the `WL-Proxy-Client-IP` header. Patches are available in the January 2026 CPU.
A catastrophic Remote Code Execution (RCE) vulnerability in Oracle Fusion Middleware's Proxy Plug-in allows unauthenticated attackers to bypass access controls and execute arbitrary commands via HTTP header injection. By combining a classic path traversal bypass with unsafe header parsing, threat actors can seize control of the gateway to the enterprise network.
Oracle WebLogic is the enterprise software equivalent of a zombie in a horror movie: just when you think you've secured it, it crashes through the window with a new critical RCE. This time, the call is coming from inside the house—specifically, the Oracle WebLogic Server Proxy Plug-in. This component is the traffic cop of the Oracle ecosystem, sitting on the edge (often inside Apache or IIS) and routing requests to backend WebLogic servers. It is the literal gatekeeper.
What makes CVE-2026-21962 so particularly nasty is that it targets the mechanism designed to protect the backend. Usually, this proxy filters out dangerous internal paths. However, thanks to some questionable parsing logic, it not only lets attackers slip past the velvet rope but also hands them a microphone to command the server. It’s a CVSS 10.0 for a reason: unauthenticated remote code execution on the edge of the network is the holy grail for attackers.
Why is this component juicy? Because it handles WL-Proxy-Client-IP and X-Forwarded-For headers. In a sane world, these headers just contain IP addresses. In Oracle's world, apparently, they are treated as trusted inputs that can trigger internal command processing. If you are running Oracle HTTP Server or the WebLogic Proxy Plug-in, you are currently holding a live grenade.
This vulnerability is a masterclass in "chaining bad decisions." It relies on two distinct failures working in perfect harmony: a Path Traversal Bypass and Unsafe Header Parsing.
1. The Bouncer is Blind (Path Traversal)
The first flaw is in how the Proxy Plug-in normalizes URLs. The plugin is configured to block access to internal endpoints like /bea_wls_internal/. However, the parser has a blind spot for the semicolon character in directory traversal sequences. By requesting /weblogic//weblogic/..;/bea_wls_internal/ProxyServlet, the attacker confuses the path normalization routine. The server sees the ..; and thinks, "Oh, this is just a file name or a parameter," while the filesystem or the servlet mapping logic interprets it as "go up one directory." This creates a discrepancy between what the security filter sees (a safe path) and what is actually executed (the forbidden internal servlet).
2. The IP Address that executes 'whoami' (Header Injection)
Once the attacker reaches the internal ProxyServlet, the second flaw kicks in. This servlet is designed to handle proxy headers to identify client IPs. It looks at headers like WL-Proxy-Client-IP, Proxy-Client-IP, and X-Forwarded-For. The fatal flaw is that the code attempts to parse these headers using a semicolon delimiter. Instead of strictly validating that the header contains only an IP address, it splits the string and seemingly processes the second part of the split. If that second part is a base64-encoded string, the server decodes it and—in a move that defies all logic—executes it or treats it as a serialized object that leads to execution. It is effectively eval() on an HTTP header.
While the proprietary source code isn't public, we can reconstruct the logic based on the behavior and the patch analysis. The vulnerability exists in the intersection of the Apache/IIS module and the backend Servlet.
The proxy plugin likely uses a normalization function that stops stripping traversal characters when it encounters a semicolon, assuming it marks the start of path parameters (Matrix parameters).
Vulnerable Logic Concept:
// Simplified logic representation
char* path = request->uri;
if (strstr(path, "/bea_wls_internal/")) {
return ACCESS_DENIED; // Explicit block
}
// But if we send: /weblogic/..;/bea_wls_internal/
// The normalization might return: /weblogic/..;/bea_wls_internal/
// The checks fail to resolve '..;' to parent directory before string comparison.
// The request is forwarded.Inside the ProxyServlet (Java), the handling of the client IP header is where the RCE lives. It seemingly expects a format like IP;Metadata.
Vulnerable Java Logic Concept:
String proxyHeader = request.getHeader("WL-Proxy-Client-IP");
if (proxyHeader != null && proxyHeader.contains(";")) {
String[] parts = proxyHeader.split(";");
String ip = parts[0];
String metadata = parts[1]; // The malicious payload
// The fatal mistake: Deserializing or Executing the metadata
byte[] decoded = Base64.getDecoder().decode(metadata);
executeInternalCommand(decoded);
}This pattern—trusting the secondary data in an IP forwarding header—is an architectural sin. The patch likely involves removing the semicolon splitting logic entirely or strictly validating that the header value matches an IP address regex (e.g., ^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$).
Exploiting this requires no authentication, no special tools, and no complex race conditions. It is a single HTTP request. We simply need to construct a URL that triggers the path traversal and include the poisoned headers.
We want to execute id.
cmd:id (or similar internal command syntax expected by the servlet).Y21kOmlk.127.0.0.1;Y21kOmlk.We send this payload in the WL-Proxy-Client-IP header. We also target the specific traversal path known to bypass the plugin's filters.
GET /weblogic//weblogic/..;/bea_wls_internal/ProxyServlet HTTP/1.1
Host: vulnerable-target.com
User-Agent: Mozilla/5.0 (compatible; Exploit/1.0)
WL-Proxy-Client-IP: 127.0.0.1;Y21kOmlk
Proxy-Client-IP: 127.0.0.1;Y21kOmlk
X-Forwarded-For: 127.0.0.1;Y21kOmlk
Connection: closeWhen the server processes this request:
/weblogic//weblogic/..;/ tricks the frontend proxy into thinking it's a valid public path.ProxyServlet.WL-Proxy-Client-IP.;.Y21kOmlk.The response will typically contain the output of the command, or the side effects will be visible (e.g., a reverse shell connection back to the attacker).
A CVSS 10.0 is not handed out lightly. The impact here is absolute. Because this vulnerability affects the Oracle HTTP Server and Proxy Plug-ins, the compromised component often resides in the DMZ. It is the bridge between the wild internet and the sensitive internal application servers.
Immediate Consequences:
oracle or weblogic, sometimes root if misconfigured).This is not just about defacing a website; it is about gaining a persistent foothold at the network perimeter. In ransomware scenarios, this is the perfect entry point—low effort, high privilege, and usually exempt from strict internal firewall rules because it is the proxy.
If you are running Oracle Fusion Middleware, stop reading and start patching. Oracle released the fix in the January 2026 Critical Patch Update (CPU).
Primary Mitigation: Apply the Patch Ensure you update the following components to the patched versions:
Secondary Defense: WAF Rules If you cannot patch immediately (why?), you must implement aggressive WAF rules.
..;.WL-Proxy-Client-IP, Proxy-Client-IP, or X-Forwarded-For contains a semicolon (;). There is rarely a legitimate reason for a semicolon in an IP address header.Verification After patching, verify the fix by running the provided exploit simulator (safely) against your environment. The server should return a 403 Forbidden or 404 Not Found for the traversal path, and it definitely shouldn't execute commands from the headers.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:N| Product | Affected Versions | Fixed Version |
|---|---|---|
Oracle HTTP Server Oracle | 12.2.1.4.0 | Jan 2026 CPU |
Oracle HTTP Server Oracle | 14.1.1.0.0 | Jan 2026 CPU |
Oracle HTTP Server Oracle | 14.1.2.0.0 | Jan 2026 CPU |
| Attribute | Detail |
|---|---|
| CWE ID | CWE-284 / CWE-287 |
| Attack Vector | Network (HTTP) |
| CVSS Score | 10.0 (Critical) |
| EPSS Score | 0.00062 (Rising) |
| Impact | Remote Code Execution (RCE) |
| Exploit Status | Active Exploitation / PoC Available |
| KEV Status | Not Listed (Monitoring) |
Improper Access Control and Improper Authentication leading to RCE.
A high-severity type-confusion vulnerability exists in NearForm fast-jwt prior to version 6.3.0. The vulnerability allows attackers to bypass crucial claim validation steps (such as expiration, issuer, audience, and subject validations) by presenting a validly signed JSON Web Token structured as a JSON array instead of a JSON object. This occurs because the library's decoder fails to reject JSON arrays during type evaluation.
NearForm fast-jwt prior to version 6.3.0 is vulnerable to an input validation flaw where configuring verifier properties (such as clockTolerance, clockTimestamp, and cacheTTL) with non-finite values like Infinity or NaN allows attackers to bypass temporal claim validations, including expiration (exp) and activation (nbf) boundaries. This validation bypass can result in unauthorized session persistence and cache poisoning.
A critical cryptographic vulnerability in fast-jwt versions 6.2.x prior to 6.3.0 allows unauthenticated remote attackers to execute an asymmetric-to-symmetric algorithm confusion attack due to incomplete validation of leading non-whitespace prefixes.
CVE-2026-107720 is a critical signature verification bypass vulnerability in NearForm's fast-jwt Node.js library. Under specific configurations where the token verifier is initialized with a falsy cryptographic key (such as an empty string or null) and a non-empty algorithms allowlist, the library erroneously skips signature validation. This allows unauthenticated remote attackers to submit fabricated, unsigned JSON Web Tokens and bypass the authorization boundary of the application entirely.
Ruby Mechanize prior to version 2.14.1 contains an information disclosure vulnerability. When executing cross-origin HTTP redirects, global headers configured on the Mechanize agent (such as Authorization or Session Cookies) are dynamically re-applied to the subsequent request, bypassing the internal header-stripping logic. An attacker who controls a redirection endpoint can capture sensitive bearer tokens or cookies.
An origin trust boundary failure in the Ruby mechanize library (prior to v2.14.1) allows unauthenticated remote web servers to harvest sensitive global request headers, such as Authorization Bearer tokens and cookies, by utilizing HTML-level meta-refresh redirection tags. Standard HTTP-level redirect boundaries were not applied to document-level redirects, creating a vector for cross-origin credential leakage during automated crawls.