Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessDiscover exposed ToolUniverse port
-
DeliverySend python_code_executor request
-
ExploitBypass deny-list via dunder subclass walk
-
ExecutionReach subprocess module
-
PersistExecute arbitrary code as server process
-
ImpactFull host compromise
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Code injection prevention, sandbox exec
MITRE ATT&CK
2 techniques across 2 tactics: Execution, Initial Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires network reachability to the ToolUniverse HTTP API (http_api_server.py) or SMCP/MCP server (smcp_server.py) with the python_code_executor tool available. In vulnerable versions (through 1.2.6) these servers bind to every interface (0.0.0.0) with debugging enabled and no authentication, so on a default network-exposed deployment there are no special conditions - remote unauthenticated exploitation succeeds against any reachable instance. The sandbox escape itself needs no privileged input: the deny-list inspection is bypassed through dunder attributes reached via string/attribute lookup and via a per-call argument that widens the import allow-list. What LIMITS exploitation is deployment posture: an instance bound only to loopback (the 1.3.0 default) or protected by the new TOOLUNIVERSE_API_TOKEN bearer authentication is not reachable/executable by an unauthenticated remote attacker, and instances never exposed beyond localhost are not remotely exploitable. |
| Impact | This is a genuine top-priority issue, not an inflated CVSS number. The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:N with VC:H/VI:H/VA:H) is consistent with the description: network-reachable, low complexity, no privileges, no user interaction, and full compromise of confidentiality, integrity, and availability. The combination of an escapable sandbox and a server that binds to every interface without authentication means exploitation collapses to 'reach the port, get code execution as the server process,' which is directly automatable. No EPSS score or CISA KEV status was provided in the input, and no public exploit code is identified at time of analysis, so there is no confirmation of active exploitation - the severity rests on the design flaw and VulnCheck's report rather than observed in-the-wild activity. The main mitigating factor is real-world exposure: ToolUniverse is a niche research toolkit, so the population of internet-reachable instances is likely small, favoring targeted opportunistic scanning over mass exploitation. Any operator running an exposed instance should treat patching as urgent regardless of that low footprint. |
| Exploit ScenarioDerived | An attacker scans for ToolUniverse HTTP/MCP ports exposed on 0.0.0.0 and, without any credentials, submits a python_code_executor request whose source uses ().__class__.__base__.__subclasses__() to reach subprocess and run OS commands. Because AV:N/AC:L/PR:N/UI:N applies, a single crafted request to the open port yields code execution as the server process; no public exploit code is identified, but the escape technique is described in the VulnCheck advisory. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 27, 2026
Unauthenticated remote code execution affects mims-harvard ToolUniverse through 1.2.6, where the python_code_executor tool runs caller-supplied Python in a sandbox that can be escaped and the HTTP/MCP servers listen on all interfaces with no authentication. Any attacker who can reach the exposed port executes arbitrary code as the server process, since the deny-list source inspection can be bypassed via dunder attribute traversal and a per-call flag that widens the import allow-list. No public exploit code is identified at time of analysis, but the flaw is reported by VulnCheck and carries a CVSS 4.0 base score of 9.3; it is fixed in version 1.3.0.
RemediationAI
Upgrade to ToolUniverse 1.3.0, which adds bearer-token authentication, defaults the bind address to loopback (127.0.0.1), and hardens the attribute checks in the executor (Vendor-released patch: 1.3.0; see GHSA-pxwq-22vf-87fm and PR 251). If you cannot upgrade immediately, do not expose the HTTP or MCP servers on a non-loopback interface: bind them to 127.0.0.1 only and reach them via SSH tunnel or a localhost-only reverse proxy, accepting the trade-off that remote clients lose direct access. Place any exposed instance behind a network layer that enforces authentication (an authenticating reverse proxy or firewall rule restricting the port to trusted hosts), and disable debug mode. Where the python_code_executor tool is not required, disable or remove that tool entirely to eliminate the primary code-execution path, at the cost of losing dynamic Python execution features. In 1.3.0 the server refuses to bind to a non-loopback address unless TOOLUNIVERSE_API_TOKEN is set, so set a strong random token (e.g. python -c 'import secrets; print(secrets.token_urlsafe(32))') before any network exposure.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
ToolUniverse is a Python toolkit (mims-harvard, CPE cpe:2.3:a:mims-harvard:tooluniverse) that exposes callable 'tools' to AI agents over HTTP and MCP transports. The vulnerable component is the executor behind the python_code_executor tool in python_executor_tool.py, which attempts to sandbox untrusted Python by scanning submitted source for a deny-list of attribute names and calls. This is a classic CWE-94 (Improper Control of Generation of Code / code injection) root cause: static blacklisting of a dynamic language is incomplete because attribute-lookup builtins (getattr and dunder access via string lookup) remain reachable. An attacker walks the standard object graph - from a literal's __class__ to __bases__ (object) and enumerating __subclasses__() - to reach process/subprocess objects, and a per-call argument lets the caller expand the import allow-list before inspection runs. Compounding this, http_api_server.py and smcp_server.py bound to 0.0.0.0 with debugging enabled and no authentication.
Know when Tooluniverse 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
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
Network-reachable server with no authentication or user interaction and low-complexity sandbox escape gives AV:N/AC:L/PR:N/UI:N; arbitrary code as the server process yields full C:H/I:H/A:H, scope unchanged.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
ToolUniverse ran caller-supplied Python inside a sandbox that could be escaped, on a server that required no authentication. The executor behind the python_code_executor tool, in python_executor_tool.py, inspected the submitted source for a denied list of attribute names and calls but left the attribute-lookup builtins available and did not stop a dunder attribute reached through a string lookup or through a module already permitted, so a caller could walk from a literal's class to its base and enumerate subclasses to obtain a reference to the process and subprocess modules. A per-call argument also let the caller widen the import allow-list before the inspection ran. The HTTP and MCP servers in http_api_server.py and smcp_server.py bound to every interface with debugging enabled and no authentication, so any caller able to reach the port executed code as the server process. Version 1.3.0 adds bearer-token authentication, defaults the bind address to loopback, and hardens the attribute checks.
Articles & Coverage 2
Executive ViewAI
mims-harvard ToolUniverse versions 1.2.6 and earlier contain a critical vulnerability allowing any attacker with network access to gain complete control of the affected server without credentials. The vulnerability could result in unauthorized access to research data, system compromise, and potential data theft across Harvard research operations.
Apply vendor patch to version 1.3.0 or later. Until patching is complete, restrict network access to ToolUniverse ports to trusted internal networks only; disable Python code execution features if not critical to ongoing research; and monitor server process logs for suspicious activity.
Threat Intelligence Overview
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Code injection occurs when an application accepts user input and passes it directly into a language interpreter or evaluator without proper sanitization.
Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.
EUVD-2026-67024
GHSA-rg68-wg77-c3wm
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB