Every CVE Search/ Get API key

CVE-2026-57112

PraisonAI ToolsMCPServer legacy SSE transport accepts attacker Host/Origin and exposes registered tools

8.3 HighFix available

PraisonAI is a multi-agent teams system. From praisonaiagents 0.6.0 until 1.6.59 and PraisonAI 3.10.0 until 4.6.59, ToolsMCPServer.run_sse() in src/praisonai-agents/praisonaiagents/mcp/mcp_server.py mounts SseServerTransport on the legacy /sse and /messages/ endpoints without default Host, Origin, or authentication enforcement. A malicious website can use DNS rebinding against a reachable local or internal SSE server, supply attacker-controlled Host and Origin headers, enumerate registered tools, and invoke them with the server user's privileges. The Streamable HTTP transport rejects the same hostile Origin, which isolates the flaw to the legacy SSE wrapper. An initial remediation was released in praisonaiagents 1.6.59 and PraisonAI 4.6.59.

Attack profile

How easy it is to exploit

Attack vector
Network
Complexity
High
Privileges needed
None
User interaction
Required

What an attacker can affect

Confidentiality
High
Integrity
High
Availability
High

Exploit likelihood

0.22%Unchanged since Sep 15, 2026
90%50%10%1%

What each source reports

CVE List Score used 8.3

PraisonAI ToolsMCPServer legacy SSE transport accepts attacker Host/Origin and exposes registered tools

PraisonAI is a multi-agent teams system. From praisonaiagents 0.6.0 until 1.6.59 and PraisonAI 3.10.0 until 4.6.59, ToolsMCPServer.run_sse() in src/praisonai-agents/praisonaiagents/mcp/mcp_server.py mounts SseServerTransport on the legacy /sse and /messages/ endpoints without default Host, Origin, or authentication enforcement. A malicious website can use DNS rebinding against a reachable local or internal SSE server, supply attacker-controlled Host and Origin headers, enumerate registered tools, and invoke them with the server user's privileges. The Streamable HTTP transport rejects the same hostile Origin, which isolates the flaw to the legacy SSE wrapper. An initial remediation was released in praisonaiagents 1.6.59 and PraisonAI 4.6.59.

Record
CVE-2026-57112
CVSS 3.1
8.3 HighCVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:H/I:H/A:H
Weakness
CWE-306, CWE-346, CWE-862
Updated
2026-11-02
EUVDEUVD-2026-78424 8.3

PraisonAI is a multi-agent teams system. From praisonaiagents 0.6.0 until 1.6.59 and PraisonAI 3.10.0 until 4.6.59, ToolsMCPServer.run_sse() in src/praisonai-agents/praisonaiagents/mcp/mcp_server.py mounts SseServerTransport on the legacy /sse and /messages/ endpoints without default Host, Origin, or authentication enforcement. A malicious website can use DNS rebinding against a reachable local or internal SSE server, supply attacker-controlled Host and Origin headers, enumerate registered tools, and invoke them with the server user's privileges. The Streamable HTTP transport rejects the same hostile Origin, which isolates the flaw to the legacy SSE wrapper. An initial remediation was released in praisonaiagents 1.6.59 and PraisonAI 4.6.59.

Record
EUVD-2026-78424
CVSS 3.1
8.3 HighCVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:H/I:H/A:H
Updated
2026-11-02
GitHub AdvisoriesGHSA-vmf9-xx9w-86wx 8.3

PraisonAI ToolsMCPServer legacy SSE transport accepts attacker Host/Origin and exposes registered tools

PraisonAI ToolsMCPServer legacy SSE transport accepts attacker Host/Origin and exposes registered tools

Summary

praisonaiagents.mcp.ToolsMCPServer.run_sse() builds a Starlette MCP HTTP+SSE server around mcp.server.sse.SseServerTransport. The server exposes /sse and /messages/, but it does not validate Origin, does not validate Host, and does not require any authentication.

This is reachable through supported PraisonAI code paths that wrap configured MCP server tools and re-expose them over legacy SSE:

  • praisonai mcp run <name> --transport sse
  • praisonai serve mcp --name <name> --transport sse
  • direct use of ToolsMCPServer(...).run_sse(...) or launch_tools_mcp_server(..., transport="sse")

A malicious website can use DNS rebinding against a local or internal PraisonAI SSE MCP server and send requests with attacker-controlled Host and Origin headers. The local PoV binds only to 127.0.0.1, sends an attacker Host and Origin, lists the registered tool, and invokes it successfully.

The same attacker Origin is rejected by PraisonAI's current Streamable HTTP transport with HTTP 403. The vulnerability is therefore a sibling transport guard gap in the legacy SSE wrapper, not intended behavior.

Affected product

  • Repository: MervinPraison/PraisonAI
  • Packages:
    • praisonaiagents
    • praisonai
  • Primary component: src/praisonai-agents/praisonaiagents/mcp/mcp_server.py
  • CLI wrappers:
    • src/praisonai/praisonai/cli/commands/mcp.py
    • src/praisonai/praisonai/cli/commands/serve.py
  • Latest verified release/current head:
    • praisonaiagents 1.6.58
    • PraisonAI 4.6.58
    • repo head 1ad58ca02975ff1398efeda694ea2ab78f20cf3e

Suggested affected ranges:

  • praisonaiagents >= 0.6.0, <= 1.6.58
  • praisonai >= 3.10.0, <= 4.6.58

No fixed version is known at submission time.

Confirmed source sweep:

v3.0.0   ToolsMCPServer.run_sse helper present, no Origin/Host/auth checks
v3.10.0  praisonai mcp run --transport sse wraps configured tools into helper
v3.12.3  praisonai serve mcp --name --transport sse wraps configured tools
v4.0.0   same vulnerable helper and CLI wrapping paths
v4.4.12  same vulnerable helper and CLI wrapping paths
v4.5.0   same vulnerable helper and CLI wrapping paths
v4.5.56  same vulnerable helper and CLI wrapping paths
v4.5.139 same vulnerable helper and CLI wrapping paths
v4.6.57  same vulnerable helper and CLI wrapping paths
v4.6.58  same vulnerable helper and dynamic PoV succeeds

Impact

If a PraisonAI user starts a local or internal legacy SSE MCP server with registered tools, an attacker who gets that user to visit a malicious website can use DNS rebinding to interact with the SSE server through the browser. The attacker can discover exposed tools and invoke them as the local user.

Impact depends on the configured tools. In realistic PraisonAI MCP deployments, registered tools may access local files, repositories, issue trackers, cloud APIs, internal services, or other automation targets. This can lead to confidentiality, integrity, and availability impact for the resources reachable by the exposed tools.

The PoV is local-only and harmless. It exposes one marker tool that writes a canary string to a temporary directory.

Root cause

Current ToolsMCPServer.run_sse() constructs a Starlette app directly:

sse_path = "/sse"
messages_path = "/messages/"
sse_transport = SseServerTransport(messages_path)

async def handle_sse(request: Request):
    async with sse_transport.connect_sse(
        request.scope, request.receive, request._send
    ) as (read_stream, write_stream):
        await mcp._mcp_server.run(
            read_stream,
            write_stream,
            mcp._mcp_server.create_initialization_options()
        )

app = Starlette(
    debug=self._debug,
    routes=[
        Route(sse_path, endpoint=handle_sse),
        Mount(messages_path, app=sse_transport.handle_post_message),
    ]
)

uvicorn.run(app,…
Record
GHSA-vmf9-xx9w-86wx
CVSS 3.1
8.3 HighCVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:H/I:H/A:H
Weakness
CWE-306, CWE-346, CWE-862
Updated
2026-11-02
NVD 8.3

PraisonAI is a multi-agent teams system. From praisonaiagents 0.6.0 until 1.6.59 and PraisonAI 3.10.0 until 4.6.59, ToolsMCPServer.run_sse() in src/praisonai-agents/praisonaiagents/mcp/mcp_server.py mounts SseServerTransport on the legacy /sse and /messages/ endpoints without default Host, Origin, or authentication enforcement. A malicious website can use DNS rebinding against a reachable local or internal SSE server, supply attacker-controlled Host and Origin headers, enumerate registered tools, and invoke them with the server user's privileges. The Streamable HTTP transport rejects the same hostile Origin, which isolates the flaw to the legacy SSE wrapper. An initial remediation was released in praisonaiagents 1.6.59 and PraisonAI 4.6.59.

Record
CVE-2026-57112
CVSS 3.1
8.3 HighCVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:H/I:H/A:H
Weakness
CWE-306, CWE-346, CWE-862
Updated
2026-11-02
OSV 8.3

PraisonAI ToolsMCPServer legacy SSE transport accepts attacker Host/Origin and exposes registered tools

PraisonAI is a multi-agent teams system. From praisonaiagents 0.6.0 until 1.6.59 and PraisonAI 3.10.0 until 4.6.59, ToolsMCPServer.run_sse() in src/praisonai-agents/praisonaiagents/mcp/mcp_server.py mounts SseServerTransport on the legacy /sse and /messages/ endpoints without default Host, Origin, or authentication enforcement. A malicious website can use DNS rebinding against a reachable local or internal SSE server, supply attacker-controlled Host and Origin headers, enumerate registered tools, and invoke them with the server user's privileges. The Streamable HTTP transport rejects the same hostile Origin, which isolates the flaw to the legacy SSE wrapper. An initial remediation was released in praisonaiagents 1.6.59 and PraisonAI 4.6.59.

Record
CVE-2026-57112
CVSS 3.1
8.3 HighCVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:H/I:H/A:H
Weakness
CWE-306, CWE-346, CWE-862
Updated
2026-11-02
OSVGHSA-vmf9-xx9w-86wx 8.3

PraisonAI ToolsMCPServer legacy SSE transport accepts attacker Host/Origin and exposes registered tools

PraisonAI ToolsMCPServer legacy SSE transport accepts attacker Host/Origin and exposes registered tools

Summary

praisonaiagents.mcp.ToolsMCPServer.run_sse() builds a Starlette MCP HTTP+SSE server around mcp.server.sse.SseServerTransport. The server exposes /sse and /messages/, but it does not validate Origin, does not validate Host, and does not require any authentication.

This is reachable through supported PraisonAI code paths that wrap configured MCP server tools and re-expose them over legacy SSE:

  • praisonai mcp run <name> --transport sse
  • praisonai serve mcp --name <name> --transport sse
  • direct use of ToolsMCPServer(...).run_sse(...) or launch_tools_mcp_server(..., transport="sse")

A malicious website can use DNS rebinding against a local or internal PraisonAI SSE MCP server and send requests with attacker-controlled Host and Origin headers. The local PoV binds only to 127.0.0.1, sends an attacker Host and Origin, lists the registered tool, and invokes it successfully.

The same attacker Origin is rejected by PraisonAI's current Streamable HTTP transport with HTTP 403. The vulnerability is therefore a sibling transport guard gap in the legacy SSE wrapper, not intended behavior.

Affected product

  • Repository: MervinPraison/PraisonAI
  • Packages:
    • praisonaiagents
    • praisonai
  • Primary component: src/praisonai-agents/praisonaiagents/mcp/mcp_server.py
  • CLI wrappers:
    • src/praisonai/praisonai/cli/commands/mcp.py
    • src/praisonai/praisonai/cli/commands/serve.py
  • Latest verified release/current head:
    • praisonaiagents 1.6.58
    • PraisonAI 4.6.58
    • repo head 1ad58ca02975ff1398efeda694ea2ab78f20cf3e

Suggested affected ranges:

  • praisonaiagents >= 0.6.0, <= 1.6.58
  • praisonai >= 3.10.0, <= 4.6.58

No fixed version is known at submission time.

Confirmed source sweep:

v3.0.0   ToolsMCPServer.run_sse helper present, no Origin/Host/auth checks
v3.10.0  praisonai mcp run --transport sse wraps configured tools into helper
v3.12.3  praisonai serve mcp --name --transport sse wraps configured tools
v4.0.0   same vulnerable helper and CLI wrapping paths
v4.4.12  same vulnerable helper and CLI wrapping paths
v4.5.0   same vulnerable helper and CLI wrapping paths
v4.5.56  same vulnerable helper and CLI wrapping paths
v4.5.139 same vulnerable helper and CLI wrapping paths
v4.6.57  same vulnerable helper and CLI wrapping paths
v4.6.58  same vulnerable helper and dynamic PoV succeeds

Impact

If a PraisonAI user starts a local or internal legacy SSE MCP server with registered tools, an attacker who gets that user to visit a malicious website can use DNS rebinding to interact with the SSE server through the browser. The attacker can discover exposed tools and invoke them as the local user.

Impact depends on the configured tools. In realistic PraisonAI MCP deployments, registered tools may access local files, repositories, issue trackers, cloud APIs, internal services, or other automation targets. This can lead to confidentiality, integrity, and availability impact for the resources reachable by the exposed tools.

The PoV is local-only and harmless. It exposes one marker tool that writes a canary string to a temporary directory.

Root cause

Current ToolsMCPServer.run_sse() constructs a Starlette app directly:

sse_path = "/sse"
messages_path = "/messages/"
sse_transport = SseServerTransport(messages_path)

async def handle_sse(request: Request):
    async with sse_transport.connect_sse(
        request.scope, request.receive, request._send
    ) as (read_stream, write_stream):
        await mcp._mcp_server.run(
            read_stream,
            write_stream,
            mcp._mcp_server.create_initialization_options()
        )

app = Starlette(
    debug=self._debug,
    routes=[
        Route(sse_path, endpoint=handle_sse),
        Mount(messages_path, app=sse_transport.handle_post_message),
    ]
)

uvicorn.run(app,…
Record
GHSA-vmf9-xx9w-86wx
CVSS 3.1
8.3 HighCVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:H/I:H/A:H
Weakness
CWE-306, CWE-346, CWE-862
Updated
2026-11-02
OSVPYSEC-2026-3521 8.3

PraisonAI ToolsMCPServer legacy SSE transport accepts attacker Host/Origin and exposes registered tools

PraisonAI ToolsMCPServer legacy SSE transport accepts attacker Host/Origin and exposes registered tools

Summary

praisonaiagents.mcp.ToolsMCPServer.run_sse() builds a Starlette MCP HTTP+SSE server around mcp.server.sse.SseServerTransport. The server exposes /sse and /messages/, but it does not validate Origin, does not validate Host, and does not require any authentication.

This is reachable through supported PraisonAI code paths that wrap configured MCP server tools and re-expose them over legacy SSE:

  • praisonai mcp run <name> --transport sse
  • praisonai serve mcp --name <name> --transport sse
  • direct use of ToolsMCPServer(...).run_sse(...) or launch_tools_mcp_server(..., transport="sse")

A malicious website can use DNS rebinding against a local or internal PraisonAI SSE MCP server and send requests with attacker-controlled Host and Origin headers. The local PoV binds only to 127.0.0.1, sends an attacker Host and Origin, lists the registered tool, and invokes it successfully.

The same attacker Origin is rejected by PraisonAI's current Streamable HTTP transport with HTTP 403. The vulnerability is therefore a sibling transport guard gap in the legacy SSE wrapper, not intended behavior.

Affected product

  • Repository: MervinPraison/PraisonAI
  • Packages:
    • praisonaiagents
    • praisonai
  • Primary component: src/praisonai-agents/praisonaiagents/mcp/mcp_server.py
  • CLI wrappers:
    • src/praisonai/praisonai/cli/commands/mcp.py
    • src/praisonai/praisonai/cli/commands/serve.py
  • Latest verified release/current head:
    • praisonaiagents 1.6.58
    • PraisonAI 4.6.58
    • repo head 1ad58ca02975ff1398efeda694ea2ab78f20cf3e

Suggested affected ranges:

  • praisonaiagents >= 0.6.0, <= 1.6.58
  • praisonai >= 3.10.0, <= 4.6.58

No fixed version is known at submission time.

Confirmed source sweep:

v3.0.0   ToolsMCPServer.run_sse helper present, no Origin/Host/auth checks
v3.10.0  praisonai mcp run --transport sse wraps configured tools into helper
v3.12.3  praisonai serve mcp --name --transport sse wraps configured tools
v4.0.0   same vulnerable helper and CLI wrapping paths
v4.4.12  same vulnerable helper and CLI wrapping paths
v4.5.0   same vulnerable helper and CLI wrapping paths
v4.5.56  same vulnerable helper and CLI wrapping paths
v4.5.139 same vulnerable helper and CLI wrapping paths
v4.6.57  same vulnerable helper and CLI wrapping paths
v4.6.58  same vulnerable helper and dynamic PoV succeeds

Impact

If a PraisonAI user starts a local or internal legacy SSE MCP server with registered tools, an attacker who gets that user to visit a malicious website can use DNS rebinding to interact with the SSE server through the browser. The attacker can discover exposed tools and invoke them as the local user.

Impact depends on the configured tools. In realistic PraisonAI MCP deployments, registered tools may access local files, repositories, issue trackers, cloud APIs, internal services, or other automation targets. This can lead to confidentiality, integrity, and availability impact for the resources reachable by the exposed tools.

The PoV is local-only and harmless. It exposes one marker tool that writes a canary string to a temporary directory.

Root cause

Current ToolsMCPServer.run_sse() constructs a Starlette app directly:

sse_path = "/sse"
messages_path = "/messages/"
sse_transport = SseServerTransport(messages_path)

async def handle_sse(request: Request):
    async with sse_transport.connect_sse(
        request.scope, request.receive, request._send
    ) as (read_stream, write_stream):
        await mcp._mcp_server.run(
            read_stream,
            write_stream,
            mcp._mcp_server.create_initialization_options()
        )

app = Starlette(
    debug=self._debug,
    routes=[
        Route(sse_path, endpoint=handle_sse),
        Mount(messages_path, app=sse_transport.handle_post_message),
    ]
)

uvicorn.run(app,…
Record
PYSEC-2026-3521
CVSS 3.1
8.3 HighCVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:H/I:H/A:H
Updated
2026-11-02
OSVPYSEC-2026-3534 8.3

PraisonAI ToolsMCPServer legacy SSE transport accepts attacker Host/Origin and exposes registered tools

PraisonAI ToolsMCPServer legacy SSE transport accepts attacker Host/Origin and exposes registered tools

Summary

praisonaiagents.mcp.ToolsMCPServer.run_sse() builds a Starlette MCP HTTP+SSE server around mcp.server.sse.SseServerTransport. The server exposes /sse and /messages/, but it does not validate Origin, does not validate Host, and does not require any authentication.

This is reachable through supported PraisonAI code paths that wrap configured MCP server tools and re-expose them over legacy SSE:

  • praisonai mcp run <name> --transport sse
  • praisonai serve mcp --name <name> --transport sse
  • direct use of ToolsMCPServer(...).run_sse(...) or launch_tools_mcp_server(..., transport="sse")

A malicious website can use DNS rebinding against a local or internal PraisonAI SSE MCP server and send requests with attacker-controlled Host and Origin headers. The local PoV binds only to 127.0.0.1, sends an attacker Host and Origin, lists the registered tool, and invokes it successfully.

The same attacker Origin is rejected by PraisonAI's current Streamable HTTP transport with HTTP 403. The vulnerability is therefore a sibling transport guard gap in the legacy SSE wrapper, not intended behavior.

Affected product

  • Repository: MervinPraison/PraisonAI
  • Packages:
    • praisonaiagents
    • praisonai
  • Primary component: src/praisonai-agents/praisonaiagents/mcp/mcp_server.py
  • CLI wrappers:
    • src/praisonai/praisonai/cli/commands/mcp.py
    • src/praisonai/praisonai/cli/commands/serve.py
  • Latest verified release/current head:
    • praisonaiagents 1.6.58
    • PraisonAI 4.6.58
    • repo head 1ad58ca02975ff1398efeda694ea2ab78f20cf3e

Suggested affected ranges:

  • praisonaiagents >= 0.6.0, <= 1.6.58
  • praisonai >= 3.10.0, <= 4.6.58

No fixed version is known at submission time.

Confirmed source sweep:

v3.0.0   ToolsMCPServer.run_sse helper present, no Origin/Host/auth checks
v3.10.0  praisonai mcp run --transport sse wraps configured tools into helper
v3.12.3  praisonai serve mcp --name --transport sse wraps configured tools
v4.0.0   same vulnerable helper and CLI wrapping paths
v4.4.12  same vulnerable helper and CLI wrapping paths
v4.5.0   same vulnerable helper and CLI wrapping paths
v4.5.56  same vulnerable helper and CLI wrapping paths
v4.5.139 same vulnerable helper and CLI wrapping paths
v4.6.57  same vulnerable helper and CLI wrapping paths
v4.6.58  same vulnerable helper and dynamic PoV succeeds

Impact

If a PraisonAI user starts a local or internal legacy SSE MCP server with registered tools, an attacker who gets that user to visit a malicious website can use DNS rebinding to interact with the SSE server through the browser. The attacker can discover exposed tools and invoke them as the local user.

Impact depends on the configured tools. In realistic PraisonAI MCP deployments, registered tools may access local files, repositories, issue trackers, cloud APIs, internal services, or other automation targets. This can lead to confidentiality, integrity, and availability impact for the resources reachable by the exposed tools.

The PoV is local-only and harmless. It exposes one marker tool that writes a canary string to a temporary directory.

Root cause

Current ToolsMCPServer.run_sse() constructs a Starlette app directly:

sse_path = "/sse"
messages_path = "/messages/"
sse_transport = SseServerTransport(messages_path)

async def handle_sse(request: Request):
    async with sse_transport.connect_sse(
        request.scope, request.receive, request._send
    ) as (read_stream, write_stream):
        await mcp._mcp_server.run(
            read_stream,
            write_stream,
            mcp._mcp_server.create_initialization_options()
        )

app = Starlette(
    debug=self._debug,
    routes=[
        Route(sse_path, endpoint=handle_sse),
        Mount(messages_path, app=sse_transport.handle_post_message),
    ]
)

uvicorn.run(app,…
Record
PYSEC-2026-3534
CVSS 3.1
8.3 HighCVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:H/I:H/A:H
Updated
2026-11-02

Affected products

Affected packages

Affected packages
PackageAffectedFixed
praisonaiagents
PyPI
0.6.0 to 1.6.58
1.6.59
praisonai
PyPI
3.10.0 to 4.6.58
4.6.59
praisonaiagents
PyPI
0.6.0 up to 1.6.59, plus listed versions
0.10.00.10.10.10.100.10.20.10.3
Show 45 moreShow less
0.10.40.10.50.10.60.10.70.10.80.10.90.11.00.11.10.11.100.11.110.11.120.11.130.11.140.11.150.11.160.11.170.11.180.11.190.11.20.11.200.11.210.11.220.11.230.11.240.11.250.11.270.11.280.11.290.11.30.11.300.11.310.11.40.11.50.11.60.11.70.11.80.11.90.12.00.12.10.12.100.12.110.12.120.12.130.12.140.12.15
1.6.59
praisonai
PyPI
3.10.0 up to 4.6.59, plus listed versions
3.10.13.10.103.10.113.10.123.10.13
Show 45 moreShow less
3.10.143.10.153.10.163.10.173.10.183.10.193.10.23.10.203.10.213.10.223.10.233.10.243.10.253.10.263.10.273.10.33.10.43.10.53.10.63.10.73.10.83.10.93.11.03.11.13.11.103.11.113.11.123.11.133.11.143.11.23.11.33.11.43.11.83.11.93.12.03.12.13.12.23.12.34.0.04.1.04.2.04.2.14.2.24.2.34.2.4
4.6.59

History

History
RecordedChangedSources
first indexedCVE List, EUVD, GitHub Advisories, NVD, OSV

Dates are when Every CVE recorded each change. Upstream dates may differ.

In short

CVE-2026-57112 is a high vulnerability (CVSS 8.3) in Mervinpraison Praisonai, published June 18, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.22%, the 13th percentile. Fixed in praisonaiagents 1.6.59.

References

This page doesn't list everything

Left out here: 488 versions and the rest of 4 source descriptions. The JSON record has them.

MoveEnter Open