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

CVE-2026-67195: Perspective 5.0.0 RCE Vulnerability

CVE-2026-67195 is a remote code execution flaw in Perspective 5.0.0 allowing unauthenticated attackers to execute OS commands via crafted expression strings. This post covers technical details, affected versions, and mitigations.

Published:

CVE-2026-67195 Overview

CVE-2026-67195 is a remote code execution vulnerability in Perspective 5.0.0. The flaw resides in the PolarsVirtualServer backend, which passes client-supplied expression strings directly to Python's eval() after only clearing __builtins__={}. Attackers submit crafted expressions through TableValidateExprReq or TableMakeViewReq protobuf messages. By traversing Python object attributes through the interpreter's loaded class list, an attacker reaches subprocess.Popen and executes arbitrary operating system commands. The vulnerability is classified under CWE-95: Improper Neutralization of Directives in Dynamically Evaluated Code.

Critical Impact

Unauthenticated attackers with network access can execute arbitrary OS commands in the Perspective host process, achieving full compromise of confidentiality, integrity, and availability.

Affected Products

  • Perspective 5.0.0
  • Deployments exposing the PolarsVirtualServer backend
  • Applications processing untrusted TableValidateExprReq or TableMakeViewReq protobuf messages

Discovery Timeline

  • 2026-08-04 - CVE-2026-67195 published to NVD
  • 2026-08-04 - Last updated in NVD database

Technical Details for CVE-2026-67195

Vulnerability Analysis

The vulnerability originates in Perspective's expression evaluation pipeline. The PolarsVirtualServer accepts expression strings from client protobuf messages and forwards them to Python's eval() function. Developers attempted to sandbox execution by setting __builtins__={} in the evaluation namespace. This mitigation is insufficient because Python objects still expose method resolution order and subclass introspection through attribute traversal.

An attacker can walk from any accessible object through __class__, __mro__, __subclasses__(), and similar attributes to reach subprocess.Popen or other dangerous classes loaded in the interpreter. Once reached, the attacker invokes the class with arbitrary command arguments. Execution occurs in the Perspective host process with the privileges of that process.

Root Cause

The root cause is unsafe use of eval() on untrusted input. Clearing __builtins__ does not remove access to loaded classes reachable through object graph traversal. The application treats client-supplied expression strings as trusted data, violating input validation requirements for dynamic code evaluation.

Attack Vector

Exploitation requires network access to the Perspective service and the ability to send TableValidateExprReq or TableMakeViewReq protobuf messages. The attacker crafts an expression that traverses Python's class hierarchy to locate subprocess.Popen, then invokes it with attacker-controlled arguments. No authentication of the expression payload is enforced beyond the low-privilege access required to submit table requests.

The vulnerability mechanism is documented in the VulnCheck RCE Advisory and the Christ Bowel Blog on CVEs. Refer to those references for technical proof-of-concept details.

Detection Methods for CVE-2026-67195

Indicators of Compromise

  • Unexpected child processes spawned by the Perspective host process, particularly shells such as /bin/sh, bash, cmd.exe, or powershell.exe
  • Protobuf payloads containing Python dunder attributes such as __class__, __mro__, __subclasses__, or __builtins__ in expression fields
  • Outbound network connections initiated by the Perspective process to unfamiliar destinations
  • Anomalous file writes or process launches originating from the Perspective service account

Detection Strategies

  • Inspect application logs for TableValidateExprReq and TableMakeViewReq messages containing suspicious expression strings referencing Python introspection attributes
  • Monitor process-tree telemetry for subprocess-style child processes descending from the Perspective host binary
  • Deploy behavioral analytics that flag interpreter-hosted services spawning shells, interpreters, or network utilities

Monitoring Recommendations

  • Enable verbose logging on the PolarsVirtualServer backend to capture full expression payloads for forensic review
  • Correlate expression evaluation events with subsequent process creation and network activity
  • Alert on any invocation of subprocess.Popen, os.system, or equivalent primitives from within the Perspective process context

How to Mitigate CVE-2026-67195

Immediate Actions Required

  • Restrict network access to Perspective services so only trusted, authenticated clients can submit table expression requests
  • Audit deployments for exposure of Perspective 5.0.0 to untrusted networks and isolate affected hosts
  • Review recent logs for exploitation indicators, including unusual expression payloads and unexpected child processes
  • Rotate credentials and secrets accessible to the Perspective service account if compromise is suspected

Patch Information

No vendor advisory URL is provided in the enriched CVE data. Consult the VulnCheck RCE Advisory for current remediation guidance and upgrade paths. Upgrade to a fixed release of Perspective when available and validate that expression evaluation no longer invokes eval() on client input.

Workarounds

  • Disable or firewall the PolarsVirtualServer backend if expression evaluation is not required by the application
  • Enforce an allow-list of permitted expression tokens at a proxy layer to block payloads containing Python dunder attributes
  • Run the Perspective process under a low-privilege service account with restricted filesystem and network egress permissions
  • Apply mandatory access controls such as AppArmor, SELinux, or seccomp profiles to prevent subprocess.Popen from launching shells
bash
# Example: restrict Perspective service egress and child processes via systemd
[Service]
User=perspective
NoNewPrivileges=true
SystemCallFilter=~@debug @mount @privileged
RestrictAddressFamilies=AF_INET AF_INET6
ProtectSystem=strict
ProtectHome=true
PrivateTmp=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.