Skip to main content

MLJAR Mercury CVE-2026-111058

| EUVDEUVD-2026-104420 CRITICAL
Missing Authorization (CWE-862)
2026-10-19 GitHub_M GHSA-rv4m-xm3f-3ccq
9.8
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Reach default tokenless Mercury endpoint
  2. Delivery
    POST /api/kernels to create python3 kernel
  3. Exploit
    Open /api/kernels/<id>/channels websocket
  4. Execution
    Send execute_request with arbitrary Python
  5. Persist
    Code execution as server process user
  6. Impact
    Compromise host/container and reachable secrets

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Authorization checks on every request
MITRE ATT&CK

1 technique across 1 tactic: Privilege Escalation

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation requires the target to run in Mercury's default tokenless deployment mode: mercury_app/__main__.py sets --IdentityProvider.token='' (and --ServerApp.disable_check_xsrf=True) when no --token or MERCURY_TOKEN is supplied, giving anonymous JupyterLab access. The specific exposed feature is the /api/kernels endpoint, which is deliberately absent from the BLOCKED_PATTERNS blocklist (/lab, /api/terminals, /api/shutdown, /files) because Mercury needs kernels to run notebooks, combined with patch_kernel_websocket_handler() wrapping on_message only for idle-timeout tracking and performing no filtering of execute_request. The decisive LIMITING factor is configuration: deployments launched with a token or password (MERCURY_TOKEN / --token) require per-request authentication and are not exploitable via this path; only default anonymous, network-reachable instances are affected. No user interaction and no authentication are needed against a default instance.

Impact

This is a genuine high-priority issue, not a CVSS-inflation case. The CVSS:3.1 vector (AV:N/AC:L/PR:N/UI:N) describes network-reachable, low-complexity, unauthenticated exploitation with full C/I/A impact, and the multi-source evidence corroborates rather than contradicts it: the GHSA advisory documents a runtime-proven, deterministic PoC that achieved code execution (ran 'whoami' and wrote /tmp/PWNED_MERCURY_RCE) on the default tokenless configuration of mercury 3.2.4, and CWE-862 (Missing Authorization) aligns with the described blocklist gap at /api/kernels. The signals are therefore mutually reinforcing for a working, unauthenticated RCE. Tempering factors: no EPSS score is provided in the input, and there is no CISA KEV listing, so there is no evidence of active in-the-wild exploitation at this time - the risk is driven by a public, reliable exploit against default configs rather than by observed mass exploitation. The one real limiter is deployment mode: exploitation depends on the default tokenless/anonymous JupyterLab configuration; operators who set MERCURY_TOKEN or a password are not exposed via this path. Prevalence of the product itself is modest, which bounds the aggregate internet-wide risk even though per-instance impact is maximal.

Exploit ScenarioDerived

An unauthenticated attacker who can reach a default (tokenless) Mercury deployment sends POST /api/kernels to spawn a python3 kernel, opens the kernel websocket, and sends an execute_request carrying arbitrary Python, obtaining code execution as the server process user. A deterministic, runtime-verified proof-of-concept (client script plus notebook) already exists and was demonstrated to run commands and write files on a patched-for-the-previous-bug 3.2.4 host.

Act Now Prioritize within 24-48h. Why: CRITICAL severity.
Patch available 0.4% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 19, 2026

Unauthenticated remote code execution in MLJAR Mercury deployments running the default tokenless configuration allows any network-reachable client to create a Jupyter kernel and send execute_request messages containing arbitrary Python, resulting in code execution as the Mercury server process user. Mercury versions through 3.2.5 are affected and 3.2.6 is the fixed release; deployments that require a token or password via MERCURY_TOKEN or --token are not exploitable through this path. The issue is assessed at CVSS 9.8, publicly available exploit code exists, but no active exploitation is confirmed (not in CISA KEV).

RemediationAI

Vendor-released patch: upgrade to MLJAR Mercury 3.2.6 or later (release tag 3.2.6; commit 73a40ceb0becf057f495a5738ad7f5a5222a53e1). The primary fix is to upgrade, because 3.2.6 adds kernel message authorization and blocks /api/contents; see the advisory at https://github.com/mljar/mercury/security/advisories/GHSA-rv4m-xm3f-3ccq. If an immediate upgrade is not possible, do not run Mercury in tokenless mode on a network-reachable interface: set MERCURY_TOKEN or --token so per-request authentication is required, and avoid disable_check_xsrf=True; this changes the deployment model and may break anonymous dashboard access, but it prevents the unauthenticated kernel path. Additionally, restrict access to the Mercury service with a firewall, reverse proxy, or authenticated gateway until the upgrade is complete. Blocking /api/kernels at a proxy is not a safe long-term workaround because Mercury needs kernels to execute notebooks, and attempting to block or disable kernels will break notebook execution.

Affected VersionsENISA

mercury < 3.2.6

Affected Packages

pypi mercury fix: 3.2.6

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in pypi

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

Mercury is a Python framework that exposes Jupyter notebooks as web apps and runs a JupyterLab/Tornado server behind its own handlers. In the default deployment mode, mercury_app/__main__.py sets --IdentityProvider.token='' and --ServerApp.disable_check_xsrf=True when no token is supplied, so anonymous clients can reach Jupyter endpoints. The design relied on a path blocklist (BLOCKED_PATTERNS containing /lab, /api/terminals, /api/shutdown, /files) to protect sensitive endpoints, but /api/kernels is intentionally absent because Mercury needs kernels to run notebooks. patch_kernel_websocket_handler() in mercury_app/idle_timeout.py only wraps on_message to touch the idle timeout manager and does not inspect or authorize message types, so an anonymous client can POST /api/kernels to create a kernel, open /api/kernels/<id>/channels, and send an execute_request with arbitrary code. This is CWE-862 Missing Authorization: the server neither requires authentication nor authorizes kernel message types for anonymous websocket clients. It is distinct from GHSA-f8c7-rwf9-fmgm, which fixed a /api/terminals blocklist bypass; that fix does not cover kernels. Version 3.2.6 adds execution/connection.py and execution/policy.py that rewrite execute_request code from the notebook manifest, reject debug_request, shutdown_request, complete_request, and input_reply, restrict comm messages to known comm IDs, enforce MAX_MESSAGE_BYTES for widget buffers, and add /api/contents to the blocklist.

Know when Mercury gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (GitHub_M) PRIMARY 9.8 CRITICAL
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
vuln.today AI 9.8 CRITICAL

Default tokenless config grants anonymous network clients unfiltered kernel execution (AV:N/AC:L/PR:N/UI:N), yielding full arbitrary code execution and complete C/I/A loss.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
High

Lifecycle Timeline

2
Patch available
Oct 19, 2026 - 17:17 EUVD
CVE Published
Oct 19, 2026 - 16:06 cve.org
CRITICAL 9.8

DescriptionCVE.org

Mercury is a Python framework for sharing Jupyter notebooks as web applications and dashboards. Prior to 3.2.6, default tokenless deployments allow anonymous clients to create Jupyter kernels and send execute_request messages containing arbitrary Python. The endpoint blocklist does not cover /api/kernels, and the websocket wrapper previously tracked idle activity without authorizing executable messages. This issue is fixed in version 3.2.6.

Technical POC Analysis

Bug class: CWE-862 Missing Authorization.

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

MLJAR Mercury deployments through 3.2.5 that use the default tokenless configuration are exposed to remote code execution, letting any network-reachable client run arbitrary Python as the Mercury server process. Publicly available exploit code exists, so exposed instances should be treated as high-priority until upgraded to 3.2.6 or otherwise isolated. Leadership should care because compromise could affect the server and any data or credentials accessible to that process.

Business Impact: High
Compensating Controls

Apply vendor patch: upgrade to MLJAR Mercury 3.2.6 or later. If upgrade is delayed, enforce MERCURY_TOKEN/--token authentication and restrict network access to trusted clients.

Threat Intelligence Overview

EPSS Score
0.4%
Top 63% exploitable
Prevalence
Low
niche Python framework for sharing Jupyter notebooks, limited enterprise footprint
Threat Intel
1
1 sources
Data Quality
6 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA GitHub VulDB

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity CRITICAL
CISA KEV No
Public POC No
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
CRITICAL severity
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
Yes
Human Impact
High
Technical Impact
Total

Priority Score

49
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +49
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy