Skip to main content
CVE Vulnerability Database
Vulnerability Database/CVE-2026-31225

CVE-2026-31225: Superduper Project RCE Vulnerability

CVE-2026-31225 is a remote code execution flaw in superduper project's query parsing component that allows attackers to execute arbitrary system commands. This post covers technical details, affected versions, and mitigation.

Published:

CVE-2026-31225 Overview

CVE-2026-31225 is a remote code execution vulnerability in the SuperDuper project through version v0.10.0. The flaw resides in the _parse_op_part() function inside query.py, which invokes Python's eval() on user-supplied query operands. The function restricts the global namespace but fails to block access to dangerous Python built-ins. A remote attacker can submit a crafted query string that imports modules such as os and executes arbitrary system commands. Successful exploitation leads to complete server compromise. The vulnerability is classified under CWE-94: Improper Control of Generation of Code.

Critical Impact

Unauthenticated attackers can execute arbitrary operating system commands on the host running SuperDuper, resulting in full confidentiality, integrity, and availability loss.

Affected Products

  • SuperDuper project versions through v0.10.0
  • Deployments exposing the SuperDuper query interface to untrusted input
  • Applications embedding SuperDuper's query parsing component

Discovery Timeline

  • 2026-05-12 - CVE-2026-31225 published to NVD
  • 2026-05-13 - Last updated in NVD database

Technical Details for CVE-2026-31225

Vulnerability Analysis

The vulnerability stems from unsafe dynamic evaluation in SuperDuper's query parsing layer. The _parse_op_part() function in query.py accepts query operands and passes them directly to Python's eval() built-in. The developers attempted to sandbox execution by supplying a restricted globals dictionary. However, this restriction does not remove access to Python's built-in functions, which allow attribute traversal back to module loaders and the os module.

An attacker who can submit a query through any application interface backed by SuperDuper can craft an operand that resolves to arbitrary Python code at evaluation time. Because the function executes in the server process, commands run with the privileges of the SuperDuper service account. This pattern is a textbook expression-language injection rooted in trusting that eval() with a partial sandbox is safe.

Root Cause

The root cause is reliance on eval() to interpret untrusted input combined with an incomplete deny-list approach to sandboxing. Python's eval() cannot be safely constrained by globals manipulation alone, because object introspection paths (e.g., ().__class__.__mro__) reach the import machinery. The correct approach is a dedicated parser or ast.literal_eval() for constrained literal expressions.

Attack Vector

Exploitation requires network access to an endpoint that forwards user input into _parse_op_part(). The CVSS vector indicates user interaction is required, suggesting the input often arrives through an authenticated query workflow or UI action. The attacker supplies a malicious operand string. When the server parses the query, eval() executes the embedded Python, which can chain to os.system, subprocess.Popen, or arbitrary file operations. No prior authentication state is needed at the parser level. Refer to the SuperDuper GitHub repository and the CVE-2026-31225 analysis for technical details on the affected code path.

Detection Methods for CVE-2026-31225

Indicators of Compromise

  • Unexpected child processes spawned by the SuperDuper Python interpreter, especially shells, curl, wget, or interpreters such as bash, sh, python, or perl.
  • Outbound network connections from the SuperDuper service host to unfamiliar IPs or domains shortly after query API calls.
  • Query strings in application logs containing Python introspection patterns such as __class__, __mro__, __subclasses__, __import__, or builtins.

Detection Strategies

  • Inspect HTTP request bodies and query parameters routed to SuperDuper for serialized Python expressions referencing built-ins or module imports.
  • Correlate application access logs with process-creation telemetry on the host to identify shell activity originating from the SuperDuper process.
  • Apply EDR behavioral rules that flag Python services executing operating system command interpreters.

Monitoring Recommendations

  • Forward application, web server, and host process logs to a centralized analytics platform and alert on the indicator patterns above.
  • Enable file integrity monitoring on directories writable by the SuperDuper service to surface dropped payloads.
  • Track egress network flows from the SuperDuper host and alert on connections to non-allowlisted destinations.

How to Mitigate CVE-2026-31225

Immediate Actions Required

  • Restrict network access to the SuperDuper query interface to trusted internal clients until a patched release is deployed.
  • Place a web application firewall or reverse proxy filter in front of the service to reject query operands containing Python introspection tokens.
  • Audit recent application logs for the indicators listed above and isolate any host showing signs of post-exploitation activity.

Patch Information

At the time of publication, the NVD entry does not list a fixed version. Monitor the SuperDuper GitHub repository for an upstream release that replaces the eval()-based parser with a safe expression evaluator. Once available, upgrade beyond v0.10.0 to the patched release.

Workarounds

  • Run the SuperDuper service under a dedicated low-privilege account with no shell, no sudo rights, and minimal filesystem access.
  • Apply input validation at the application layer to reject query operands containing characters or substrings used in Python expression injection.
  • Sandbox the service with container isolation, seccomp profiles, or AppArmor policies that deny execve of shells and unexpected binaries.
bash
# Example: restrict the SuperDuper service with a minimal systemd hardening profile
# /etc/systemd/system/superduper.service.d/hardening.conf
[Service]
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
PrivateTmp=true
SystemCallFilter=~@debug @mount @reboot @swap @raw-io
RestrictNamespaces=true
RestrictSUIDSGID=true

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

Default Legacy - Prefooter | Experience the World’s Most Advanced Cybersecurity Platform

Experience the Most Advanced Cybersecurity Platform

See how the world’s most intelligent, autonomous cybersecurity platform can protect your organization today and into the future.