Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessIdentify recipe server bound to non-localhost interface
-
ExploitSend unauthenticated request to recipe API
-
ExecutionEnumerate and run/validate arbitrary recipes
-
ImpactTrigger /admin/reload, workflow execution, or state changes
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A07:2025 - Authentication Failures
ASVS 5.0
V6 - Authentication Authentication mechanism validation
MITRE ATT&CK
2 techniques across 2 tactics: Defense Evasion, Initial Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires that an operator start the Recipe HTTP server via the deprecated Typer path 'praisonai recipe serve' bound to a non-localhost interface (e.g. --host 0.0.0.0) without passing --api-key or a config file that sets auth; the default host is 127.0.0.1, which is not exposed. The /admin/reload endpoint is only reachable when --admin (enable_admin) is set. Presence of PRAISONAI_API_KEY in the environment does NOT protect this path, because the Typer command only sets auth when --api-key is passed explicitly. Limiting factors: the reachable-interface binding is a non-default choice (though the official Docker example uses --host 0.0.0.0); the hardened legacy feature handler and create_auth_middleware() fail closed, so only this specific Typer callsite is affected; and concrete impact depends on the configured recipes (tool-enabled/powerful recipes increase severity). No end-user interaction or authentication is required once the server is exposed. |
| Impact | The CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N, base 8.2, C:L/I:H) describes an easy, remote, unauthenticated flaw, and that is accurate for the attacker - once the Recipe HTTP server is reachable, no credentials are needed. However, the signals must be read together with the deployment precondition: the server defaults to host 127.0.0.1, and the vulnerability is only exposed when an operator runs 'praisonai recipe serve --host 0.0.0.0' (or otherwise binds to a non-localhost interface) via the deprecated Typer path without --api-key. So the PR:N/AV:N metrics are correct for the attacker but gated by a non-default operator action, which lowers real-world exposure relative to the raw score. No KEV listing is present, so this is NOT confirmed actively exploited. No EPSS score was provided in the input, so exploitation probability cannot be quantified here. A local-only proof-of-vulnerability exists in the GHSA advisory, but it is in-process (monkey-patched launcher + Starlette test client) and is not verified as working remote exploit code. The vendor/triage Decision label is 'this_week' (not act_now or emergency), consistent with a serious but config-dependent authentication-bypass issue rather than a mass-exploited emergency. Net: a genuine high-severity auth bypass worth patching promptly, but realistic risk is concentrated in deployments that bind the recipe server to a reachable interface (notably the Docker example in the docs, which uses --host 0.0.0.0). |
| Exploit ScenarioDerived | An operator deploys PraisonAI using the documented Docker pattern 'praisonai recipe serve --host 0.0.0.0 --port 8765' (or adds --admin), which routes through the deprecated Typer command and never sets config.auth, so create_app() attaches no API-key/JWT middleware. Any network caller that can reach the port sends unauthenticated requests to the recipe API (GET /v1/recipes, POST /v1/recipes/run, /stream, /validate) and, if --admin was used, POST /admin/reload. A public, local-only PoV exists in the advisory demonstrating the bypass (admin/reload and openapi return 200 with no auth); it is not verified as a working remote exploit. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 23, 2026
PraisonAI versions 4.5.112 through 4.6.58 expose the Recipe HTTP API without authentication when an operator starts the deprecated Typer command praisonai recipe serve on a non-localhost interface without explicitly selecting API-key auth, allowing unauthenticated network callers to enumerate and execute recipes and, when --admin is enabled, invoke /admin/reload. The issue is an authentication bypass at the installed Typer callsite (CWE-287, with CWE-306 and CWE-862 also applicable); the hardened legacy feature handler rejects non-localhost binding without auth, and create_auth_middleware() fails closed with 503/401 when auth is selected but misconfigured. The CVSS 3.1 base score is 8.2 (AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:N), and PraisonAI 4.6.59 contains the vendor fix; no CISA KEV entry or confirmed working remote exploit code is present in the supplied intelligence, and the advisory's public local-only proof-of-value harness exercises the bypass in-process without binding a socket, so it is not verified as working remote exploit code. Given the this-week decision label, prioritize upgrading internet-reachable or Docker-deployed instances.
RemediationAI
Upgrade to PraisonAI 4.6.59 or later, which patches the Typer recipe serve callsite; the advisory recommends removing or hard-disabling the deprecated Typer command, making it delegate to the hardened RecipeHandler.cmd_serve() path, and applying the same non-localhost/no-auth preflight guard in cli/commands/recipe.py. If upgrading immediately is not possible, do not bind the server to a non-localhost address-keep the default 127.0.0.1-and, when remote access is required, pass --api-key explicitly so config["auth"] is set, require clients to send the API-key header, and avoid --admin so /admin/reload is not exposed; also change --cors from * to a restricted origin list. Setting PRAISONAI_API_KEY in the environment alone does not protect this path, because the Typer command only sets auth when --api-key is passed or a config file selects it. Restrict network reachability to the Recipe port with firewall or network-policy controls as a compensating measure, and review the official Docker example that uses --host 0.0.0.0 without auth. A vendor-released patch is available: version 4.6.59; advisory: https://github.com/MervinPraison/PraisonAI/security/advisories/GHSA-5qw8-f2g9-ff29.
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
PraisonAI's installed console entrypoint is Typer-first: __main__.py routes recipe to the Typer app registered in cli/app.py (cli/commands/recipe.py) before the legacy dispatcher can run. The deprecated Typer recipe serve implementation accepts --host (default 127.0.0.1), --cors (default *), --admin, and --api-key, and it only sets config["auth"] to api-key when --api-key is supplied; launching with --host 0.0.0.0 --admin therefore produces a launch config of {"host":"0.0.0.0","config":{"cors_origins":"*","enable_admin":true}} with no auth key. create_app() in recipe/serve.py attaches API-key or JWT middleware only when config.get("auth") is set and not none, so unauthenticated requests reach GET /v1/recipes, POST /v1/recipes/run, POST /v1/recipes/stream, POST /v1/recipes/validate, and optionally POST /admin/reload. The root cause class is CWE-287 (improper authentication), with CWE-306 and CWE-862 also applicable because sensitive recipe and admin functions lack authentication/authorization on this callsite. The hardened legacy RecipeHandler.cmd_serve() refuses non-localhost binding when auth is none, and create_auth_middleware() returns 503 for selected API-key/JWT auth without a secret, confirming the intended boundary. The official Docker example CMD ["praisonai","recipe","serve","--host","0.0.0.0","--port","8765"] follows the vulnerable path; setting PRAISONAI_API_KEY in the environment does not enable auth here because the Typer command only sets auth when --api-key is passed or a config file selects it. The CPE for the affected package is cpe:2.3:a:mervinpraison:praisonai:*:*:*:*:*:*:*:*.
Know when Praisonai 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:L/I:H/A:N
Once bound to a reachable interface the recipe API is reachable with no auth (AV:N/AC:L/PR:N/UI:N); recipe execution/admin reload gives high integrity impact (I:H), limited read exposure (C:L), no availability claim (A:N).
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
DescriptionCVE.org
PraisonAI is a multi-agent teams system. From version 4.5.112 to before version 4.6.59, PraisonAI's installed console entrypoint is Typer-first. In current releases, the recipe command is registered in the Typer app and praisonai recipe serve dispatches to the deprecated Typer command in src/praisonai/praisonai/cli/commands/recipe.py. That Typer command can start the Recipe HTTP server on a non-localhost interface with no authentication. It prints a deprecation warning, and then launches the server. Because config.auth is absent, create_app() does not attach the API-key or JWT middleware. Unauthenticated requests can then reach the recipe API and, when enabled, /admin/reload. This issue has been patched in version 4.6.59.
Technical POC Analysis
CWE-287 (Improper Authentication), with CWE-306 and CWE-862 as the advisory's secondary weaknesses.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
PraisonAI 4.5.112 through 4.6.58 can expose its Recipe HTTP API without authentication when the deprecated praisonai recipe serve command is run on a network interface. Any unauthenticated network caller reaching that service could enumerate and execute recipes, and with the admin option enabled also trigger server reload, giving unauthorized users meaningful ability to manipulate AI workflow execution. Leadership should care because this is not a theoretical parsing bug: it directly affects the AI automation layer, and operators who followed older guidance may now be running internet- or intranet-reachable services that silently lack authentication.
Apply vendor patch (PraisonAI 4.6.59). Until upgraded, bind the Recipe API to localhost only, place it behind an authenticating reverse proxy or network ACL, and disable the --admin option.
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.
Remote code execution in PraisonAI before 1.6.78 allows attackers to run arbitrary Python on the host by manipulating th
PraisonAI's TypeScript MCP server (npm package `praisonai`, versions 1.5.0 through 1.7.1) exposes an HTTP JSON-RPC trans
WebSocket origin-validation bypass in PraisonAI's Browser Server (praisonai/browser/server.py) before 4.6.58 lets an att
PraisonAI's `praisonai serve` subsystem (agents and unified modes) accepts an `--api-key` CLI flag that is parsed but ne
System prompt extraction and unauthorized tool invocation in PraisonAI before 4.6.78 arise because the prompt-injection
Unauthenticated remote agent invocation in PraisonAI versions 4.6.34 through 4.6.57 allows any network-reachable caller
SSRF protection bypass in PraisonAI's praisonaiagents library (all versions before 1.6.58) lets low-privileged users rou
Server-side request forgery in PraisonAI's Crawl4AI/Chromium crawling backend (all versions before 1.6.78) lets low-priv
Authentication fail-open in PraisonAI's Recipe HTTP server allows unauthenticated remote attackers to invoke recipe exec
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
Server-side request forgery in PraisonAI's web_crawl() function (versions 1.5.128-1.6.57) allows an attacker who can inf
EUVD-2026-108877
GHSA-5qw8-f2g9-ff29
NVD
CVE.org
EPSS
Exploit-DB