Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessOperator runs untrusted steps recipe
-
Exploitworkflow.yaml self-approves execute_command via approve:
-
ExecutionBypass recipe dangerous-tool policy
-
ImpactExecute arbitrary shell as PraisonAI process
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization OS command sanitization, avoid shell exec
MITRE ATT&CK
2 techniques across 1 tactic: Execution The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires an operator to execute an untrusted, attacker-authored steps-based recipe (hence UI:R) on an affected version (>=4.5.87, <4.6.61). The crafted recipe must: omit execute_command from TEMPLATE.yaml requires.tools (so it passes _check_tool_policy, which only inspects TEMPLATE.yaml), declare execute_command under workflow.yaml agents.*.tools, and set a top-level approve:[execute_command] that YAMLWorkflowParser preserves and Workflow.start()/set_yaml_approved_tools installs as approved. The caller must NOT have passed allow_dangerous_tools=True (if they had, the behavior is the intended opt-in). Limiting factors: exploitation is local by default and depends on the operator choosing to run the untrusted recipe, and actual command execution still depends on the model/agent tool-call path reaching execute_command - though the policy boundary is bypassed before that point. The bundled HTTP recipe runner defaults to localhost/no-auth and requires auth for non-localhost binding, so remote exploitation is only possible in non-default deployments that expose the API to users who can select recipe names/URIs. |
| Impact | Signals point to a real but conditional priority rather than a mass-exploitation emergency. The CVSS 3.1 base score is 7.8 (High) with vector AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H, so the headline severity is driven by full compromise (C:H/I:H/A:H via arbitrary shell execution) but gated by local vector and required user interaction - specifically an operator who runs an untrusted recipe. The vuln.today decision label is 'this_week', consistent with a serious issue that is not act_now/emergency. No EPSS score was supplied and the CVE is not listed in CISA KEV, so there is no evidence of active or widespread exploitation; the only exploitation artifact is the local PoV described in the GHSA advisory (a harmless printf canary with PRAISONAI_AUTO_APPROVE unset), which demonstrates the policy bypass deterministically but is a researcher reproduction rather than confirmed in-the-wild use. One tension to verify: the CVSS vector encodes AV:L, yet the advisory explicitly notes that an HTTP recipe-runner deployment exposed to authenticated users who choose recipe names/URIs could turn this into an authenticated remote recipe-execution issue - the vendor deliberately chose local/UI-required severity as the default claim, so network exploitability depends on non-default deployment and should be assessed per environment. Net: treat as a high-value supply-chain/untrusted-recipe risk for anyone running recipes from untrusted sources, but not an unauthenticated internet-facing RCE by default. |
| Exploit ScenarioDerived | An operator (or a user allowed to pick recipe names/URIs on a recipe-runner deployment) executes an attacker-authored steps-based recipe. The recipe omits execute_command from TEMPLATE.yaml requires.tools so it passes the dangerous-tool policy, but declares execute_command under workflow.yaml agents.*.tools with top-level approve:[execute_command]; Workflow.start() self-approves the critical shell tool and runs commands with the PraisonAI process privileges, even though the caller never set allow_dangerous_tools=True. A vendor PoV in the GHSA advisory reproduces the bypass locally (harmless printf canary), though it is not verified as weaponized exploit code. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 23, 2026
PraisonAI recipe execution in versions 4.5.87 through 4.6.60 allows an untrusted steps-based recipe to self-approve the default-denied execute_command shell tool, so an operator who never set allow_dangerous_tools=True can still end up running arbitrary OS commands with the PraisonAI process's privileges. The recipe-level gate (CWE-78/CWE-863) inspects only TEMPLATE.yaml requires.tools, while workflow.yaml agents.*.tools declarations and a top-level approve: list are parsed by YAMLWorkflowParser and installed into the approval registry as already approved. Exploitation is local and user-interaction driven (CVSS 7.8, AV:L/UI:R, PR:N), a public proof-of-value reference exists in the advisory demonstrating the bypass with a harmless printf canary rather than verified working exploit code, and no active exploitation (CISA KEV) is reported for this this_week-priority issue.
RemediationAI
Vendor-released patch: upgrade praisonai to 4.6.61, which resolves the bypass by reconciling the workflow-resolved tool graph with the recipe dangerous-tool policy (advisory GHSA-7qw2-w5rc-37x2, https://github.com/MervinPraison/PraisonAI/security/advisories/GHSA-7qw2-w5rc-37x2). Until the upgrade is deployed, do not execute untrusted or third-party steps-based recipes: this is the only complete mitigation because the bypass lives in the policy check itself, and its cost is that recipe sharing and marketplace-style workflows become unusable from untrusted sources. Where recipes must be run, inspect workflow.yaml for agents.*.tools entries naming execute_command (or other default-denied tools) and for top-level approve: lists that pre-approve them; rejecting such recipes trades automation convenience for a manual review step. If the bundled HTTP recipe runner is exposed, keep it bound to localhost or, where non-localhost binding is required, behind authentication and restricted to operators who cannot freely choose recipe names or URIs, since authenticated users with that capability can convert the bypass into remote recipe execution. Operators should not rely on unsetting PRAISONAI_AUTO_APPROVE or on withholding allow_dangerous_tools=True as a workaround - the advisory's proof-of-value performs exactly that and still reaches the dry-run state with execute_command approved.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in pypi
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
PraisonAI's safety model relies on a human-in-the-loop approval registry: dangerous tools such as execute_command are marked with @require_approval(risk_level="critical") and are denied unless the caller explicitly opts in via options["allow_dangerous_tools"]=True. Two separate code paths undermine that model. recipe.run() calls _check_tool_policy(), which pulls its tool list from recipe_config.get_required_tools() - data backed exclusively by TEMPLATE.yaml requires.tools. For steps-based recipes, however, _execute_steps_workflow() loads workflow.yaml through YAMLWorkflowParser, which resolves agent-level tools: declarations and preserves the top-level approve: key into workflow.approve_tools; Workflow.start() then calls set_yaml_approved_tools() and the approval registry treats those YAML-declared tools as approved. The result is an authorization-scope gap (CWE-863) that yields command injection (CWE-78, related CWE-94) because the enforcement check never inspects the workflow file that actually supplies and authorizes the tool. A control recipe declaring requires.tools: [execute_command] is correctly denied with 'Tool execute_command is denied by default. Use allow_dangerous_tools=True to override.', while the bypass recipe omitting it from TEMPLATE.yaml passes policy and reaches the recipe runner's dry-run state with workflow_approve_tools and runner_tool_names both containing execute_command. Actual shell execution still depends on the agent/model tool-call path reaching the tool, but the policy boundary is already crossed at that point.
Know when Praisonai gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
Operator must run an untrusted local recipe (AV:L, UI:R); no attacker privileges or auth on the runner are needed (PR:N), and arbitrary shell execution yields full C/I/A impact in the process scope.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
PraisonAI is a multi-agent teams system. From version 4.5.87 to before version 4.6.61, PraisonAI recipe execution has a dangerous-tool policy that is supposed to block default-denied tools unless the caller explicitly passes allow_dangerous_tools=True. That policy only checks tools declared in TEMPLATE.yaml requires.tools. For steps-based recipes, the actual execution path loads workflow.yaml with YAMLWorkflowParser. That parser resolves agent-level tools: declarations and preserves top-level approve:. Workflow.start() then installs those YAML-approved tools into the approval context. As a result, an untrusted recipe can omit execute_command from TEMPLATE.yaml requires.tools, declare it in workflow.yaml agents.*.tools, and add top-level approve: [execute_command]. The caller did not set allow_dangerous_tools=True, but the recipe policy allows the recipe and the workflow approval path self-approves the critical shell tool. This issue has been patched in version 4.6.61.
Technical POC Analysis
Bug class: CWE-863 (incorrect authorization) implemented through a CWE-78 sink.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
PraisonAI versions 4.5.87 through 4.6.60 contain a high-severity vulnerability (CVE-2026-57142) that allows a crafted recipe to bypass intended safety controls and execute arbitrary operating system commands under the PraisonAI process's privileges. This could enable unauthorized actions on user workstations or shared systems, potentially compromising sensitive data or system integrity. Leadership should care because developers and operators using PraisonAI are at risk, and a public proof-of-value reference exists, increasing the likelihood of attempted exploitation.
No vendor-released patch identified at time of analysis. Interim mitigations: run PraisonAI with least privileges, restrict execution to trusted recipes, monitor for anomalous command execution, and isolate affected systems.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
OS command injection occurs when an application passes unsanitized user input directly into system shell commands.
Remote code execution in PraisonAI before 1.6.78 allows attackers to run arbitrary Python on the host by manipulating th
PraisonAI's TypeScript MCP server (npm package `praisonai`, versions 1.5.0 through 1.7.1) exposes an HTTP JSON-RPC trans
WebSocket origin-validation bypass in PraisonAI's Browser Server (praisonai/browser/server.py) before 4.6.58 lets an att
PraisonAI's `praisonai serve` subsystem (agents and unified modes) accepts an `--api-key` CLI flag that is parsed but ne
System prompt extraction and unauthorized tool invocation in PraisonAI before 4.6.78 arise because the prompt-injection
Unauthenticated remote agent invocation in PraisonAI versions 4.6.34 through 4.6.57 allows any network-reachable caller
SSRF protection bypass in PraisonAI's praisonaiagents library (all versions before 1.6.58) lets low-privileged users rou
Server-side request forgery in PraisonAI's Crawl4AI/Chromium crawling backend (all versions before 1.6.78) lets low-priv
Authentication fail-open in PraisonAI's Recipe HTTP server allows unauthenticated remote attackers to invoke recipe exec
Authentication bypass in PraisonAI's AgentServer component exposes all routes - /publish, /events, /info, /health - to u
Arbitrary Python code execution in PraisonAI's workflow include feature allows an attacker who controls a local recipe d
Server-side request forgery in PraisonAI's web_crawl() function (versions 1.5.128-1.6.57) allows an attacker who can inf
EUVD-2026-108896
GHSA-7qw2-w5rc-37x2
NVD
CVE.org
EPSS
Exploit-DB