CVE-2026-47415: praisonai-platform: IDOR exposes cross-workspace tenant data
GHSA-xwq8-frcg-77q8 HIGH CISA: ATTENDpraisonai-platform before 0.1.4 contains an Insecure Direct Object Reference in its issue management API that allows any authenticated workspace member to read, modify, or delete issues belonging to entirely different tenants — the membership gate validates the attacker's own workspace but the underlying database lookup carries no workspace constraint, so substituting a victim's issue UUID in the request is sufficient to exfiltrate or tamper with it. The blast radius covers every multi-tenant PraisonAI deployment: issue records in AI agent platforms routinely contain confidential bug reports, customer PII, embedded credentials, and agent prompt content, and the 65 prior CVEs in this package signal a persistently underdeveloped security posture that warrants elevated scrutiny. No public exploit code exists and the CVE is not in CISA KEV, but the attack requires only trivial tooling — a valid JWT and a harvested UUID — with UUIDs leaking through activity feeds, comment threads, and exported dumps, placing exploitation well within reach of opportunistic actors. Patch to praisonai-platform 0.1.4 immediately, audit activity logs for cross-workspace issue access patterns, and note that the audit trail records events under the attacker's workspace rather than the victim's, making retrospective detection non-trivial without additional query-level logging.
What is the risk?
High risk in any multi-tenant deployment. Attack complexity is low, privileges required are minimal (any workspace member token), no user interaction is needed, and the vulnerability is remotely exploitable over the network. The write primitive is particularly dangerous: an attacker can not only exfiltrate issue content silently but also corrupt it (false closure, description wipe, project reassignment) and delete it entirely to destroy evidence. The asymmetry between the existing composite-key pattern in MemberService and the unconstrained single-key lookups across IssueService, AgentService, ProjectService, CommentService, and LabelService confirms this is a systemic authorization design gap rather than an isolated oversight. The 65 prior CVEs in the same package increase the probability that related IDOR variants exist in production deployments that have not yet received the 0.1.4 patch.
How does the attack unfold?
What systems are affected?
| Package | Ecosystem | Vulnerable Range | Patched |
|---|---|---|---|
| PraisonAI | pip | < 0.1.4 | 0.1.4 |
Do you use PraisonAI? You're affected.
How severe is it?
What is the attack surface?
What should I do?
5 steps-
Patch: upgrade praisonai-platform to 0.1.4 which adds workspace_id as a query predicate to IssueService.get(), .update(), and .delete().
-
Verify scope: the advisory flags the same IDOR pattern in AgentService, ProjectService, CommentService, and LabelService — confirm 0.1.4 addresses all five or apply the composite-key fix (workspace_id AND resource_id) manually to each service.
-
Detection: query activity logs for issue_id values accessed outside their originating workspace_id; given that tamper events are recorded under the attacker's workspace rather than the victim's, cross-reference by issue_id across workspace boundaries.
-
Workaround (if patching is delayed): restrict API access to trusted networks or add a middleware layer that validates the resource's workspace_id matches the URL path parameter before any service method is called.
-
Audit UUIDs: review whether issue UUIDs are exposed in activity feeds, exports, or error messages and consider scoping those outputs to workspace-specific views to reduce reconnaissance surface.
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-47415?
praisonai-platform before 0.1.4 contains an Insecure Direct Object Reference in its issue management API that allows any authenticated workspace member to read, modify, or delete issues belonging to entirely different tenants — the membership gate validates the attacker's own workspace but the underlying database lookup carries no workspace constraint, so substituting a victim's issue UUID in the request is sufficient to exfiltrate or tamper with it. The blast radius covers every multi-tenant PraisonAI deployment: issue records in AI agent platforms routinely contain confidential bug reports, customer PII, embedded credentials, and agent prompt content, and the 65 prior CVEs in this package signal a persistently underdeveloped security posture that warrants elevated scrutiny. No public exploit code exists and the CVE is not in CISA KEV, but the attack requires only trivial tooling — a valid JWT and a harvested UUID — with UUIDs leaking through activity feeds, comment threads, and exported dumps, placing exploitation well within reach of opportunistic actors. Patch to praisonai-platform 0.1.4 immediately, audit activity logs for cross-workspace issue access patterns, and note that the audit trail records events under the attacker's workspace rather than the victim's, making retrospective detection non-trivial without additional query-level logging.
Is CVE-2026-47415 actively exploited?
No confirmed active exploitation of CVE-2026-47415 has been reported, but organizations should still patch proactively.
How to fix CVE-2026-47415?
1. Patch: upgrade praisonai-platform to 0.1.4 which adds workspace_id as a query predicate to IssueService.get(), .update(), and .delete(). 2. Verify scope: the advisory flags the same IDOR pattern in AgentService, ProjectService, CommentService, and LabelService — confirm 0.1.4 addresses all five or apply the composite-key fix (workspace_id AND resource_id) manually to each service. 3. Detection: query activity logs for issue_id values accessed outside their originating workspace_id; given that tamper events are recorded under the attacker's workspace rather than the victim's, cross-reference by issue_id across workspace boundaries. 4. Workaround (if patching is delayed): restrict API access to trusted networks or add a middleware layer that validates the resource's workspace_id matches the URL path parameter before any service method is called. 5. Audit UUIDs: review whether issue UUIDs are exposed in activity feeds, exports, or error messages and consider scoping those outputs to workspace-specific views to reduce reconnaissance surface.
What systems are affected by CVE-2026-47415?
This vulnerability affects the following AI/ML architecture patterns: agent frameworks, multi-tenant AI platforms, AI task and issue management systems.
What is the CVSS score for CVE-2026-47415?
CVE-2026-47415 has a CVSS v3.1 base score of 8.3 (HIGH). The EPSS exploitation probability is 0.28%.
What is the AI security impact?
Affected AI Architectures
MITRE ATLAS Techniques
AML.T0012 Valid Accounts AML.T0025 Exfiltration via Cyber Means AML.T0036 Data from Information Repositories AML.T0049 Exploit Public-Facing Application AML.T0085 Data from AI Services Compliance Controls Affected
What are the technical details?
Original Advisory
PraisonAI Platform is the platform layer for the PraisonAI multi-agent teams system. Versions prior to 0.1.4 have an Insecure Direct Object Reference. The issue CRUD endpoints (`GET / PATCH / DELETE /workspaces/{workspace_id}/issues/{issue_id}`) gate access on `require_workspace_member(workspace_id)` only, then resolve `issue_id` through `IssueService.get(issue_id)` which is a primary-key lookup with no workspace constraint. A user who is a member of any workspace `W1` can read, modify, or delete issues that belong to a different workspace `W2`. PraisonAI Platform version 0.1.4 patches the issue.
Exploitation Scenario
An attacker operating a threat intelligence or red team engagement against a company using PraisonAI's hosted multi-tenant platform creates a free-tier account and becomes a member of their own workspace (W_attacker). They monitor the platform's activity feed and comment threads within W_attacker, where issue UUIDs from cross-workspace notification events occasionally surface — or they obtain a UUID via an exported issue dump from a shared project they were briefly invited to. Armed with a valid JWT and one victim issue UUID, they send GET /workspaces/W_attacker/issues/{victim_uuid} with their bearer token. The membership check passes for W_attacker, and IssueService.get() performs an unconstrained SELECT returning the full issue row from the victim workspace — including title, description, embedded credentials, assignee identity, and project linkage. They follow with PATCH requests to overwrite the issue's description and close it (suppressing security escalation), then DELETE to eliminate the record entirely. Throughout the attack, the audit trail records all events under W_attacker, leaving the victim workspace's incident log clean.
Weaknesses (CWE)
CWE-639 Authorization Bypass Through User-Controlled Key
Primary
CWE-639 Authorization Bypass Through User-Controlled Key CWE-639 Authorization Bypass Through User-Controlled Key CWE-639 — Authorization Bypass Through User-Controlled Key: The system's authorization functionality does not prevent one user from gaining access to another user's data or record by modifying the key value identifying the data.
- [Architecture and Design] For each and every data access, ensure that the user has sufficient privilege to access the record that is being requested.
- [Architecture and Design, Implementation] Make sure that the key that is used in the lookup of a specific user's record is not controllable externally by the user or that any tampering can be detected.
Source: MITRE CWE corpus.
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:L References
Timeline
Related Vulnerabilities
CVE-2026-61447 10.0 PraisonAI: RCE via unsandboxed LLM code execution
Same package: praisonai CVE-2026-61445 9.9 PraisonAI: AICoder root RCE via unsanitized tool calls
Same package: praisonai CVE-2026-47392 9.9 praisonaiagents: RCE via Python sandbox bypass
Same package: praisonai GHSA-vmmj-pfw7-fjwp 9.9 praisonai: sandbox escape gives RCE via codeMode tool
Same package: praisonai GHSA-vc46-vw85-3wvm 9.8 PraisonAI: RCE via malicious workflow YAML execution
Same package: praisonai