Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessInfluence agent prompt to emit dangerous tool call
-
DeliveryEmbed XSS payload in tool argument
-
ExploitApprover opens HTTPApproval dashboard URL
-
ExecutionInjected script auto-POSTs approve to /decide
-
ImpactGated dangerous tool runs with process privileges
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding, context-aware escaping
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Execution The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires the HTTPApproval (http) non-console approval backend to be configured and running (praisonai.bots.HTTPApproval) - this is not the documented default console backend. The attacker must be able to influence an agent task or prompt enough to make the agent emit a dangerous tool call (e.g. execute_command, execute_code, delete_file) whose argument carries the XSS payload. Exploitation only fires when a human approver opens the pending request's approval URL (UI:R) - the injected same-origin script derives the /approve/{request_id}/decide endpoint from location.pathname, so the unguessable request id does not stop it. Limiting factors: non-default http backend, dependence on attacker influence over agent inputs, and the requirement that an approver actually views the page; no dashboard authentication is required to deliver the payload. Fixed completely only by updating to 4.6.59 (the advisory also suggests html.escape on all untrusted values, avoiding inline JS, and a restrictive CSP). |
| Impact | The input CVSS of 8.8 (CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H) rates this High: network-reachable, low complexity, no authentication to the dashboard, but requiring user interaction (UI:R) in the form of a human approver opening the approval page. The multi-source signals paint a more conditional picture than the raw score suggests. Positive priority signals: the vuln.today Decision label is 'this_week', a vendor patch exists (4.6.59), and the GHSA advisory ships a working local proof-of-vulnerability. Tempering signals: this is NOT in CISA KEV (no confirmed active exploitation), and no EPSS score was supplied, so exploitation-probability cannot be quantified from this data. Critically, exploitation is gated by three stacked preconditions - the HTTPApproval (http) backend must be deployed (console is the documented default), an attacker must be able to steer an agent task/prompt into emitting a dangerous tool call carrying the XSS payload, and a human must actually open the approval URL. This is therefore a genuine human-in-the-loop-bypass priority for anyone running the http approval backend, but closer to a targeted/conditional issue than a mass-exploitable internet-facing RCE. No SSVC exploitation/automatable/technical-impact decision values were provided to corroborate the 'this_week' label. |
| Exploit ScenarioDerived | An attacker who can influence an agent's task or prompt causes the agent to emit a dangerous tool call (e.g. execute_command) whose argument embeds a short XSS payload. When a human approver opens the HTTPApproval dashboard URL to inspect the risky request, the injected script runs in the dashboard origin and auto-POSTs to /approve/{request_id}/decide, returning approved=True before the human clicks anything - bypassing the approval boundary. A local, non-executing proof-of-vulnerability is published in the GHSA advisory; given AV:N/AC:L, exploitation is low-complexity once the attacker controls a tool argument and an approver views the page. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 23, 2026
Cross-site scripting in the PraisonAI HTTPApproval dashboard lets an attacker-controlled tool argument run same-origin JavaScript that silently approves a pending dangerous tool call before the human reviewer clicks Approve or Deny, defeating the human-in-the-loop safety boundary. Only deployments using the non-console http approval backend (praisonai.bots.HTTPApproval) in versions 4.5.2 through 4.6.58 are exposed (4.5.0 and 4.5.1 do not ship this backend); the CVSS vector (PR:N/UI:R) means no dashboard authentication is needed, but an approver must open the pending request's approval URL for the payload to fire. The issue is fixed in 4.6.59; a public PoC reference exists (a local proof-of-value script in the GitHub advisory that stops at the approval decision and does not run the command), and it is not verified as working exploit code against deployed instances, with no KEV listing or confirmed active exploitation at time of analysis.
RemediationAI
Vendor-released patch: 4.6.59 - upgrade pip install --upgrade praisonai==4.6.59 (or later) per the GHSA-63v4-w882-g4x2 advisory, which is the only complete fix because the vulnerable f-string rendering is removed by HTML-escaping all untrusted values. Until upgrade is possible, stop using the http approval backend and switch to the documented default console backend, accepting that approvals then depend on an operator watching the local console rather than a browser URL; if the HTTP dashboard must stay, place it behind an authenticating reverse proxy restricted to trusted approver hosts (side effect: the injected script still runs in the dashboard origin for anyone who can reach the page, so this only narrows who can be attacked, it does not fix the sink). Do not treat the unguessable request id as a mitigation, since the injected script derives the decide endpoint from location.pathname of the page it is loaded in; operators who patch the code themselves should apply html.escape(str(value), quote=True) to tool_name, risk_level, agent_name and every argument key and value, drop the inline decide JavaScript and add a restrictive CSP, with the trade-off that a CSP may break the built-in Approve/Deny buttons unless they are refactored to external scripts.
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
CWE-79: the aiohttp-based HTTPApproval backend in src/praisonai/praisonai/bots/_http_approval.py builds its approval page in _build_html() using raw f-string interpolation, so tool argument keys and values (plus tool_name, risk_level and agent_name) are inserted into the HTML without escaping. Because the generated page also contains same-origin JavaScript that posts to /approve/{request_id}/decide, and _handle_decide() marks a pending request approved whenever the JSON body carries decision == "approve", an injected </code><script>...</script><code> sequence placed in a tool argument executes in the dashboard origin and derives the decision endpoint from location.pathname - the unguessable request id is therefore not a defense, since the script inherits it from the page it is running in. The affected surface is the HTTP approval dashboard that gates dangerous tools such as execute_command, execute_code and delete_file; the advisory explicitly distinguishes this sink from a previously published stored-XSS issue in src/praisonai/api.py involving missing nh3 sanitization. The advisory's suggested fix escapes every untrusted value with html.escape(..., quote=True) or an auto-escaping template, and further recommends avoiding inline JavaScript, adding a restrictive CSP, and requiring a decision token that lives outside attacker-controlled rendered fields.
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:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
Network-reachable dashboard, low complexity, no dashboard auth (PR:N), but a human approver must open the page (UI:R); auto-approving dangerous tools yields full C/I/A impact via subsequent tool execution.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
DescriptionCVE.org
PraisonAI is a multi-agent teams system. From version 4.5.2 to before version 4.6.59, praisonai.bots.HTTPApproval renders pending tool approval arguments directly into the approval dashboard HTML. An attacker-controlled tool argument can inject JavaScript into that page. When a human opens the approval URL to inspect the risky tool request, the script runs in the dashboard origin and can POST to the same request's /approve/{request_id}/decide endpoint, causing HTTPApproval to return approved=True. This issue has been patched in version 4.6.59.
Technical POC Analysis
CWE-79 (Improper Neutralization of Input During Web Page Generation).
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
A high-severity cross-site scripting vulnerability in PraisonAI's HTTPApproval dashboard could allow an attacker to silently bypass human approval controls for dangerous tool calls. This affects organizations using the affected versions (4.5.2 to 4.6.58), undermining the human-in-the-loop safety mechanism that is critical for AI governance and risk management. Leadership should prioritize patching to maintain oversight of automated actions and prevent potential misuse.
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
Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.
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-108880
GHSA-63v4-w882-g4x2
NVD
CVE.org
EPSS
Exploit-DB