<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://vulnerability.circl.lu</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Mon, 05 Oct 2026 10:07:39 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-47399 — PraisonAI Platform workspace-scoped routes allow cross-workspace object access by global object ID</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-47399</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; MervinPraison praisonai-platform&lt;/p&gt;
&lt;p&gt;PraisonAI Platform is the platform layer for the PraisonAI multi-agent teams system. Prior to version 0.1.4, the workspace-scoped REST routes contain a systemic object-level authorization flaw that allows an authenticated user from one workspace to access, modify, and delete objects belonging to another workspace by supplying the victim object&amp;#39;s global UUID. The affected pattern appears in workspace-scoped routes such as agents, projects, issues, and comments. The route layer verifies that the caller is a member of the `workspace_id` provided in the URL, but the service layer later resolves the target object by global object ID only. It does not verify that the resolved object actually belongs to the workspace in the URL. As a result, a valid member of `workspace_attacker` can call a route under `/api/v1/workspaces/{workspace_attacker}/...` while supplying an object UUID from `workspace_victim`. The server authorizes the request based on membership in `workspace_attacker`, then fetches or mutates the victim object by global UUID. This breaks the platform&amp;#39;s workspace isolation boundary. PraisonAI Platform version 0.1.4 patches the issue.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; MervinPraison praisonai-platform&lt;/p&gt;
&lt;p&gt;PraisonAI Platform is the platform layer for the PraisonAI multi-agent teams system. Prior to version 0.1.4, the workspace-scoped REST routes contain a systemic object-level authorization flaw that allows an authenticated user from one workspace to access, modify, and delete objects belonging to another workspace by supplying the victim object&amp;#39;s global UUID. The affected pattern appears in workspace-scoped routes such as agents, projects, issues, and comments. The route layer verifies that the caller is a member of the `workspace_id` provided in the URL, but the service layer later resolves the target object by global object ID only. It does not verify that the resolved object actually belongs to the workspace in the URL. As a result, a valid member of `workspace_attacker` can call a route under `/api/v1/workspaces/{workspace_attacker}/...` while supplying an object UUID from `workspace_victim`. The server authorizes the request based on membership in `workspace_attacker`, then fetches or mutates the victim object by global UUID. This breaks the platform&amp;#39;s workspace isolation boundary. PraisonAI Platform version 0.1.4 patches the issue.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-47399</guid>
    </item>
    <item>
      <title>GHSA-6h6v-6m7w-7vxx — PraisonAI Platform workspace-scoped routes allow cross-workspace object access by global object ID</title>
      <link>https://vulnerability.circl.lu/vuln/ghsa-6h6v-6m7w-7vxx</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: praisonai-platform&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;PraisonAI Platform&amp;#39;s workspace-scoped REST routes contain a systemic object-level authorization flaw that allows an authenticated user from one workspace to access, modify, and delete objects belonging to another workspace by supplying the victim object&amp;#39;s global UUID.&lt;/p&gt;
&lt;p&gt;The affected pattern appears in workspace-scoped routes such as agents, projects, issues, and comments. The route layer verifies that the caller is a member of the `workspace_id` provided in the URL, but the service layer later resolves the target object by global object ID only. It does not verify that the resolved object actually belongs to the workspace in the URL.&lt;/p&gt;
&lt;p&gt;As a result, a valid member of `workspace_attacker` can call a route under:&lt;/p&gt;
&lt;p&gt;```text
/api/v1/workspaces/{workspace_attacker}/...
```&lt;/p&gt;
&lt;p&gt;while supplying an object UUID from `workspace_victim`. The server authorizes the request based on membership in `workspace_attacker`, then fetches or mutates the victim object by global UUID.&lt;/p&gt;
&lt;p&gt;This breaks the platform&amp;#39;s workspace isolation boundary.&lt;/p&gt;
&lt;p&gt;### Details&lt;/p&gt;
&lt;p&gt;The root cause is that workspace membership authorization and object ownership validation are not bound together.&lt;/p&gt;
&lt;p&gt;The workspace dependency validates only that the caller is a member of the workspace named in the URL:&lt;/p&gt;
&lt;p&gt;```python
# praisonai_platform/api/deps.py
async def require_workspace_member(
    workspace_id: str,
    user: AuthIdentity = Depends(get_current_user),
    session: AsyncSession = Depends(get_db),
    min_role: str = &amp;#34;member…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: praisonai-platform&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;PraisonAI Platform&amp;#39;s workspace-scoped REST routes contain a systemic object-level authorization flaw that allows an authenticated user from one workspace to access, modify, and delete objects belonging to another workspace by supplying the victim object&amp;#39;s global UUID.&lt;/p&gt;
&lt;p&gt;The affected pattern appears in workspace-scoped routes such as agents, projects, issues, and comments. The route layer verifies that the caller is a member of the `workspace_id` provided in the URL, but the service layer later resolves the target object by global object ID only. It does not verify that the resolved object actually belongs to the workspace in the URL.&lt;/p&gt;
&lt;p&gt;As a result, a valid member of `workspace_attacker` can call a route under:&lt;/p&gt;
&lt;p&gt;```text
/api/v1/workspaces/{workspace_attacker}/...
```&lt;/p&gt;
&lt;p&gt;while supplying an object UUID from `workspace_victim`. The server authorizes the request based on membership in `workspace_attacker`, then fetches or mutates the victim object by global UUID.&lt;/p&gt;
&lt;p&gt;This breaks the platform&amp;#39;s workspace isolation boundary.&lt;/p&gt;
&lt;p&gt;### Details&lt;/p&gt;
&lt;p&gt;The root cause is that workspace membership authorization and object ownership validation are not bound together.&lt;/p&gt;
&lt;p&gt;The workspace dependency validates only that the caller is a member of the workspace named in the URL:&lt;/p&gt;
&lt;p&gt;```python
# praisonai_platform/api/deps.py
async def require_workspace_member(
    workspace_id: str,
    user: AuthIdentity = Depends(get_current_user),
    session: AsyncSession = Depends(get_db),
    min_role: str = &amp;#34;member…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/ghsa-6h6v-6m7w-7vxx</guid>
    </item>
  </channel>
</rss>
