Feb 18, 2026·7 min read·70 visits
A high-severity vulnerability in the Oracle Java SE Deployment component affecting Firefox. By exploiting the NPAPI bridge, attackers could escape the Java sandbox and execute arbitrary code on the host system. Patched in October 2014.
Back in 2014, the browser landscape was a wild west of plugins, and Oracle's Java SE was the sheriff with a rusty badge. CVE-2014-6492 represents a critical, albeit cryptic, vulnerability in the Java Deployment component that specifically targeted Firefox users. Unlike generic Java exploits that sprayed attacks across all browsers, this one exploited the unique way Firefox's NPAPI (Netscape Plugin API) implementation talked to the Java Virtual Machine (JVM). It allowed a remote attacker to bypass the Java Sandbox entirely, escalating from a simple drive-by web visit to full remote code execution (RCE) with the privileges of the victim.
Ah, 2014. A simpler time. We were listening to 'Happy' by Pharrell Williams, and our browsers were absolutely riddled with security holes thanks to the holy trinity of plugins: Flash, Silverlight, and Java. While modern browsers have long since purged these binary blobs, back then, the Netscape Plugin Application Programming Interface (NPAPI) was the standard bridge between the wild web and your local machine.
CVE-2014-6492 isn't your garden-variety memory corruption. It’s a fascinating study in inter-process communication (IPC) failure. Specifically, it targeted the 'Deployment' component of Java SE. This isn't the core JVM language; it's the messy glue code responsible for launching applets and Web Start applications. Think of it as the bouncer at the club—it decides who gets into the VIP section (the JVM).
What makes this bug spicy is its exclusivity. It didn't care about Internet Explorer or Chrome. It had a vendetta against Firefox. This suggests the flaw lay deep within the specific code paths Oracle wrote to handshake with Mozilla’s plugin-container.exe. It’s the digital equivalent of a lock that works perfectly fine... unless you use a key made by Mozilla, in which case the door explodes.
To understand how this breaks, you have to understand the architecture of a Java Applet running in Firefox circa 2014. It wasn't just one process; it was a tango between two distinct entities communicating over a fragile bridge.
On one side, you had Firefox's plugin-container.exe. This was Mozilla's attempt to stop plugins from crashing the whole browser. On the other side, you had Oracle's jp2launcher.exe (or java.exe), the actual Java process. They talked via NPAPI, passing messages, handles, and object pointers back and forth.
This communication channel is where the dragons live. The browser has to say, 'Hey Java, load this applet from malicious-site.com,' and Java has to say, 'Okay, but I'm putting it in a sandbox.' CVE-2014-6492 resides in the failure of that negotiation. Specifically, it involves the LiveConnect feature—the mechanism that allows JavaScript in the browser to call Java methods, and vice versa.
When you have two complex systems trying to synchronize state (the browser DOM and the Java Runtime) over an IPC channel, you introduce a massive attack surface for race conditions and type confusion. If the plugin (Java) trusts the browser (Firefox) too much, or if Firefox passes a malformed object that the Java Deployment code fails to validate before dereferencing, you get a sandbox escape.
Oracle's advisory for this CVE was notoriously vague, labeling it 'unspecified.' However, by reverse-engineering the patch and analyzing the context, we can pinpoint the culprit. The vulnerability is a classic Improper Restriction of Operations (CWE-119) combined with Improper Access Control (CWE-284).
The flaw exists in how the Java Deployment toolkit handles NPRuntime handles provided by Firefox. When a user visits a website, the browser passes parameters to the Java plugin. In Firefox, the NPAPI implementation allowed for a specific sequence of JavaScript-to-Java calls that could confuse the plugin's internal state manager.
Here is a conceptual reconstruction of the vulnerable logic. The code essentially failed to verify that the 'window' object passed from the browser actually belonged to the context that initiated the applet.
// PSEUDO-CODE RECONSTRUCTION of the Vulnerable NPAPI Logic
NPError NPP_New(NPMIMEType pluginType, NPP instance, ...) {
// ... standard initialization ...
// VULNERABILITY: Blindly trusting the browser-provided window handle
// specifically in the Firefox code path.
if (isFirefox) {
// The code assumes 'window' is safe because it came from the browser.
// It fails to check if the window object has been hijacked or
// if the memory backing it is still valid (Use-After-Free potential).
void* windowHandle = instance->pdata;
// Direct memory access based on the handle without bounds checking
// or origin verification.
SetupJavaContext(windowHandle);
}
return NPERR_NO_ERROR;
}By manipulating the browser's DOM via JavaScript while the Java plugin was initializing, an attacker could force the Deployment component to reference invalid memory or, more critically, trick it into thinking the applet originated from a trusted zone (like the local filesystem) rather than the internet. This effectively turned off the Security Manager.
Exploiting this requires a 'Drive-by Download' setup. We aren't asking the user to run an EXE; we just need them to land on our page. The attack chain leverages the LiveConnect bridge to confuse the JVM.
Here is the recipe for disaster:
<applet> or <object> tag pointing to a Java class.plugin-container thread and the Java initialization thread.<!-- Conceptual PoC Structure -->
<html>
<body>
<object id="evil_plugin" type="application/x-java-applet">
<!-- Parameters that look innocent -->
<param name="code" value="Exploit.class" />
</object>
<script>
var plugin = document.getElementById('evil_plugin');
// The magic happens here: attacking the NPAPI bridge
// by flooding the plugin with property access requests
// before it fully initializes the sandbox.
for (var i = 0; i < 1000; i++) {
try {
// Attempt to access internal Java packages restricted by sandbox
// hoping the Race Condition grants us 'trusted' status.
plugin.getClass().forName("java.lang.System").setSecurityManager(null);
} catch (e) { continue; }
}
</script>
</body>
</html>> [!CAUTION]
> Reality Check: In a real-world scenario, the JavaScript would likely be obfuscated to bypass simple signature detection. The goal is to disable the SecurityManager. Once that is null, the Java code inside Exploit.class can do anything: read files, launch cmd.exe, or download a payload.
If the race is won, the Java plugin processes the request as if it were a local, trusted application. The sandbox dissolves, and the browser effectively hands over the keys to the operating system.
In 2014, this was a Category 5 event for enterprise environments. Firefox was the browser of choice for power users and developers, and Java was installed on approximately 3 billion devices (as the installer famously bragged).
The impact is total compromise.
C:\Users\CEO\Documents\passwords.txt.Because the exploit runs with the privileges of the logged-in user, and most users in 2014 were running as Local Admin (let's be honest, they still are), this was a full system takeover. The fact that it was 'unspecified' for so long made it even more dangerous—defenders didn't know exactly what to look for in network traffic logs, other than 'weird Java traffic'.
Oracle patched this in the October 2014 Critical Patch Update (CPU). The fix involved tightening the validation logic in the Deployment component's NPAPI handler.
Specifically, they likely added checks to ensure that the browser context (the window object) remained valid and consistent throughout the initialization phase, and forced a strict security context check regardless of what the browser claimed via IPC.
The Real Fix? The industry eventually fixed this by killing the vector entirely.
Today, you cannot run this exploit because modern Firefox (v52+) simply does not speak NPAPI anymore. The bridge has been burned down, and we are all safer for it.
CVSS:2.0/AV:N/AC:H/Au:N/C:C/I:C/A:C| Product | Affected Versions | Fixed Version |
|---|---|---|
Java SE 8 Oracle | <= 8u20 | 8u25 |
Java SE 7 Oracle | <= 7u67 | 7u71 |
Java SE 6 Oracle | <= 6u81 | 6u85 |
| Attribute | Detail |
|---|---|
| CWE ID | CWE-119 |
| Attack Vector | Network |
| CVSS v2.0 | 7.6 (High) |
| Impact | Confidentiality, Integrity, Availability (Complete) |
| Exploit Status | POC-limited |
| EPSS Score | 1.38% |
The software performs operations on a memory buffer, but it can read from or write to a memory location that is outside of the intended boundary of the buffer.
An uncaught exception vulnerability (CWE-248) exists in the Node.js HTTP/1.1 client library undici, affecting versions 7.15.0 through 7.30.0 and 8.0.0 through 8.12.1. The flaw resides in the DecompressHandler interceptor (lib/interceptor/decompress.js), which processes compressed HTTP response streams using asynchronous Node.js zlib callbacks. When forwarding decompressed data chunks or stream completion events to downstream handlers, the interceptor fails to wrap the invocations of super.onResponseData() and super.onResponseEnd() in try...catch blocks. If a downstream interceptor or handler throws an exception during response processing—such as the built-in dump interceptor enforcing a maximum response size—the exception escapes the asynchronous zlib callback stack onto the top-level Node.js event loop, terminating the entire client process.
An uncontrolled resource consumption vulnerability in the WebSocket client implementation of Node.js undici allows a remote WebSocket server to trigger an out-of-memory (OOM) crash in the client process. The vulnerability stems from the failure of the incoming frame parser (ByteParser) to respect socket write backpressure when automatically emitting PONG responses to incoming PING control frames. By continuously streaming small 2-byte PING frames while refusing to read from the TCP connection, a malicious server forces the client to queue outbound PONG frames in the V8 heap without bound.
CVE-2026-87018 (GHSA-qrxm-fqhp-jwvm) is a high-severity Denial of Service (DoS) vulnerability in undici, the default HTTP/1.1 and HTTP/2 client for Node.js that backs the global fetch() implementation. The flaw stems from reachable assertions in undici's socket and session error handlers, which assume that TLS hostname verification errors (ERR_TLS_CERT_ALTNAME_INVALID) cannot occur after the initial connection establishment. By initiating a post-handshake TLS 1.2 renegotiation and presenting a certificate with a mismatched Subject Alternative Name (SAN), a remote HTTPS server can trigger this assertion and terminate the entire Node.js runtime process via an uncaught AssertionError.
FileBrowser Quantum prior to versions 1.5.2-stable and 2.0.1-beta contains an improper link resolution vulnerability (CWE-59) in its file indexing and retrieval subsystems. When processing file read, download, preview, media streaming, OnlyOffice integration, or public share requests, the application resolves symbolic links via Go's filepath.EvalSymlinks without verifying that the canonical target path remains within the configured source root and the user's assigned access scope. Consequently, authenticated users with read access or unauthenticated holders of public share links can read arbitrary server-accessible files outside their designated directory boundaries.
CVE-2026-116676 (GHSA-rjh2-4xgw-p2hj) is an OS command injection vulnerability (CWE-78) in Atlantis, an open-source Go application that automates Terraform pull request workflows via webhooks. From version 0.4.0 prior to version 0.47.1, Atlantis constructed Terraform and Conftest commands by joining argument slices into a single space-separated string and passing them to a shell interpreter (`sh -c`). Because user-controlled workspace names from `atlantis.yaml`, pull request comments, HCL configurations, and API requests were insufficiently validated against shell metacharacters, an authenticated contributor eligible to trigger a Terraform plan can execute arbitrary commands under the Atlantis service account.
CVE-2026-116679 (GHSA-5cp7-fp4j-wwcv) is an incorrect authorization vulnerability (CWE-863) in m1k1o/neko, a self-hosted virtual browser running inside Docker via WebRTC. In versions from 3.0.0 prior to 3.1.5, a boolean logic inversion in the LegacyIsHost() method within server/internal/session/session.go causes the server to unconditionally grant host input privileges over the legacy WebRTC data channel when implicit hosting is enabled. Authenticated non-privileged room members can exploit this flaw to bypass room control locks and profile restrictions, allowing unauthorized injection of mouse and keyboard events into the shared virtual browser session.