Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessReach exposed 0.0.0.0 SSE port or lure victim to malicious page
-
DeliveryConnect to /sse and /messages/ with no credentials
-
ExploitList registered MCP tools via JSON-RPC
-
ExecutionInvoke file/shell/code-execution tool
-
ImpactAchieve remote code execution on host
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A07:2025 - Authentication Failures
ASVS 5.0
V6 - Authentication Authentication required for critical functions
MITRE ATT&CK
1 technique across 1 tactic: Initial Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires that an operator explicitly start the MCP SSE transport via ToolsMCPServer.run_sse() or launch_tools_mcp_server(transport='sse') in praisonaiagents < 1.6.59; both default host to 0.0.0.0, and the Starlette app is built with only debug and routes (no middleware= auth/origin gate), so exposure is the default once launched. Direct unauthenticated network exploitation requires only reachability to the listening port (default 8080) - no credentials, no user interaction. The DNS-rebinding variant additionally requires a victim to visit an attacker-controlled web page (user interaction) to reach a localhost-bound instance. The severity of impact is limited/amplified by which tools are registered: full RCE only applies when file, shell, or code-execution tools are registered; a benign tool set constrains impact to those tools' capabilities. Not triggered by merely importing the library - the SSE server must be running. |
| Impact | This is a genuine missing-authentication flaw (CWE-306) rather than an inflated high-CVSS score, but its real-world priority is moderated by strong deployment gates. The CVSS 9.8 vector (AV:N/AC:L/PR:N/UI:N, C:H/I:H/A:H) is defensible for the worst case: once ToolsMCPServer.run_sse or launch_tools_mcp_server(transport='sse') is started, it binds 0.0.0.0 by default and exposes /sse and /messages/ with no auth middleware and no Origin check, so any network-reachable client can list and invoke every registered tool with no credentials. The SecurityConfig/origin/DNS-rebinding controls exist in mcp_security.py but are dead code - confirmed by both the GHSA advisory and the fix commit that finally wires build_sse_security_app into run_sse. However, the signals diverge on urgency: EPSS is only 0.47% (40th percentile) and SSVC lists Exploitation as 'none' (no observed exploitation), even though Automatable=yes and Technical Impact=total. There is no CISA KEV listing and no weaponized exploit - only a static AST proof-of-concept in the advisory. Critically, impact is conditional: the advisory itself states blast radius 'equals the capabilities of the registered tools' - RCE only when file/shell/code-exec tools are registered. Exploitation also requires that an operator explicitly launch the SSE transport (not automatic on import). Net: a real, easily-automatable weakness worth prompt patching for anyone running the MCP SSE server, but the absence of active exploitation, low EPSS, and dependence on operator configuration place it below internet-facing mass-exploitation threats. |
| Exploit ScenarioDerived | A developer runs launch_tools_mcp_server(transport='sse') to expose PraisonAI tools (including file/shell/code-execution tools) over MCP; because it binds 0.0.0.0 with no authentication, any host on the network sends JSON-RPC calls to /messages/ to enumerate and invoke those tools, achieving code execution. Alternatively, a victim developer merely visits a malicious web page that uses DNS rebinding to point its hostname at 127.0.0.1 and drives the same tool calls against the local instance cross-origin. No public weaponized exploit exists - only a static AST-based proof in the GHSA advisory. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 16, 2026
Unauthenticated tool invocation and potential remote code execution in PraisonAI Agents (praisonaiagents) before 1.6.59, where the MCP SSE transport started by ToolsMCPServer.run_sse() or launch_tools_mcp_server(transport='sse') binds to 0.0.0.0 and builds its Starlette application with no authentication middleware and no Origin validation. Any client that can reach the listening port (default 8080) can list and invoke every registered tool without credentials, and because the bundled SecurityConfig, origin-validation and DNS-rebinding checks in mcp/mcp_security.py are never called, a malicious web page can rebind a hostname to 127.0.0.1 and drive the same JSON-RPC calls against a developer's local instance; the practical impact scales with the registered toolset and becomes full RCE where file, shell, or code-execution tools are exposed. Exposure is gated on an operator actually launching the SSE transport - merely importing the library is not sufficient - and no public exploit code has been identified at time of analysis (EPSS 0.47%, SSVC exploitation: none), with a vendor patch available in 1.6.59.
RemediationAI
Upgrade to praisonaiagents 1.6.59 - Vendor-released patch: 1.6.59 - as described in GHSA-x227-pf99-vffg (https://github.com/MervinPraison/PraisonAI/security/advisories/GHSA-x227-pf99-vffg) and implemented by commit 2adfe7e8323f6deec66925cf15a885b6238895e9, with the matching PraisonAI release at https://github.com/MervinPraison/PraisonAI/releases/tag/v4.6.59. Note that the patched code only activates _SSESecurityMiddleware through build_sse_security_app() when a SecurityConfig is passed explicitly or the environment variables MCP_SSE_AUTH_TOKEN (or MCP_AUTH_TOKEN) and MCP_SSE_ALLOWED_ORIGINS are set - without them the transport still binds 0.0.0.0 with no gate, so the upgrade must be paired with configuration: set MCP_SSE_AUTH_TOKEN to require a Bearer token on every request and MCP_SSE_ALLOWED_ORIGINS to enforce Origin validation (trade-off: clients must then send the token and present an allowed Origin, and browser-based integrations using unexpected origins will receive 401/403). If upgrading or configuring is not immediately possible, call run_sse(host="127.0.0.1") to remove the network path entirely (trade-off: remote agents can no longer connect), block the default listening port 8080 at the host firewall or security group (trade-off: no legitimate remote MCP clients either), and avoid registering file, shell, or code-execution tools on the SSE transport so that any unauthenticated caller is limited to benign tool capabilities. Operators should also confirm no matching MCP SSE instance was reachable during the exposure window, since the flaw provides no logging of unauthorized tool invocation by default.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in pypi
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The flaw sits in the Model Context Protocol (MCP) server transport layer of praisonaiagents, tracked as CWE-306 (Missing Authentication for Critical Function) with CPE cpe:2.3:a:mervinpraison:praisonaiagents:*:*:*:*:*:*:*:*. In src/praisonai-agents/praisonaiagents/mcp/mcp_server.py, run_sse() defaults host to "0.0.0.0" and constructs a Starlette app with only the debug and routes keyword arguments - Route('/sse', endpoint=handle_sse) and Mount('/messages/', app=sse_transport.handle_post_message) - with no middleware= parameter and therefore no per-route authentication or Origin gate; uvicorn.run() then serves it on all interfaces, and launch_tools_mcp_server likewise defaults host to "0.0.0.0". The module mcp/mcp_security.py already defines the exact controls needed - is_valid_origin, is_potential_dns_rebinding, validate_auth_header and SecurityConfig.is_origin_allowed - but static AST analysis confirms these symbols are referenced only inside mcp_security.py and its __init__ re-export, i.e. dead code never invoked by any transport (the auth references in mcp_websocket.py are client-side). The practical consequence is an unauthenticated, network-reachable tool-execution endpoint whose blast radius equals the capabilities of the registered tools, plus a DNS-rebinding vector against localhost instances because no Origin header is checked. The CVSS 3.1 vector AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H confirms the direct network path needs no privileges and no user interaction; the rebinding variant additionally requires a victim to visit an attacker-controlled page. The 1.6.59 fix wires in a _SSESecurityMiddleware via build_sse_security_app(), but that helper returns the app unchanged when neither a SecurityConfig nor the new MCP_SSE_* environment variables are present, and it also hardens the approval registry so tools rated 'critical' are never auto-approved and adds 'format'/'format_map' to the Python sandbox blocklist.
Know when Praisonaiagents gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Once the default-0.0.0.0 SSE server is running it is network-reachable with no auth or interaction (AV:N/AC:L/PR:N/UI:N); C/I/A:H reflects the documented RCE when file/shell/code-exec tools are registered.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
PraisonAI is a multi-agent teams system. Prior to praisonaiagents 1.6.59, ToolsMCPServer.run_sse and launch_tools_mcp_server bind to 0.0.0.0 and create /sse and /messages/ routes without invoking the available SecurityConfig authentication, origin-validation, or DNS-rebinding controls. Any reachable client can list and invoke registered tools, and a browser can target a local instance through DNS rebinding, with impact determined by the registered file, shell, and code-execution tools. This vulnerability is fixed in praisonaiagents 1.6.59.
Technical POC Analysis
CWE-306 missing authentication for a critical function.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
PraisonAI Agents, an open-source framework used to build AI tool-calling agents, ships a server mode that can expose every registered tool to any client able to reach its network port - or, on a developer workstation, to a malicious web page via DNS rebinding - including file, shell, and code-execution tools, which can escalate to full remote code execution. Leadership should care because affected instances are typically developer endpoints and internal build or automation hosts that hold source code, credentials, and pathways into production systems. Exposure is gated: an operator must have explicitly launched the SSE transport (default port 8080), merely importing the library is not sufficient, and no public exploit has been identified at time of analysis, so risk is concentrated in teams that have enabled this mode.
Apply vendor patch.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
More in Praisonaiagents
View allSSRF protection bypass in PraisonAI's praisonaiagents library (all versions before 1.6.58) lets low-privileged users rou
Authentication bypass in PraisonAI's AgentServer component exposes all routes - /publish, /events, /info, /health - to u
Arbitrary Python code execution in PraisonAI's workflow include feature allows an attacker who controls a local recipe d
Unauthorized filesystem mutation in praisonaiagents allows an LLM-controlled agent to rewrite arbitrary on-disk source f
Unauthenticated remote code execution in the PraisonAI multi-agent framework lets any network-reachable caller run arbit
Unauthenticated remote agent enumeration and invocation in PraisonAI's AgentTeam.launch() / Agents.launch() HTTP server
Arbitrary command and code execution in PraisonAI's workflow engine (versions <4.5.139) and praisonaiagents (<1.5.140) a
Command injection in PraisonAIAgents memory hooks executor allows authenticated local attackers to execute arbitrary she
Unauthenticated remote session hijacking in PraisonAI's browser bridge (versions <4.5.139) and praisonaiagents (<1.5.140
Server-side request forgery in the SearxNG-backed search tools shipped with the praisonaiagents Python package before 1.
Remote attackers can invoke arbitrary application callables in PraisonAI multi-agent systems by manipulating tool-call n
Arbitrary Python code execution in PraisonAI ≤4.5.138 occurs when malicious tools.py files are automatically imported fr
EUVD-2026-77539
GHSA-x227-pf99-vffg
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB