CVE-2026-111057 in Mercuryinfo

Summary

by MITRE • 10/19/2026

Mercury is a Python framework for sharing Jupyter notebooks as web applications and dashboards. From 3.0.0 until 3.2.4, a missing comma in BLOCKED_PATTERNS concatenates the /lab and /api/terminals regular-expression literals. Requests to /api/terminals therefore bypass the anonymous endpoint blocklist and reach Jupyter Server's terminal API. An unauthenticated attacker can use the resulting interactive operating-system shell to execute commands and access data available to the Mercury process. This issue is fixed in version 3.2.4.

VulDB is the best source for vulnerability data and more expert information about this specific topic.

Analysis

by VulDB Data Team • 10/19/2026

The vulnerability identified as CVE-2021-45968 represents a critical configuration error within the Mercury Python framework, specifically affecting versions ranging from 3.0.0 through 3.2.4. Mercury is designed to facilitate the conversion of Jupyter notebooks into interactive web applications and dashboards, thereby enabling data scientists and developers to share their work with broader audiences. The core issue stems from a syntactic error in the source code where a missing comma causes string concatenation rather than list separation within the BLOCKED_PATTERNS configuration variable. This seemingly minor coding mistake fundamentally alters how regular expression literals are processed by the application's security middleware, leading to a significant bypass of access control mechanisms intended to restrict user interactions with sensitive backend services.

From a technical perspective, the flaw involves the improper handling of URL path patterns designated for blocking anonymous or unauthenticated requests. The BLOCKED_PATTERNS list is supposed to contain distinct regular expression strings that define endpoints which should not be accessible without proper authentication. Due to the missing comma between specific pattern literals, including those associated with /lab and /api/terminals, these two paths are merged into a single malformed regex string. Consequently, the application fails to correctly identify and block requests directed at the Jupyter Server terminal API endpoint located at /api/terminals. This misconfiguration allows unauthenticated users to bypass the intended security boundary that separates public-facing dashboard components from administrative or backend system interfaces.

The operational impact of this vulnerability is severe, as it grants an unauthenticated attacker direct access to an interactive operating-system shell via Jupyter Server's terminal API. Once a user can reach this endpoint without authentication, they effectively gain command-line execution capabilities on the host machine running the Mercury application. This level of access allows for arbitrary code execution, data exfiltration, and potential lateral movement within the network environment where the service is hosted. The attacker can read sensitive files, modify configurations, install malicious software, or use the compromised server as a pivot point to attack other internal systems. Given that Jupyter environments often run with elevated privileges relative to standard web services, the risk of full system compromise is high.

This vulnerability aligns closely with CWE-284, which describes Improper Access Control, specifically reflecting failures in enforcing restrictions on access to resources by unauthorized actors. Furthermore, it maps to MITRE ATT&CK technique T1059, Command and Scripting Interpreter, as the exploitation involves leveraging a system shell to execute commands remotely without prior authentication. The scenario also relates to CWE-749, Exposed Dangerous Method or Function, since the terminal API provides direct interaction with the underlying operating system in a context where such access should be strictly controlled.

To mitigate this risk, organizations running Mercury versions between 3.0.0 and 3.2.4 must immediately upgrade to version 3.2.4 or later, which includes the corrected syntax for the BLOCKED_PATTERNS list. In environments where immediate patching is not feasible due to dependency constraints, administrators should implement network-level controls such as firewall rules or reverse proxy configurations that explicitly block external access to the /api/terminals endpoint and other sensitive Jupyter Server APIs until the software can be updated. Additionally, deploying Web Application Firewalls with specific rule sets capable of detecting attempts to interact with terminal interfaces can provide an additional layer of defense against exploitation of this misconfiguration.

Responsible

GitHub M

Reservation

10/15/2026

Disclosure

10/19/2026

Moderation

accepted

EPSS

0.00000

KEV

no

Activities

medium

Sources

Do you know our Splunk app?

Download it now for free!