Skip to main content

Python CVE-2026-39305

CRITICAL
Path Traversal (CWE-22)
2026-04-06 https://github.com/MervinPraison/PraisonAI GHSA-jfxc-v5g9-38xr
9.0
CVSS 3.1 · GitHub Advisory
Share

Severity by source

GitHub Advisory PRIMARY
9.0 CRITICAL
AV:L/AC:L/PR:N/UI:N/S:C/C:N/I:H/A:H

Primary rating from GitHub Advisory · only source for this CVE.

CVSS VectorGitHub Advisory

CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:C/C:N/I:H/A:H
Attack Vector
Local
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Changed
Confidentiality
None
Integrity
High
Availability
High

Lifecycle Timeline

5
Analysis Updated
Apr 16, 2026 - 01:58 vuln.today
v2 (cvss_changed)
Re-analysis Queued
Apr 16, 2026 - 01:47 vuln.today
cvss_changed
Patch released
Apr 07, 2026 - 02:30 nvd
Patch available
Analysis Generated
Apr 06, 2026 - 23:31 vuln.today
CVE Published
Apr 06, 2026 - 23:09 nvd
CRITICAL 9.0

DescriptionGitHub Advisory

The Action Orchestrator feature contains a Path Traversal vulnerability that allows an attacker (or compromised agent) to write to arbitrary files outside of the configured workspace directory. By supplying relative path segments (../) in the target path, malicious actions can overwrite sensitive system files or drop executable payloads on the host.

Details

Location: src/praisonai/praisonai/cli/features/action_orchestrator.py (Lines 402, 409, 423)

Vulnerable Code snippet:

python
target = workspace / step.target

In the _apply_step method, paths are constructed by concatenating the workspace path with a user-supplied step.target string: target = workspace / step.target. The code fails to resolve and validate that the final absolute path remains within the bounds of the workspace directory. When processing FILE_CREATE or FILE_EDIT actions, this flaw permits arbitrary file modification.

PoC

Construct a malicious ActionStep payload with path traversal characters:

python
from praisonai.cli.features.action_orchestrator import ActionStep, ActionType, ActionStatus
# Payload targeting a file outside the workspace
step = ActionStep(
    id="test_traversal",
    action_type=ActionType.FILE_CREATE,
    description="Malicious file write",
    target="../../../../../../../tmp/orchestrator_pwned.txt",
    params={"content": "pwned"},
    status=ActionStatus.APPROVED
)
# When the orchestrator applies this step, it writes to the traversed path
# _apply_step(step)

Impact

This is an Arbitrary File Write vulnerability. Anyone running the Action Orchestrator to apply modifications is vulnerable. A malicious prompt could trick the agent into generating a plan that overwrites critical files (e.g., ~/.ssh/authorized_keys, .bashrc) leading to Remote Code Execution (RCE) or system corruption.

AnalysisAI

Arbitrary file write via path traversal in PraisonAI's Action Orchestrator allows compromised agents to overwrite critical system files and achieve remote code execution. The vulnerability affects the praisonai pip package, where unsanitized user input in file operation targets enables directory traversal attacks using '../' sequences. Public exploit code exists with detailed proof-of-concept demonstrating overwrite of SSH keys and shell configuration files. Despite CVSS 9.0 (Critical), EPSS score is 2% (4th percentile), indicating low observed exploitation probability in the wild. Vendor patch released in version 4.5.113.

Technical ContextAI

The vulnerability exists in PraisonAI's Action Orchestrator component, a Python-based workflow automation feature that processes file system operations. The flaw manifests in the _apply_step method where Python's pathlib Path concatenation operator (/) is used without validation: 'target = workspace / step.target'. Python's Path class does not inherently prevent directory traversal when combining paths with user-controlled components. CWE-22 (Path Traversal) represents a classic input validation failure where relative path segments bypass intended directory restrictions. The vulnerable code affects FILE_CREATE and FILE_EDIT action types, which write content directly to the constructed path without checking if the resolved absolute path escapes the workspace boundary. This is a canonical example of insufficient path canonicalization - the code should use Path.resolve() to normalize the path and verify it starts with the workspace prefix before any file operations.

RemediationAI

Upgrade praisonai to version 4.5.113 or later via pip: 'pip install --upgrade praisonai>=4.5.113'. Vendor-released patch available at https://github.com/MervinPraison/PraisonAI/releases/tag/v4.5.113 addresses the path validation flaw. If immediate patching is not feasible, implement strict input validation by modifying _apply_step to resolve paths and verify containment: after 'target = workspace / step.target', add 'resolved_target = target.resolve()' and 'if not resolved_target.is_relative_to(workspace.resolve()): raise ValueError("Path traversal detected")'. This workaround prevents traversal but requires code modification (breaks vendor support). Alternative compensating control: restrict orchestrator execution to isolated containers with read-only root filesystem and explicit write permissions only to /tmp or dedicated workspace volumes - limits blast radius to container scope but reduces functionality for legitimate file operations. Disable the Action Orchestrator feature entirely if not operationally required by avoiding imports from praisonai.cli.features.action_orchestrator module. For multi-tenant deployments, ensure each workspace runs under separate user accounts with restrictive umask and mandatory access controls to prevent cross-tenant file writes even if traversal succeeds.

More in Python

View all
CVE-2025-24016 CRITICAL POC
9.9 Feb 10

Wazuh SIEM platform versions 4.4.0 through 4.9.0 contain an unsafe deserialization vulnerability in the DistributedAPI t

CVE-2025-27520 CRITICAL POC
9.8 Apr 04

BentoML version 1.4.2 and earlier contains an unauthenticated remote code execution vulnerability through insecure deser

CVE-2025-2945 CRITICAL POC
9.9 Apr 03

pgAdmin 4 contains critical remote code execution vulnerabilities in the Query Tool download and Cloud Deployment endpoi

CVE-2013-5093 MEDIUM POC
6.8 Sep 27

The renderLocalView function in render/views.py in graphite-web in Graphite 0.9.5 through 0.9.10 uses the pickle Python

CVE-2025-32375 CRITICAL POC
9.8 Apr 09

BentoML is a Python library for building online serving systems optimized for AI apps and model inference. Rated critica

CVE-2014-0224 HIGH POC
7.4 Jun 05

OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph

CVE-2024-21644 HIGH POC
7.5 Jan 08

pyLoad download manager version prior to 0.5.0b3.dev77 exposes the Flask SECRET_KEY through an unauthenticated endpoint.

CVE-2017-9462 HIGH POC
8.8 Jun 06

In Mercurial before 4.1.3, "hg serve --stdio" allows remote authenticated users to launch the Python debugger, and conse

CVE-2026-39987 CRITICAL POC
9.3 Apr 08

Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/

CVE-2024-21645 MEDIUM POC
5.3 Jan 08

pyLoad is the free and open-source Download Manager written in pure Python. Rated medium severity (CVSS 5.3), this vulne

CVE-2026-33017 CRITICAL POC
9.3 Mar 17

Langflow (a visual LLM pipeline builder) contains a critical unauthenticated code execution vulnerability (CVE-2026-3301

CVE-2026-55255 HIGH POC
8.4 Jun 19

Cross-user flow execution in Langflow (< 1.9.1) lets any authenticated API-key holder run another user's flow by passing

Share

CVE-2026-39305 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy