<?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://db.gcve.eu</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>Tue, 20 Oct 2026 09:10:29 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-61427 — PraisonAI before 4.6.78 Authentication Bypass via HTTP-stream</title>
      <link>https://db.gcve.eu/vuln/cve-2026-61427</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; MervinPraison PraisonAI&lt;/p&gt;
&lt;p&gt;PraisonAI before 4.6.78 exposes the MCP HTTP-stream transport without authentication by default: the CLI --api-key option defaults to None, and the server only enforces Authorization/Bearer checks when an API key is configured. When an operator runs &amp;#39;praisonai mcp serve --transport http-stream&amp;#39; without an API key, an unauthenticated client (no Authorization header, and no Origin header, which is also permitted) can initialize a session, enumerate the available tools (tools/list), and invoke tools (tools/call). Additionally, the dispatcher forwards tool-call arguments to handlers without validating them against the advertised inputSchema. The server binds to 127.0.0.1 by default, so remote exploitation requires the operator to bind to a network-accessible address (e.g., --host 0.0.0.0).&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; MervinPraison PraisonAI&lt;/p&gt;
&lt;p&gt;PraisonAI before 4.6.78 exposes the MCP HTTP-stream transport without authentication by default: the CLI --api-key option defaults to None, and the server only enforces Authorization/Bearer checks when an API key is configured. When an operator runs &amp;#39;praisonai mcp serve --transport http-stream&amp;#39; without an API key, an unauthenticated client (no Authorization header, and no Origin header, which is also permitted) can initialize a session, enumerate the available tools (tools/list), and invoke tools (tools/call). Additionally, the dispatcher forwards tool-call arguments to handlers without validating them against the advertised inputSchema. The server binds to 127.0.0.1 by default, so remote exploitation requires the operator to bind to a network-accessible address (e.g., --host 0.0.0.0).&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/cve-2026-61427</guid>
    </item>
    <item>
      <title>PYSEC-2026-4257 — PraisonAI: MCP HTTP-stream transport is unauthenticated by default, exposing tool enumeration and an unvalidated tool-c…</title>
      <link>https://db.gcve.eu/vuln/pysec-2026-4257</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: praisonai&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;PraisonAI&amp;#39;s MCP HTTP-stream server authenticates requests only when an API key is configured; the CLI defaults `--api-key` to `None`, so `praisonai mcp serve --transport http-stream` exposes the full MCP surface unauthenticated. A request with no `Authorization` (and no `Origin`) can `initialize` and `tools/list` (~50 tools), and the dispatcher forwards tool-call arguments to handlers without validating them against the advertised `inputSchema`. Runtime-confirmed for unauthenticated `initialize`/`tools/list` and the dispatcher schema-bypass. This is **not** an RCE/file-read in 4.6.63 — `workflow.run`/`workflow.run_file` are runtime-refuted (adapter regression). Severity Medium–High.&lt;/p&gt;
&lt;p&gt;## Details&lt;/p&gt;
&lt;p&gt;### Affected component
- Package: `praisonai` 4.6.63. Files: `src/praisonai/praisonai/mcp_server/transports/http_stream.py`, `mcp_server/cli.py`, `mcp_server/server.py` (dispatcher).&lt;/p&gt;
&lt;p&gt;### Vulnerable code / root cause&lt;/p&gt;
&lt;p&gt;Path:
`src/praisonai/praisonai/mcp_server/transports/http_stream.py`&lt;/p&gt;
&lt;p&gt;Function:
`mcp_post` / `_validate_origin`&lt;/p&gt;
&lt;p&gt;Snippet:
```python
if self.api_key:                       # auth applied ONLY when api_key is set
    auth_header = request.headers.get(&amp;#34;Authorization&amp;#34;, &amp;#34;&amp;#34;)
    if not auth_header.startswith(&amp;#34;Bearer &amp;#34;) or auth_header[7:] != self.api_key:
        return JSONResponse({&amp;#34;error&amp;#34;: &amp;#34;Unauthorized&amp;#34;}, status_code=401)
# _validate_origin: returns True when the Origin header is absent
```
Issue: with `api_key=None`, no auth check runs; a missing `Origin` head…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: praisonai&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;PraisonAI&amp;#39;s MCP HTTP-stream server authenticates requests only when an API key is configured; the CLI defaults `--api-key` to `None`, so `praisonai mcp serve --transport http-stream` exposes the full MCP surface unauthenticated. A request with no `Authorization` (and no `Origin`) can `initialize` and `tools/list` (~50 tools), and the dispatcher forwards tool-call arguments to handlers without validating them against the advertised `inputSchema`. Runtime-confirmed for unauthenticated `initialize`/`tools/list` and the dispatcher schema-bypass. This is **not** an RCE/file-read in 4.6.63 — `workflow.run`/`workflow.run_file` are runtime-refuted (adapter regression). Severity Medium–High.&lt;/p&gt;
&lt;p&gt;## Details&lt;/p&gt;
&lt;p&gt;### Affected component
- Package: `praisonai` 4.6.63. Files: `src/praisonai/praisonai/mcp_server/transports/http_stream.py`, `mcp_server/cli.py`, `mcp_server/server.py` (dispatcher).&lt;/p&gt;
&lt;p&gt;### Vulnerable code / root cause&lt;/p&gt;
&lt;p&gt;Path:
`src/praisonai/praisonai/mcp_server/transports/http_stream.py`&lt;/p&gt;
&lt;p&gt;Function:
`mcp_post` / `_validate_origin`&lt;/p&gt;
&lt;p&gt;Snippet:
```python
if self.api_key:                       # auth applied ONLY when api_key is set
    auth_header = request.headers.get(&amp;#34;Authorization&amp;#34;, &amp;#34;&amp;#34;)
    if not auth_header.startswith(&amp;#34;Bearer &amp;#34;) or auth_header[7:] != self.api_key:
        return JSONResponse({&amp;#34;error&amp;#34;: &amp;#34;Unauthorized&amp;#34;}, status_code=401)
# _validate_origin: returns True when the Origin header is absent
```
Issue: with `api_key=None`, no auth check runs; a missing `Origin` head…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/pysec-2026-4257</guid>
    </item>
  </channel>
</rss>
