CVE-2026-56840: PraisonAI: stored XSS in approval dashboard forces tool approval
HIGHPraisonAI's HTTPApproval dashboard renders pending tool-call arguments as raw HTML, so an attacker-controlled argument can inject JavaScript that runs when a human opens the approval page to review a risky request. That script can silently POST to the same request's decide endpoint and return approved=True, which defeats the human-in-the-loop control that is meant to gate dangerous agent actions. The CVSS is 8.8 with no privileges required and low complexity, but user interaction is required. No public exploit, Nuclei template or KEV listing exists and EPSS is not yet available, and the package has only 1 downstream dependent, so broad exposure looks limited. The package does have 187 other CVEs, which points to a weak security track record. Upgrade PraisonAI to 4.6.59 or later, and until then do not rely on HTTPApproval as a security boundary for high-impact tools.
What is the risk?
High severity (CVSS 8.8). Exploitation is network-based, low complexity, needs no privileges and needs one reviewer click on the approval URL. The main risk is bypass of the human approval control, which turns a gated tool request into an approved one. Likelihood is moderate: there is no known public exploit and no KEV listing, and EPSS is unavailable. Exposure is limited to deployments that use praisonai.bots.HTTPApproval between versions 4.5.2 and 4.6.58, and only when an attacker can influence tool arguments, for example through prompt injection or untrusted input. Confidence: MEDIUM, because it is based on the advisory text and there is no exploitation data.
How does the attack unfold?
What systems are affected?
| Package | Ecosystem | Vulnerable Range | Patched |
|---|---|---|---|
| PraisonAI | pip | — | No patch |
Do you use PraisonAI? You're affected.
How severe is it?
What is the attack surface?
What should I do?
1 step1) Upgrade PraisonAI to 4.6.59 or later. 2) Until patched, disable HTTPApproval for high-risk tools or move approvals to a channel that does not render arguments as HTML. 3) Serve the approval dashboard from an isolated origin and restrict access to it by network or VPN. 4) Add a strict Content-Security-Policy that blocks inline scripts on the dashboard. 5) Reduce agent tool privileges, with sandboxing and least-privilege credentials. 6) Detection: review approval logs for requests approved with unusually short latency, and for tool arguments containing HTML or script tags such as <script>, onerror= or javascript:. 7) Audit past approvals made since 4.5.2 for unexpected tool executions.
How is it classified?
Which compliance frameworks are affected?
This CVE is relevant to:
Frequently Asked Questions
What is CVE-2026-56840?
PraisonAI's HTTPApproval dashboard renders pending tool-call arguments as raw HTML, so an attacker-controlled argument can inject JavaScript that runs when a human opens the approval page to review a risky request. That script can silently POST to the same request's decide endpoint and return approved=True, which defeats the human-in-the-loop control that is meant to gate dangerous agent actions. The CVSS is 8.8 with no privileges required and low complexity, but user interaction is required. No public exploit, Nuclei template or KEV listing exists and EPSS is not yet available, and the package has only 1 downstream dependent, so broad exposure looks limited. The package does have 187 other CVEs, which points to a weak security track record. Upgrade PraisonAI to 4.6.59 or later, and until then do not rely on HTTPApproval as a security boundary for high-impact tools.
Is CVE-2026-56840 actively exploited?
No confirmed active exploitation of CVE-2026-56840 has been reported, but organizations should still patch proactively.
How to fix CVE-2026-56840?
1) Upgrade PraisonAI to 4.6.59 or later. 2) Until patched, disable HTTPApproval for high-risk tools or move approvals to a channel that does not render arguments as HTML. 3) Serve the approval dashboard from an isolated origin and restrict access to it by network or VPN. 4) Add a strict Content-Security-Policy that blocks inline scripts on the dashboard. 5) Reduce agent tool privileges, with sandboxing and least-privilege credentials. 6) Detection: review approval logs for requests approved with unusually short latency, and for tool arguments containing HTML or script tags such as <script>, onerror= or javascript:. 7) Audit past approvals made since 4.5.2 for unexpected tool executions.
What systems are affected by CVE-2026-56840?
This vulnerability affects the following AI/ML architecture patterns: agent frameworks, human-in-the-loop approval workflows, multi-agent systems, tool-calling agents.
What is the CVSS score for CVE-2026-56840?
CVE-2026-56840 has a CVSS v3.1 base score of 8.8 (HIGH). The EPSS exploitation probability is 0.38%.
What is the AI security impact?
Affected AI Architectures
MITRE ATLAS Techniques
AML.T0011.003Malicious LinkAML.T0051LLM Prompt InjectionAML.T0053AI Agent Tool InvocationAML.T0093Prompt Infiltration via Public-Facing ApplicationCompliance Controls Affected
What are the technical details?
Original Advisory
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.
Exploitation Scenario
An attacker supplies content, for example a poisoned document or web page or a crafted user message, that makes a PraisonAI agent request a tool call. The call's arguments contain an HTML/JavaScript payload. The agent pauses and raises an approval request, and a security reviewer opens the approval URL to inspect it. The dashboard renders the argument unescaped, the script executes in the dashboard origin and POSTs to /approve/{request_id}/decide to set approved=True. The agent then runs the risky tool, for example exfiltrating data or running commands, before the reviewer decides anything.
Weaknesses (CWE)
CWE-79Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')PrimaryCWE-79Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')CWE-79 — Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting'): The product does not neutralize or incorrectly neutralizes user-controllable input before it is placed in output that is used as a web page that is served to other users.
- [Architecture and Design] Use a vetted library or framework that does not allow this weakness to occur or provides constructs that make this weakness easier to avoid [REF-1482]. Examples of libraries and frameworks that make it easier to generate properly encoded output include Microsoft's Anti-XSS library, the OWASP ESAPI Encoding module, and Apache Wicket.
- [Implementation, Architecture and Design] Understand the context in which your data will be used and the encoding that will be expected. This is especially important when transmitting data between different components, or when generating outputs that can contain multiple encodings at the same time, such as web pages or multi-part mail messages. Study all expected communication protocols and data representations to determine the required encoding strategies. For any data that will be output to another web page, especially any data that was received from external inputs, use the appropriate encoding on all non-alphanumeric characters. Parts of the same output document may require different encodings, which will vary depending on whether the output is in the: etc. Note that HTML Entity Encoding is only appropriate for the HTML body. Consult the XSS Prevention Cheat Sheet [REF-724] for more details on the types of encoding and escaping that are needed. HTML body Element attributes (such as src="XYZ") URIs JavaScript sections Casca
Source: MITRE CWE corpus.
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:HReferences
- github.com/MervinPraison/PraisonAI/security/advisories/GHSA-63v4-w882-g4x2x_refsource_CONFIRM
Timeline
Related Vulnerabilities
CVE-2026-4816810.0PraisonAI: shell injection in Claude Action enables RCE
Same package: praisonaiCVE-2026-6144710.0PraisonAI: RCE via unsandboxed LLM code execution
Same package: praisonaiCVE-2026-614459.9PraisonAI: AICoder root RCE via unsanitized tool calls
Same package: praisonaiGHSA-vmmj-pfw7-fjwp9.9praisonai: sandbox escape gives RCE via codeMode tool
Same package: praisonaiCVE-2026-473929.9praisonaiagents: RCE via Python sandbox bypass
Same package: praisonai