<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <id>https://db.gcve.eu/rss/recent/all/10</id>
  <title>Most recent entries from all</title>
  <updated>2026-10-20T19:17:14.377081+00:00</updated>
  <author>
    <name>Vulnerability-Lookup</name>
    <email>info@gcve.eu</email>
  </author>
  <link href="https://db.gcve.eu" rel="alternate"/>
  <generator uri="https://lkiesow.github.io/python-feedgen" version="1.0.0">python-feedgen</generator>
  <subtitle>Contains only the most 10 recent entries.</subtitle>
  <entry>
    <id>https://db.gcve.eu/vuln/fkie_cve-2026-111057</id>
    <title>fkie_cve-2026-111057</title>
    <updated>2026-10-20T19:17:14.379778+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>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.</p>
      </div>
    </content>
    <link href="https://db.gcve.eu/vuln/fkie_cve-2026-111057"/>
  </entry>
  <entry>
    <id>https://db.gcve.eu/vuln/ghsa-f8c7-rwf9-fmgm</id>
    <title>GHSA-f8c7-rwf9-fmgm — Mercury: Unauthenticated Remote Code Execution in /api/terminals - access control bypass</title>
    <updated>2026-10-20T19:17:14.379844+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> PyPI: mercury</p>
<p>### Summary
A missing comma in `mercury_app/block_handler.py`'s `BLOCKED_PATTERNS` list causes the blocklist to fail to cover the `/api/terminals` endpoint. As a result, any unauthenticated attacker can spawn a full, interactive OS-level shell on the host running Mercury.</p>
<p>### Details
The blocklist in `mercury_app/block_handler.py` is defined as:
```
BLOCKED_PATTERNS = [
    # JupyterLab UI + API
    r"/lab(?!/(?:extensions/|api/settings(?:/|$)|api/translations(?:/|$)))(?:/.*)?"
    r"/api/terminals(?:/.*)?",
    r"/api/shutdown(?:/.*)?",
    r"/files(?:/.*)?",
]
```
The missing comma between the first and the second line causes Python to merge the rules, therefore the actual list that is blocked looks like this:</p>
<p>/lab...(?:/.`*`)?/api/terminals(?:/.`*`)? (the first two lines joined together)
/api/shutdown(?:/.`*`)?
/files(?:/.`*`)?</p>
<p>A direct request to `/api/terminals` does not match any of the 3 blocklist rules and is therefore **not blocked**, reaching Jupyter
Server's built-in terminal API, which spawns a real OS shell accessible over a WebSocket connection. No authentication, account, session or pre-existing access to Mercury is required.</p>
<p>### PoC
Testing was performed on a local Docker deployment (https://runmercury.com/deploy/dockerfile/), Mercury version 3.2.3, default
configuration.
 
**Step 1 - spawn a terminal:**</p>
<p>```
curl -i -X POST http://localhost:8888/api/terminals
```
Response: `{"name": "1", "last_activity": "..."}`</p>
<p>**Step 2 - connect to the terminal and e…</p></div>
    </content>
    <link href="https://db.gcve.eu/vuln/ghsa-f8c7-rwf9-fmgm"/>
  </entry>
</feed>
