LearnCTEM.com, Best CTEM Learning Platform
CVE Intelligence Hub

CVE-2026-39888: Praisonai Security Vulnerability (CVSS 9.9)

CVE-2026-39888 is a critical severity security vulnerability in Praisonai with a CVSS score of 9.9. Apply the vendor fix and confirm exposure on internet facing and business critical assets first.

Last updated: Jul 24, 2026

Quick answer

Direct answer

CVE-2026-39888 is a critical severity security vulnerability in Praisonai with a CVSS score of 9.9. Apply the vendor fix and confirm exposure on internet facing and business critical assets first.

Risk scores

CVSS base score
9.9CRITICAL
EPSS probability
0.61%
Higher than 48 percent of all CVEs
CISA KEV
Not listed
CVSS metricWhat it means
Attack vector (AV:N)Network: reachable remotely
Attack complexity (AC:L)Low complexity
Privileges required (PR:L)Low privileges required
User interaction (UI:N)No user interaction
Scope (S:C)Scope changed: impact spreads beyond the component
Confidentiality (C:H)High confidentiality impact
Integrity (I:H)High integrity impact
Availability (A:H)High availability impact

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

About Praisonai

CVE-2026-39888 affects Praisonai, a product from Praison. Before acting, confirm where Praisonai runs in your estate, who owns it and whether it is reachable from the internet, because exposure decides real risk more than the score alone.

What the flaw is

In plain terms: PraisonAI is a multi-agent teams system. Prior to 1.5.115, execute_code() in praisonaiagents.tools.python_tools defaults to sandbox_mode="sandbox", which runs user code in a subprocess wrapped with a restricted __builtins__ dict and an AST-based blocklist. The AST blocklist embedded inside the subprocess wrapper (blocked_attrs of python_tools.py) contains only 11 attribute names — a strict subset of the 30+ names blocked in the direct-execution path. The four attributes that form a frame-traversal chain out of the sandbox are all absent from the subprocess list (__traceback__, tb_frame, f_back, and f_builtins). Chaining these attributes through a caught exception exposes the real Python builtins dict of the subprocess wrapper frame, from which exec can be retrieved and called under a non-blocked variable name — bypassing every remaining security layer. This vulnerability is fixed in 1.5.115.

Based on its CVSS vector, the flaw can be reached over the network, needs some level of access, and needs no user interaction. Apply the vendor fix and confirm exposure on internet facing and business critical assets first.

Affected versions and timeline

FieldDetail
ProductPraisonai
Affected versionsPraisonai before 1.5.115
PublishedApr 8, 2026
Last modifiedJul 24, 2026
Added to CISA KEVNot listed
Assigning CNAsecurity-advisories@github.com

How to detect it

  • Inventory every instance of Praisonai and record the running version against the affected range above.
  • Check external attack surface scans for internet facing instances of the component.
  • Review logs on affected systems for unusual requests, errors or new processes around the vulnerable function.
  • Confirm with an authenticated vulnerability scan once your scanner has a check for this CVE.

How to fix it

  • Apply the fixed version of Praisonai named in the vendor advisory.
  • If patching must wait, restrict network access to the affected service and put it behind authentication or a web application firewall rule.
  • Rescan after the change to prove the exposure is gone, then close the ticket.

CTEM action plan

CTEM stageWhat to do for this CVE
ScopeAdd every business service that depends on Praisonai to the current CTEM cycle.
DiscoverFind all instances, including shadow and cloud deployments, and record versions and exposure.
PrioritizeRank using EPSS and CVSS together with asset exposure and business impact.
ValidateConfirm the flaw is reachable and exploitable in your environment and that compensating controls work.
MobilizeAssign the fix to the asset owner with a due date matched to the priority, then verify closure.

CWE References

Technical References

Frequently asked questions

CVE-2026-39888 is a critical severity security vulnerability in Praisonai with a CVSS score of 9.9. Apply the vendor fix and confirm exposure on internet facing and business critical assets first.

Related CVEs

HIGH8.7
CVE-2026-44340
Praisonai

PraisonAI is a multi-agent teams system. Prior to version 4.6.37, the _safe_extractall helper that all recipe pull, recipe publish, and recipe unpack flows route through validates each archive member's name for absolute paths, .. segments, and resolved-path escape — but does not validate member.linkname, does not reject symlink/hardlink members, and calls tar.extractall(dest_dir) without filter="data". A bundle that contains a symlink with a name inside dest_dir but a linkname pointing outside it, followed by a regular file whose path traverses through the just-created symlink, escapes dest_dir and lets the attacker write arbitrary content to an attacker-chosen location on the victim's filesystem. This issue has been patched in version 4.6.37.

May 8, 2026
CRITICAL9.4
CVE-2026-44336
Praisonai

PraisonAI is a multi-agent teams system. Prior to version 4.6.34, PraisonAI's MCP (Model Context Protocol) server (praisonai mcp serve) registers four file-handling tools by default — praisonai.rules.create, praisonai.rules.show, praisonai.rules.delete, and praisonai.workflow.show. Each accepts a path or filename string from MCP tools/call arguments and joins it onto ~/.praison/rules/ (or, for workflow.show, accepts an absolute path) with no containment check. The JSON-RPC dispatcher passes params["arguments"] blind to each handler via **kwargs without validating against the advertised input schema. By setting rule_name="../../<some-path>" an attacker walks out of the rules directory and writes any file the running user can write. Dropping a Python .pth file into the user site-packages directory escalates this primitive to arbitrary code execution in any subsequent Python process the user spawns — the next praisonai CLI invocation, an IDE script run, the user's python REPL, or any background Python service. This issue has been patched in version 4.6.34.

May 8, 2026
HIGH7.7
CVE-2026-44335
Praisonaiagents

PraisonAI is a multi-agent teams system. Prior to version 1.6.32, the URL checking logic in PraisonAI has a logical flaw that could be bypassed by attackers, leading to SSRF attacks. This issue has been patched in version 1.6.32.

May 8, 2026
HIGH7.2
CVE-2026-40315
Praisonai

PraisonAI is a multi-agent teams system. Prior to 4.5.133, there is an SQL identifier injection vulnerability in SQLiteConversationStore where the table_prefix configuration value is directly concatenated into SQL queries via f-strings without any validation or sanitization. Since SQL identifiers cannot be safely parameterized, an attacker who controls the table_prefix value (e.g., through from_yaml or from_dict configuration input) can inject arbitrary SQL fragments that alter query structure. This enables unauthorized data access, such as reading internal SQLite tables like sqlite_master, and manipulation of query results through techniques like UNION-based injection. The vulnerability propagates from configuration input in config.py, through factory.py, to the SQL query construction in sqlite.py. Exploitation requires the ability to influence configuration input, and successful exploitation leads to internal schema disclosure and full query result tampering. This issue has been fixed in version 4.5.133.

Apr 14, 2026
HIGH8.6
CVE-2026-40158
Praisonai

PraisonAI is a multi-agent teams system. Prior to 4.5.128, PraisonAI's AST-based Python sandbox can be bypassed using type.__getattribute__ trampoline, allowing arbitrary code execution when running untrusted agent code. The _execute_code_direct function in praisonaiagents/tools/python_tools.py uses AST filtering to block dangerous Python attributes like __subclasses__, __globals__, and __bases__. However, the filter only checks ast.Attribute nodes, allowing a bypass. The sandbox relies on AST-based filtering of attribute access but fails to account for dynamic attribute resolution via built-in methods such as type.getattribute, resulting in incomplete enforcement of security restrictions. The string '__subclasses__' is an ast.Constant, not an ast.Attribute, so it is never checked against the blocked list. This vulnerability is fixed in 4.5.128.

Apr 10, 2026
CRITICAL9.4
CVE-2026-40157
Praisonai

PraisonAI is a multi-agent teams system. Prior to 4.5.128, cmd_unpack in the recipe CLI extracts .praison tar archives using raw tar.extract() without validating archive member paths. A .praison bundle containing ../../ entries will write files outside the intended output directory. An attacker who distributes a malicious bundle can overwrite arbitrary files on the victim's filesystem when they run praisonai recipe unpack. This vulnerability is fixed in 4.5.128.

Apr 10, 2026
All Praison CVEs in 2026
Your next credential

Earn your free CTEM certification.

Learn to scope, prioritize, validate and mobilize fixes for CVEs like CVE-2026-39888 with a free CTEM certification.

Free to takePublicly verifiable

Beginner / Practitioner / Program Leader

Explore certifications