Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessWrite malicious tools.py to local recipe directory
-
DeliveryDeliver or lure operator into using attacker-controlled include path
-
ExploitOperator runs workflow or recipe.run() with include directive
-
ExecutionWorkflow._execute_include() bypasses safety gates
-
Persistimportlib.exec_module() runs malicious module-level code
-
ImpactArbitrary Python executes as PraisonAI process user
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Code injection prevention, sandbox exec
MITRE ATT&CK
2 techniques across 2 tactics: Execution, Initial Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires two concurrent conditions: first, the attacker must be able to place or manipulate a tools.py file in a local recipe directory accessible to the target host's filesystem (e.g., through a shared mount, a cloned untrusted repository, or a prior write primitive); second, a victim operator or automated pipeline must invoke a PraisonAI workflow or call praisonai.recipe.run() with an include directive referencing that attacker-controlled directory (UI:R per CVSS). No authentication to PraisonAI itself is required by the attacker. The vulnerability is NOT reachable from a remote, unauthenticated network position without first achieving local file placement. Exploitation is further limited to environments running praisonai 3.9.26-4.6.57 or praisonaiagents 0.12.12-1.6.57. The critical limiting factor for defenders is the include directive: workflows that exclusively reference internal, access-controlled recipe directories are not exploitable through this path. |
| Impact | The CVSS 3.1 base score of 7.8 (AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H) accurately reflects a local code-injection primitive that requires the victim operator to actively run a workflow referencing an attacker-controlled recipe directory - hence UI:R and AV:L. The AC:L rating is appropriate because once the attacker places a malicious tools.py in the target directory, no further complexity is needed. The PR:N metric reflects that the attacker requires no authenticated access to the PraisonAI application itself, though they must independently achieve write access to a local path the victim will include. Full C:H/I:H/A:H impact is consistent with arbitrary Python execution at process privilege. No EPSS score was provided in the source data; given the niche deployment footprint and the UI:R gating condition, real-world exploitation risk is lower than the raw CVSS would suggest for broad, opportunistic attacks. However, the bypass-of-hardening nature is significant: defenders who believed the ALLOW_TEMPLATE_TOOLS/ALLOW_LOCAL_TOOLS gates were sufficient mitigations for the prior advisory family must treat this as a residual gap, not a new unrelated risk. No KEV listing and no public POC have been identified, but the precise description in the GitHub Security Advisory provides enough technical detail for a skilled researcher to reproduce the issue. |
| Exploit ScenarioDerived | An attacker who can write a malicious tools.py to a directory on the target host - for example via a compromised shared filesystem, a social-engineering lure that tricks an operator into cloning an attacker-controlled repository, or a prior low-privilege foothold - crafts module-level Python code (e.g., a reverse shell or credential harvester) in that file. When the victim operator runs any PraisonAI workflow or recipe that includes the attacker-controlled directory, Workflow._execute_include() unconditionally imports and executes the malicious tools.py before any other workflow processing, achieving arbitrary code execution as the PraisonAI process user. No public proof-of-concept exploit has been identified, but the advisory description provides sufficient detail to reproduce the technique. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 05, 2026
Arbitrary Python code execution in PraisonAI's workflow include feature allows an attacker who controls a local recipe directory to execute arbitrary code as the PraisonAI process user. Affected are praisonai 3.9.26-4.6.57 and praisonaiagents 0.12.12-1.6.57. This is a hardening bypass: the vulnerable sink in Workflow._execute_include() skips the PRAISONAI_ALLOW_TEMPLATE_TOOLS/PRAISONAI_ALLOW_LOCAL_TOOLS opt-in gates and the centralized safe loader that protect all other tools.py autoload paths, making it a distinct variant within an established advisory family. No public exploit or CISA KEV listing has been identified at time of analysis.
RemediationAI
Upgrade praisonai to version 4.6.58 or later and praisonaiagents to version 1.6.58 or later, per the vendor advisory at https://github.com/MervinPraison/PraisonAI/security/advisories/GHSA-hxmv-c4g6-5fqc. These releases route the include path through the centralized safe loader and enforce the PRAISONAI_ALLOW_TEMPLATE_TOOLS/PRAISONAI_ALLOW_LOCAL_TOOLS gates. If an immediate upgrade is not possible, the most actionable compensating control is to restrict all workflow and recipe definitions to trusted, internally maintained recipe directories - auditing and controlling the filesystem paths passed to include directives and to praisonai.recipe.run(). Disabling or disallowing the workflow include feature entirely, if your deployment does not require it, eliminates the vulnerable sink without side effects on other functionality. Do not rely on the PRAISONAI_ALLOW_TEMPLATE_TOOLS or PRAISONAI_ALLOW_LOCAL_TOOLS environment variables as mitigations for this specific path, as the vulnerability explicitly bypasses those gates.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in pypi
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
PraisonAI (CPE: cpe:2.3:a:mervinpraison:praisonai and cpe:2.3:a:mervinpraison:praisonaiagents) is a Python-based multi-agent orchestration framework. The vulnerability (CWE-94: Code Injection) resides in Workflow._execute_include(), which resolves an included recipe's tools.py using Python's raw importlib.util.spec_from_file_location() followed by spec.loader.exec_module(). Because exec_module() executes all module-level code immediately upon import, any Python statements at the top level of the attacker-crafted tools.py run unconditionally during workflow include setup - before parsing of any child workflow or model API call. Critically, this path does not check the PRAISONAI_ALLOW_TEMPLATE_TOOLS or PRAISONAI_ALLOW_LOCAL_TOOLS environment-variable gates, nor does it route through the framework's centralized safe loader. The same vulnerable sink is also reachable via the higher-level praisonai.recipe.run() API, broadening the reachable attack surface beyond direct workflow invocation.
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
Local file write to attacker-controlled recipe directory required (AV:L); no PraisonAI credentials needed (PR:N); victim must actively invoke the malicious include (UI:R); full code execution yields C:H/I:H/A:H.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
PraisonAI is a multi-agent teams system. In versions 3.9.26 through 4.6.57 of praiseonai and 0.12.12 through 1.6.57 of praiseonaiagents, the workflow "include" feature is vulnerable to code execution. Workflow._execute_include() implicitly imports and runs an included recipe's tools.py via a raw importlib.util.spec_from_file_location() and spec.loader.exec_module() call, without honoring the PRAISONAI_ALLOW_TEMPLATE_TOOLS/PRAISONAI_ALLOW_LOCAL_TOOLS autoload opt-in gates or routing through the centralized safe loader that protects the other tools.py autoload paths. As a result, a workflow that includes an attacker-controlled local recipe directory executes arbitrary module-level Python code during include setup, before any child workflow parsing or model call, and the same sink is reachable through the higher-level praisonai.recipe.run() recipe API. An attacker who can cause a victim process to run a workflow or recipe that includes an untrusted local recipe achieves arbitrary Python code execution as the PraisonAI process user, a variant that bypasses the hardening applied to the previously disclosed automatic tools.py RCE advisory family. This issue has been fixed in version 4.6.58 of praisonai and 1.6.58 of praisonaiagents.
Executive ViewAI
PraisonAI versions 3.9.26 through 4.6.57 contain an arbitrary Python code execution vulnerability in the workflow include feature that bypasses established security controls. An attacker with local access to recipe directories can execute arbitrary code with PraisonAI process privileges, creating risk for organizations using PraisonAI in development and automation environments where recipes may originate from untrusted sources. Although no public exploit has been identified at time of analysis, the vulnerability requires immediate patching.
Apply vendor patch.
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
Code injection occurs when an application accepts user input and passes it directly into a language interpreter or evaluator without proper sanitization.
Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.
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
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
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
Server-side request forgery in PraisonAI's web_crawl() function (versions 1.5.128-1.6.57) allows an attacker who can inf
Cross-site request forgery against the PraisonAI MCP HTTP-stream transport allows unauthenticated remote attackers to ex
Remote unauthenticated access to PraisonAI's legacy Flask API server allows attackers to execute configured agent workfl
Path traversal in praisonaiagents prior to 1.6.58 allows a low-privileged caller to write arbitrary JSON files to any pr
Server-Side Request Forgery in PraisonAI before version 4.6.58 allows unauthenticated remote attackers to force the appl
EUVD-2026-53580
GHSA-hxmv-c4g6-5fqc
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB