Severity by source
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
UI is network-reachable HTTP with low complexity; requires an authenticated UI account (PR:L); no user interaction; full RCE on host yields high C/I/A with unchanged scope.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
3DescriptionCVE.org
PraisonAI before 4.5.128 contains an arbitrary shell command execution vulnerability where the UI modules hardcode approval_mode to auto, overriding administrator configuration from PRAISON_APPROVAL_MODE environment variable. Authenticated attackers can instruct the LLM agent to execute arbitrary shell commands via subprocess.run with shell=True, bypassing the manual approval gate and insufficient command sanitization blocklists.
AnalysisAI
Arbitrary shell command execution in PraisonAI before 4.5.128 allows authenticated UI users to bypass the human-in-the-loop approval gate because the Chainlit chat and code UI modules hardcode approval_mode='auto' after loading administrator config from PRAISON_APPROVAL_MODE. Once auto-approved, prompts to the LLM agent reach subprocess.run with shell=True, and the existing blocklists only filter command chaining operators - leaving single destructive commands (rm -rf, curl, dd, chmod) executable. No public exploit identified at time of analysis beyond the vendor PoC; not currently listed in CISA KEV.
Technical ContextAI
PraisonAI is an open-source multi-agent LLM framework (PyPI package 'praisonai') that exposes a Chainlit-based web UI for chat and code agents. Its Agent Command Protocol (ACP) tool layer includes an approval orchestrator with three documented modes - auto, manual, scoped - read by ToolConfig.from_env() in interactive_tools.py. The flaw is rooted in CWE-863 (Incorrect Authorization): in chat.py:156-159 and code.py:155-158 the loaded config object is mutated with config.approval_mode='auto', so acp_execute_command in agent_tools.py:347 always evaluates auto_approve=True and the action_orchestrator calls subprocess.run(step.target, shell=True, cwd=workspace, timeout=30). Two sanitizers (_sanitize_command and _apply_step) block shell metacharacters ($, `, &&, ||, >, |, ;, &, newlines) but not single binary invocations, so any one-process destructive command passes.
RemediationAI
Vendor-released patch: upgrade praisonai to 4.5.128 or later (pip install --upgrade praisonai), which restores honoring of the PRAISON_APPROVAL_MODE environment variable in the Chainlit UI modules; see GHSA-qwgj-rrpj-75xm. If immediate upgrade is not possible, compensating controls are: stop running 'praisonai ui chat' and 'praisonai ui code' (the CLI/SDK invocation paths are not in scope of this advisory), change default UI credentials and place the UI behind an authenticating reverse proxy or VPN to shrink the authenticated-attacker population, and as an in-place hotfix delete the 'config.approval_mode = "auto"' line in chat.py:158 and code.py:157 so PRAISON_APPROVAL_MODE=manual or scoped is actually enforced - side effect is that every ACP shell action will now prompt, which is the intended behavior but disruptive for automation flows that depended on silent auto-approve. Do not rely on the existing _sanitize_command/_apply_step blocklists as a control; they do not block single-command destructive binaries.
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
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
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
Same weakness CWE-863 – Incorrect Authorization
View allSame technique Authentication Bypass
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-37959
GHSA-gx4r-3wg8-9w5x