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 ssepraisonai serve mcp --name <name> --transport sseToolsMCPServer(...).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.
MervinPraison/PraisonAIpraisonaiagentspraisonaisrc/praisonai-agents/praisonaiagents/mcp/mcp_server.pysrc/praisonai/praisonai/cli/commands/mcp.pysrc/praisonai/praisonai/cli/commands/serve.pypraisonaiagents 1.6.58PraisonAI 4.6.581ad58ca02975ff1398efeda694ea2ab78f20cf3eSuggested affected ranges:
praisonaiagents >= 0.6.0, <= 1.6.58praisonai >= 3.10.0, <= 4.6.58No 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...
4.6.591.6.59Exploitability
AV:NAC:HPR:NUI:RScope
S:CImpact
C:HI:HA:H8.3/CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:H/I:H/A:H