<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <id>https://vulnerability.circl.lu/rss/recent/all/10</id>
  <title>Most recent entries from all</title>
  <updated>2026-10-06T10:57:23.069301+00:00</updated>
  <author>
    <name>Vulnerability-Lookup</name>
    <email>info@circl.lu</email>
  </author>
  <link href="https://vulnerability.circl.lu" rel="alternate"/>
  <generator uri="https://lkiesow.github.io/python-feedgen" version="1.0.0">python-feedgen</generator>
  <subtitle>Contains only the most 10 recent entries.</subtitle>
  <entry>
    <id>https://vulnerability.circl.lu/vuln/cve-2026-55529</id>
    <title>CVE-2026-55529 — PraisonAI: Origin validation bypass in MCP HTTP Stream transport allows browser-mediated unauthenticated tool execution…</title>
    <updated>2026-10-06T10:57:23.071767+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> MervinPraison PraisonAI</p>
<p>PraisonAI is a multi-agent teams system. Prior to praisonai 4.6.58, the MCP HTTP Stream _validate_origin method accepts request_origin.startswith(allowed), so the attacker-controlled localhost.evil.example HTTP origin matches the localhost allowlist. Without an API key, a malicious webpage can submit tools/call requests to the local MCP server and execute exposed tools. This issue is fixed in version 4.6.58.</p></div>
    </content>
    <link href="https://vulnerability.circl.lu/vuln/cve-2026-55529"/>
  </entry>
  <entry>
    <id>https://vulnerability.circl.lu/vuln/pysec-2026-3896</id>
    <title>PYSEC-2026-3896 — PraisonAI has an origin validation bypass in MCP HTTP Stream transport that allows browser-mediated unauthenticated too…</title>
    <updated>2026-10-06T10:57:23.071852+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> PyPI: praisonai</p>
<p>### Summary</p>
<p>PraisonAI's MCP HTTP Stream transport uses an unsafe prefix match when validating the `Origin` header. The default localhost allowlist includes origins such as `http://localhost`, and the validation accepts any origin that starts with an allowed value.</p>
<p>As a result, an attacker-controlled origin such as `http://localhost.evil.example` passes the localhost origin check.</p>
<p>When the MCP HTTP Stream server is started without an API key, which is the CLI default, this allows a malicious webpage to trigger unauthenticated MCP `tools/call` requests against a locally running PraisonAI MCP server.</p>
<p>This is best framed as a browser-mediated localhost attack / DNS-rebinding-style Origin validation bypass. The default server binds to `127.0.0.1`, so this is not a directly internet-facing unauthenticated API in the default configuration.</p>
<p>### Details</p>
<p>Relevant source locations:</p>
<p>- `src/praisonai/praisonai/mcp_server/cli.py`
- `src/praisonai/praisonai/mcp_server/transports/http_stream.py`
- `src/praisonai/praisonai/mcp_server/server.py`
- `src/praisonai/praisonai/mcp_server/adapters/__init__.py`
- `src/praisonai/praisonai/mcp_server/adapters/extended_capabilities.py`
- `src/praisonai/praisonai/mcp_server/adapters/cli_tools.py`
- `src/praisonai/praisonai/capabilities/files.py`</p>
<p>The MCP CLI defaults to HTTP host `127.0.0.1`, API key `None`, and allowed origins `None` unless explicitly configured:</p>
<p>```python
parser.add_argument("--host", default="127.0.0.1")
parser.add_argument("…</p></div>
    </content>
    <link href="https://vulnerability.circl.lu/vuln/pysec-2026-3896"/>
  </entry>
</feed>
