CVE-2026-55532: PraisonAI: Origin bypass CSRF enables prompt injection
GHSA-pvph-5j39-v8qcHIGHPoC AVAILABLECISA: TRACK*The PraisonAI MCP server's local HTTP-stream transport authenticates requests solely via an Origin header allowlist, and that check uses a naive prefix match (startswith) instead of exact-origin comparison, so any domain beginning with "localhost" (e.g. localhost.attacker.com) is accepted from a browser. Because the forged request can be sent as a CORS "simple request" with no preflight and no session token, a single drive-by visit to a malicious webpage lets an attacker blind-CSRF the victim's local agent runtime and invoke unauthenticated tools — most seriously, writing a rule file with activation "always" that the agent loads on every subsequent run, giving persistent prompt injection capable of instructing the agent to exfiltrate SSH keys and API credentials. This is rated high severity (CVSS 7.6) with confidentiality and integrity impact, though EPSS data is not yet available, it is not in CISA KEV, and no public exploit or Nuclei template exists — exploitation requires user interaction (visiting a page) but no direct network access, and the package shows only 1 tracked downstream dependent and a package risk score of 0/100, indicating limited current install-base visibility rather than low severity. Any team running PraisonAI's MCP server locally (developer machines, agentic CI runners) should patch to 4.6.58 immediately, and until then should not run `praisonai mcp serve --transport http-stream` without an explicit `--api-key`, should audit `~/.praison/rules` for unexpected files, and should treat browser-originated Origin headers as untrusted for any local agent tooling more broadly.
What is the risk?
High risk despite requiring user interaction: the attack is a classic drive-by (visit any webpage, no direct network access needed) against a service developers commonly leave running unauthenticated on localhost for convenience. The Origin allowlist logic looks correct at a glance (it does reject a plain http://attacker.com origin) which increases the chance it ships unnoticed in similar MCP/local-agent implementations. Exploitability is low-effort once known — a single unauthenticated HTTP POST with a crafted Origin header and text/plain body — and the demonstrated impact (persistent, always-on prompt injection into a developer's future agent invocations) is severe: it can lead to silent, ongoing credential and secret exfiltration. Mitigating factors are the current CVSS AC:L/UI:R combination, absence from CISA KEV, no observed in-the-wild exploitation, and no public scanner template, so this looks like an unweaponized-but-easily-weaponizable disclosure rather than an active campaign.
How does the attack unfold?
What systems are affected?
| Package | Ecosystem | Vulnerable Range | Patched |
|---|---|---|---|
| PraisonAI | pip | < 4.6.58 | 4.6.58 |
| PraisonAI Agents | pip | — | No patch |
How severe is it?
What is the attack surface?
What should I do?
1 stepPatch PraisonAI to 4.6.58 or later, which fixes the Origin validation logic. Until patched, do not run
praisonai mcp serve --transport http-streamwithout explicitly setting--api-key; prefer binding only to loopback and avoid leaving the server running while browsing untrusted sites. As defense in depth, treat the Origin allowlist fix pattern generally — replace anystartswith()/prefix-based origin checks with exact scheme+host+port comparison via a URL parser, reject browser "simple requests" (non-application/jsonContent-Type) at the JSON-RPC dispatcher, and require a session token or custom header that a cross-site request cannot set. For detection, audit~/.praison/rules(and analogous agent-runtime config/rules directories) for unexpected.md/.mdc/.txtfiles withactivation: always, and monitor for unauthenticated POSTs to local MCP ports with spoofedlocalhost*-prefixed Origin headers in proxy/host firewall logs.
What does CISA's SSVC say?
Source: CISA Vulnrichment (SSVC v2.0). Decision based on the CISA Coordinator decision tree.
How is it classified?
Which compliance frameworks are affected?
This CVE is relevant to:
Frequently Asked Questions
What is CVE-2026-55532?
The PraisonAI MCP server's local HTTP-stream transport authenticates requests solely via an Origin header allowlist, and that check uses a naive prefix match (startswith) instead of exact-origin comparison, so any domain beginning with "localhost" (e.g. localhost.attacker.com) is accepted from a browser. Because the forged request can be sent as a CORS "simple request" with no preflight and no session token, a single drive-by visit to a malicious webpage lets an attacker blind-CSRF the victim's local agent runtime and invoke unauthenticated tools — most seriously, writing a rule file with activation "always" that the agent loads on every subsequent run, giving persistent prompt injection capable of instructing the agent to exfiltrate SSH keys and API credentials. This is rated high severity (CVSS 7.6) with confidentiality and integrity impact, though EPSS data is not yet available, it is not in CISA KEV, and no public exploit or Nuclei template exists — exploitation requires user interaction (visiting a page) but no direct network access, and the package shows only 1 tracked downstream dependent and a package risk score of 0/100, indicating limited current install-base visibility rather than low severity. Any team running PraisonAI's MCP server locally (developer machines, agentic CI runners) should patch to 4.6.58 immediately, and until then should not run `praisonai mcp serve --transport http-stream` without an explicit `--api-key`, should audit `~/.praison/rules` for unexpected files, and should treat browser-originated Origin headers as untrusted for any local agent tooling more broadly.
Is CVE-2026-55532 actively exploited?
Proof-of-concept exploit code is publicly available for CVE-2026-55532, increasing the risk of exploitation.
How to fix CVE-2026-55532?
Patch PraisonAI to 4.6.58 or later, which fixes the Origin validation logic. Until patched, do not run `praisonai mcp serve --transport http-stream` without explicitly setting `--api-key`; prefer binding only to loopback and avoid leaving the server running while browsing untrusted sites. As defense in depth, treat the Origin allowlist fix pattern generally — replace any `startswith()`/prefix-based origin checks with exact scheme+host+port comparison via a URL parser, reject browser "simple requests" (non-`application/json` Content-Type) at the JSON-RPC dispatcher, and require a session token or custom header that a cross-site request cannot set. For detection, audit `~/.praison/rules` (and analogous agent-runtime config/rules directories) for unexpected `.md`/`.mdc`/`.txt` files with `activation: always`, and monitor for unauthenticated POSTs to local MCP ports with spoofed `localhost*`-prefixed Origin headers in proxy/host firewall logs.
What systems are affected by CVE-2026-55532?
This vulnerability affects the following AI/ML architecture patterns: agent frameworks, MCP servers / tool integrations, local developer agent runtimes.
What is the CVSS score for CVE-2026-55532?
CVE-2026-55532 has a CVSS v3.1 base score of 7.6 (HIGH). The EPSS exploitation probability is 0.20%.
What is the AI security impact?
Affected AI Architectures
MITRE ATLAS Techniques
AML.T0051.001IndirectAML.T0053AI Agent Tool InvocationAML.T0078Drive-by CompromiseAML.T0080.000MemoryAML.T0081Modify AI Agent ConfigurationCompliance Controls Affected
What are the technical details?
Original Advisory
PraisonAI is a multi-agent teams system. Prior to praisonai 4.6.58, MCP HTTP Stream _validate_origin uses request_origin.startswith(allowed), allowing the attacker-controlled localhost.attacker.com HTTP origin to satisfy the localhost allowlist. A webpage can send Content-Type: text/plain requests without preflight and invoke tools/call without an API key, including file writes that persist agent instructions. This issue is fixed in version 4.6.58.
Exploitation Scenario
A developer starts `praisonai mcp serve --transport http-stream --host 127.0.0.1 --port 8080` for local agent development, with no API key configured. Later that day they browse to an unrelated site that is actually attacker-controlled and hosted at `http://localhost.attacker.com` (a domain the attacker registered specifically to pass the prefix-match Origin check). The page's JavaScript silently fires a `fetch()` POST to `http://127.0.0.1:8080/mcp` with `Content-Type: text/plain` (avoiding CORS preflight) and a JSON-RPC body invoking `praisonai.rules.create`, writing `~/.praison/rules/evil.md` with instructions to append SSH keys and API tokens to the agent's output. The developer never sees this happen — the response isn't readable cross-origin. The next time they invoke their PraisonAI agent for any task, `RulesManager` loads `evil.md` with "always" activation, and the injected instruction silently exfiltrates their credentials in the agent's output or via a subsequent tool call, repeating on every future agent run until the file is discovered and removed.
Weaknesses (CWE)
CWE-346Origin Validation ErrorPrimaryCWE-352Cross-Site Request Forgery (CSRF)PrimaryCWE-346Origin Validation ErrorCWE-346Origin Validation ErrorCWE-352Cross-Site Request Forgery (CSRF)CWE-352Cross-Site Request Forgery (CSRF)CWE-346 — Origin Validation Error: The product does not properly verify that the source of data or communication is valid.
Source: MITRE CWE corpus.
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:H/A:LReferences
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