Security research · CVE-2026-61438
PraisonAI vulnerable to Remote Code Execution via Broken AST Sandbox
Published Jul 15, 2026 · catalog updated Oct 29, 2026 · MervinPraison PraisonAI
Last checked Oct 30, 2026. A connected source was read within the last 7 days.
Check if you run it
No confirmed exploitation is on record for CVE-2026-61438. EPSS is 0.31%. Act only if a listed version of MervinPraison PraisonAI is installed.
Gaps on this record
- No vendor fix or required action is stored. Compare the linked advisory before you change production.
Same product and reporting
- CVE-2026-61447 · Critical
- CVE-2026-61445 · Critical
- CVE-2026-61439 · High
- CVE-2026-61428 · Medium
- CVE-2026-61426 · High
- Severity
- High7.3
- Known exploitation
- Not in CISA/VulnCheck KEV
- EPSS
- 0.31%
- Remediation
- Version ranges on file
- Affected products
- PyPI praisonai · pip praisonai · pypi praisonai · vendor MervinPraison PraisonAI
### Summary JobWorkflowExecutor._exec_inline_python() is designed to safely execute inline Python expressions from YAML workflow script: steps using AST validation. The function claims to block dangerous operations by (a) checking all AST nodes against an allowlist, and (b) providing a __builtins__ whitelist that omits __import__, exec, eval, and open. The sandbox is broken. The module import allowlist (allowed_modules) explicitly includes 'os', and the AST allowlist permits ast.Import, ast.ImportFrom, ast.Call, and ast.Attribute nodes. This means the following malicious workflow script: step passes all AST validation checks and executes without error. Attack Scenario Attacker creates or contributes a YAML workflow file (type: job) with a script: step containing import os; os.system(...). A user or CI pipeline with PRAISONAI_ALLOW_JOB_WORKFLOWS=true executes the workflow via praisonai workflow run malicious.yaml. Arbitrary OS commands execute with the privileges of the calling process. This is particularly dangerous in multi-tenant or CI environments where YAML workflows may originate from untrusted sources (e.g., downloaded templates, shared repositories, AI-generated workflows). ### PoC _Complete instructions, including specific configuration details, to reproduce the vulnerability._ ### Impact Root Cause — Lines 364–372: pythonallowed_modules = {'os', 'datetime', 'time', 'json', 'math', 're', 'collections', 'itertools'} if isinstance(node, ast.Import): for alias in node.names: if alias.name.split('.')[0] not in allowed_modules: return {"ok": False, "error": f"Import of '{alias.name}' not allowed..."} os is trusted because it is commonly used for path operations (os.path, os.getcwd). However, os.system(), os.popen(), os.execvp(), os.spawn*(), and os._exit() are all accessible once the module is imported, none of which are individually blocked. The __builtins__ restriction (blocking __import__) is irrelevant because the code uses a real import statement processed b
Are you affected?
Enter the version you run. The result uses only the ranges stored on this record.
The check returns affected, not affected, or incomplete. It does not guess a version that is missing from the record.
- PyPI praisonai0 → 4.6.78
- pip praisonai< 4.6.78
- pypi praisonaiversion unspecified
- vendor MervinPraison PraisonAIversion unspecified
How to fix CVE-2026-61438
Upgrade
CVE-2026-61438 lists a fix boundary at 4.6.78. Compare the installed build with that boundary before you change production.
Version check
Affected < 4.6.78
Advisory
Open the cve_org record and follow its fix.
Official advisories
What to do
Three questions, each answered from this record only. Confirm the vendor advisory before you patch.
Should you patch?
No confirmed exploitation is on record for CVE-2026-61438. EPSS is 0.31%. Act only if a listed version of MervinPraison PraisonAI is installed.
Which versions are affected?
Compare what you have installed with 0 → 4.6.78, < 4.6.78. Compare the installed version with the linked vendor advisory before you change production.
What should an analyst verify?
CWE-184; CWE-693: Protection Mechanism Failure; CWE-78: OS Command Injection. EPSS 0.31%. There is no CISA KEV listing. No Exploit-DB or Metasploit reference is linked. Use the source links for the original advisory.
Code
The project this record applies to. Exploit listings stay in References.
Timeline
Detection, updates, and resolution for this record.
Oct 29, 2026 · PyPA Advisory Database
Detected
### Summary JobWorkflowExecutor._exec_inline_python() is designed to safely execute inline Python expressions from YAML workflow script: steps using AST validation. The function claims to block dangerous operations by (a) checking all AST nodes against an allowlist, and (b) providing a __builtins__ whitelist that omits __import__, exec, eval, and open. The sandbox is broken. The module import allo
Oct 29, 2026 · PyPA Advisory Database
Fix available
praisonai fixed in 4.6.78
Oct 29, 2026 · PyPA Advisory Database
Fix available
praisonai fixed in 4.6.78
Oct 29, 2026 · PyPA Advisory Database
Updated
### Summary JobWorkflowExecutor._exec_inline_python() is designed to safely execute inline Python expressions from YAML workflow script: steps using AST validation. The function claims to block dangerous operations by (a) checking all AST nodes against an allowlist, and (b) providing a __builtins__ whitelist that omits __import__, exec, eval, and open. The sandbox is broken. The module import allo
Sources
- CVE.orgVulnerability recordCVE-2026-61438
PraisonAI before 4.6.78 contains a remote code execution vulnerability in JobWorkflowExecutor._exec_inline_python() due to insufficient AST validation of workflow script steps. Attackers can create malicious YAML workflow files with import os statements followed by os.system() ca
cve.org - GitHub Advisory DatabasePackage advisoryGHSA-26mh-57q7-jfvr
PraisonAI vulnerable to Remote Code Execution via Broken AST Sandbox
github.com - GitLab Advisory DatabasePackage advisoryCVE-2026-61438
JobWorkflowExecutor._exec_inline_python() is designed to safely execute inline Python expressions from YAML workflow script: steps using AST validation. The function claims to block dangerous operations by (a) checking all AST nodes against an allowlist, and (b) providing a builtins whitelist that omits import, exec, eval, and open. The sandbox is broken. The module import allowlist (allowed_modul
advisories.gitlab.com - PyPA Advisory DatabasePackage advisoryGHSA-26mh-57q7-jfvr
PraisonAI vulnerable to Remote Code Execution via Broken AST Sandbox
osv.dev
References
Freshness
Last verified in this catalog Oct 29, 2026. Significant claims (KEV, EPSS, CVSS, affected ranges) come from the source rows above — open the original publisher for the authoritative advisory.
- GitLab Advisory DatabaseOct 30, 2026
- GitHub Advisory DatabaseOct 30, 2026
- CVE.orgOct 29, 2026
- PyPA Advisory DatabaseOct 29, 2026