CVE-2026-55534
PraisonAI serve agents --api-key is ignored, allowing unauthenticated remote agent execution
PraisonAI is a multi-agent teams system. From praisonai 4.6.34 until 4.6.58, praisonai serve agents accepts --api-key but _create_agents_app() does not authenticate POST /agents or POST /agents/{agent_name}. A network caller can invoke configured agents without credentials even when an API key was supplied. This issue is fixed in version 4.6.58.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- None
- User interaction
- None
What an attacker can affect
- Confidentiality
- Low
- Integrity
- Low
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
8.6
PraisonAI serve agents --api-key is ignored, allowing unauthenticated remote agent execution
PraisonAI is a multi-agent teams system. From praisonai 4.6.34 until 4.6.58, praisonai serve agents accepts --api-key but _create_agents_app() does not authenticate POST /agents or POST /agents/{agent_name}. A network caller can invoke configured agents without credentials even when an API key was supplied. This issue is fixed in version 4.6.58.
- Record
CVE-2026-55534- CVSS 3.1
- 8.6 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:H - Weakness
- CWE-306
- Updated
- 2026-11-02
EUVDEUVD-2026-65500
8.6
PraisonAI is a multi-agent teams system. From praisonai 4.6.34 until 4.6.58, praisonai serve agents accepts --api-key but _create_agents_app() does not authenticate POST /agents or POST /agents/{agent_name}. A network caller can invoke configured agents without credentials even when an API key was supplied. This issue is fixed in version 4.6.58.
- Record
EUVD-2026-65500- CVSS 3.1
- 8.6 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:H - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-7ww9-85pg-cv4x
8.6
PraisonAI serve agents --api-key is ignored, allowing unauthenticated remote agent execution
Summary
PraisonAI's praisonai serve agents command exposes --api-key as the documented
authentication control for production/external deployments, but the configured key is not
enforced on the public agent invocation compatibility endpoints.
An operator can start the server with --api-key and bind it to 0.0.0.0, but any network-
reachable caller can still invoke agents through POST /agents or POST /agents/ {agent_name} without Authorization, X-API-Key, a query token, or any other credential.
Confirmed vulnerable:
- v4.6.48 / commit
d5f1114aaf1a2e9f121a6e66b929149ca2201f1d - v4.6.34 / commit
e5928449f73f66cc8af1de61621aa974ab255133
Likely affected range: >= 4.6.34, <= 4.6.48.
This is distinct from CVE-2026-44338 / GHSA-6rmh-7xcm-cpxj, which covered the legacy Flask
api_server.py path before 4.6.34. This report concerns the newer FastAPI serve agents --api-key code path and is confirmed in v4.6.48.
Details
The CLI accepts and forwards an API key:
src/praisonai/praisonai/cli/commands/serve.py:156definespraisonai serve agentssrc/praisonai/praisonai/cli/commands/serve.py:162exposes--api-keysrc/praisonai/praisonai/cli/commands/serve.py:175-176forwards the supplied keysrc/praisonai/praisonai/cli/features/serve.py:191handles theagentssubcommandsrc/praisonai/praisonai/cli/features/serve.py:199parsesapi_keyinto the config
However, _create_agents_app() never uses config["api_key"] to create middleware or a
FastAPI auth dependency:
src/praisonai/praisonai/cli/features/serve.py:228creates the FastAPI appsrc/praisonai/praisonai/cli/features/serve.py:287registersPOST {path}with no auth dependencysrc/praisonai/praisonai/cli/features/serve.py:346registersPOST /agents/{agent_name}with no auth dependencysrc/praisonai/praisonai/cli/features/serve.py:356-370executes the registered agent directly
The same app also mounts praisonai.api.agent_invoke, whose /api/v1/agents/{agent_id}/ invoke route is protected separately by CALL_SERVER_TOKEN. That means the protected / api/v1 route and the unauthenticated /agents compatibility routes coexist in the same
server. Setting --api-key does not protect the compatibility routes.
PoC
This local-only PoC does not open a network listener and does not call an LLM provider. It
constructs the FastAPI app through the real ServeHandler._create_agents_app() path with
api_key set, registers a fake agent, and sends an unauthenticated request using FastAPI
TestClient.
#!/usr/bin/env python3
from __future__ import annotations
import sys
import tempfile
from pathlib import Path
REPO = Path("/path/to/PraisonAI")
sys.path[:0] = [
str(REPO / "src" / "praisonai"),
str(REPO / "src" / "praisonai-agents"),
]
class FakeAgent:
def __init__(self):
self.calls = []
def start(self, query):
self.calls.append(query)
return f"fake-agent-ran:{query}"
def main() -> None:
from fastapi.testclient import TestClient
from praisonai.cli.features.serve import ServeHandler
from praisonai.api import agent_invoke
with tempfile.TemporaryDirectory() as tmp:
agents_yaml = Path(tmp) / "agents.yaml"
agents_yaml.write_text(
"roles:\n"
" placeholder:\n"
" role: Placeholder\n"
" goal: Placeholder\n"
" backstory: Placeholder\n",
encoding="utf-8",
)
handler = ServeHandler()
app = handler._create_agents_app(
{
"file": str(agents_yaml),
"host": "0.0.0.0",
"port": 8000,
"path": "/agents",
"reload": False,
"api_key": "operator-secret-api-key",
}
…
- Record
GHSA-7ww9-85pg-cv4x- CVSS 3.1
- 8.6 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:H - Weakness
- CWE-306
- Updated
- 2026-11-02
NVD
8.6
PraisonAI is a multi-agent teams system. From praisonai 4.6.34 until 4.6.58, praisonai serve agents accepts --api-key but _create_agents_app() does not authenticate POST /agents or POST /agents/{agent_name}. A network caller can invoke configured agents without credentials even when an API key was supplied. This issue is fixed in version 4.6.58.
- Record
CVE-2026-55534- CVSS 3.1
- 8.6 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:H - Weakness
- CWE-306
- Updated
- 2026-11-02
OSV
8.6
PraisonAI serve agents --api-key is ignored, allowing unauthenticated remote agent execution
PraisonAI is a multi-agent teams system. From praisonai 4.6.34 until 4.6.58, praisonai serve agents accepts --api-key but _create_agents_app() does not authenticate POST /agents or POST /agents/{agent_name}. A network caller can invoke configured agents without credentials even when an API key was supplied. This issue is fixed in version 4.6.58.
- Record
CVE-2026-55534- CVSS 3.1
- 8.6 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:H - Weakness
- CWE-306
- Updated
- 2026-11-02
OSVGHSA-7ww9-85pg-cv4x
8.6
PraisonAI serve agents --api-key is ignored, allowing unauthenticated remote agent execution
Summary
PraisonAI's praisonai serve agents command exposes --api-key as the documented
authentication control for production/external deployments, but the configured key is not
enforced on the public agent invocation compatibility endpoints.
An operator can start the server with --api-key and bind it to 0.0.0.0, but any network-
reachable caller can still invoke agents through POST /agents or POST /agents/ {agent_name} without Authorization, X-API-Key, a query token, or any other credential.
Confirmed vulnerable:
- v4.6.48 / commit
d5f1114aaf1a2e9f121a6e66b929149ca2201f1d - v4.6.34 / commit
e5928449f73f66cc8af1de61621aa974ab255133
Likely affected range: >= 4.6.34, <= 4.6.48.
This is distinct from CVE-2026-44338 / GHSA-6rmh-7xcm-cpxj, which covered the legacy Flask
api_server.py path before 4.6.34. This report concerns the newer FastAPI serve agents --api-key code path and is confirmed in v4.6.48.
Details
The CLI accepts and forwards an API key:
src/praisonai/praisonai/cli/commands/serve.py:156definespraisonai serve agentssrc/praisonai/praisonai/cli/commands/serve.py:162exposes--api-keysrc/praisonai/praisonai/cli/commands/serve.py:175-176forwards the supplied keysrc/praisonai/praisonai/cli/features/serve.py:191handles theagentssubcommandsrc/praisonai/praisonai/cli/features/serve.py:199parsesapi_keyinto the config
However, _create_agents_app() never uses config["api_key"] to create middleware or a
FastAPI auth dependency:
src/praisonai/praisonai/cli/features/serve.py:228creates the FastAPI appsrc/praisonai/praisonai/cli/features/serve.py:287registersPOST {path}with no auth dependencysrc/praisonai/praisonai/cli/features/serve.py:346registersPOST /agents/{agent_name}with no auth dependencysrc/praisonai/praisonai/cli/features/serve.py:356-370executes the registered agent directly
The same app also mounts praisonai.api.agent_invoke, whose /api/v1/agents/{agent_id}/ invoke route is protected separately by CALL_SERVER_TOKEN. That means the protected / api/v1 route and the unauthenticated /agents compatibility routes coexist in the same
server. Setting --api-key does not protect the compatibility routes.
PoC
This local-only PoC does not open a network listener and does not call an LLM provider. It
constructs the FastAPI app through the real ServeHandler._create_agents_app() path with
api_key set, registers a fake agent, and sends an unauthenticated request using FastAPI
TestClient.
#!/usr/bin/env python3
from __future__ import annotations
import sys
import tempfile
from pathlib import Path
REPO = Path("/path/to/PraisonAI")
sys.path[:0] = [
str(REPO / "src" / "praisonai"),
str(REPO / "src" / "praisonai-agents"),
]
class FakeAgent:
def __init__(self):
self.calls = []
def start(self, query):
self.calls.append(query)
return f"fake-agent-ran:{query}"
def main() -> None:
from fastapi.testclient import TestClient
from praisonai.cli.features.serve import ServeHandler
from praisonai.api import agent_invoke
with tempfile.TemporaryDirectory() as tmp:
agents_yaml = Path(tmp) / "agents.yaml"
agents_yaml.write_text(
"roles:\n"
" placeholder:\n"
" role: Placeholder\n"
" goal: Placeholder\n"
" backstory: Placeholder\n",
encoding="utf-8",
)
handler = ServeHandler()
app = handler._create_agents_app(
{
"file": str(agents_yaml),
"host": "0.0.0.0",
"port": 8000,
"path": "/agents",
"reload": False,
"api_key": "operator-secret-api-key",
}
…
- Record
GHSA-7ww9-85pg-cv4x- CVSS 3.1
- 8.6 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:H - Weakness
- CWE-306
- Updated
- 2026-11-02
OSVPYSEC-2026-3887
8.6
PraisonAI serve agents --api-key is ignored, allowing unauthenticated remote agent execution
Summary
PraisonAI's praisonai serve agents command exposes --api-key as the documented
authentication control for production/external deployments, but the configured key is not
enforced on the public agent invocation compatibility endpoints.
An operator can start the server with --api-key and bind it to 0.0.0.0, but any network-
reachable caller can still invoke agents through POST /agents or POST /agents/ {agent_name} without Authorization, X-API-Key, a query token, or any other credential.
Confirmed vulnerable:
- v4.6.48 / commit
d5f1114aaf1a2e9f121a6e66b929149ca2201f1d - v4.6.34 / commit
e5928449f73f66cc8af1de61621aa974ab255133
Likely affected range: >= 4.6.34, <= 4.6.48.
This is distinct from CVE-2026-44338 / GHSA-6rmh-7xcm-cpxj, which covered the legacy Flask
api_server.py path before 4.6.34. This report concerns the newer FastAPI serve agents --api-key code path and is confirmed in v4.6.48.
Details
The CLI accepts and forwards an API key:
src/praisonai/praisonai/cli/commands/serve.py:156definespraisonai serve agentssrc/praisonai/praisonai/cli/commands/serve.py:162exposes--api-keysrc/praisonai/praisonai/cli/commands/serve.py:175-176forwards the supplied keysrc/praisonai/praisonai/cli/features/serve.py:191handles theagentssubcommandsrc/praisonai/praisonai/cli/features/serve.py:199parsesapi_keyinto the config
However, _create_agents_app() never uses config["api_key"] to create middleware or a
FastAPI auth dependency:
src/praisonai/praisonai/cli/features/serve.py:228creates the FastAPI appsrc/praisonai/praisonai/cli/features/serve.py:287registersPOST {path}with no auth dependencysrc/praisonai/praisonai/cli/features/serve.py:346registersPOST /agents/{agent_name}with no auth dependencysrc/praisonai/praisonai/cli/features/serve.py:356-370executes the registered agent directly
The same app also mounts praisonai.api.agent_invoke, whose /api/v1/agents/{agent_id}/ invoke route is protected separately by CALL_SERVER_TOKEN. That means the protected / api/v1 route and the unauthenticated /agents compatibility routes coexist in the same
server. Setting --api-key does not protect the compatibility routes.
PoC
This local-only PoC does not open a network listener and does not call an LLM provider. It
constructs the FastAPI app through the real ServeHandler._create_agents_app() path with
api_key set, registers a fake agent, and sends an unauthenticated request using FastAPI
TestClient.
#!/usr/bin/env python3
from __future__ import annotations
import sys
import tempfile
from pathlib import Path
REPO = Path("/path/to/PraisonAI")
sys.path[:0] = [
str(REPO / "src" / "praisonai"),
str(REPO / "src" / "praisonai-agents"),
]
class FakeAgent:
def __init__(self):
self.calls = []
def start(self, query):
self.calls.append(query)
return f"fake-agent-ran:{query}"
def main() -> None:
from fastapi.testclient import TestClient
from praisonai.cli.features.serve import ServeHandler
from praisonai.api import agent_invoke
with tempfile.TemporaryDirectory() as tmp:
agents_yaml = Path(tmp) / "agents.yaml"
agents_yaml.write_text(
"roles:\n"
" placeholder:\n"
" role: Placeholder\n"
" goal: Placeholder\n"
" backstory: Placeholder\n",
encoding="utf-8",
)
handler = ServeHandler()
app = handler._create_agents_app(
{
"file": str(agents_yaml),
"host": "0.0.0.0",
"port": 8000,
"path": "/agents",
"reload": False,
"api_key": "operator-secret-api-key",
}
…
- Record
PYSEC-2026-3887- CVSS 3.1
- 8.6 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:H - Updated
- 2026-11-02
Affected products
Affected packages
History
| Recorded | Changed | Sources |
|---|---|---|
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-55534 is a high vulnerability (CVSS 8.6) in Mervinpraison Praisonai, published August 25, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.45%, the 39th percentile. Fixed in praisonai 4.6.58.
References
github.com/MervinPraison/PraisonAI/security/advisories/GHSA-7ww9-85pg-cv4x
github.com/MervinPraison/PraisonAI/commit/2f9677abb2ea68eab864ee8b6a828fd0141612e1
github.com/MervinPraison/PraisonAI/releases/tag/v4.6.58
github.com/advisories/GHSA-7ww9-85pg-cv4x
github.com/CVEProject/cvelistV5/tree/main/cves/2026/55xxx/CVE-2026-55534.json
nvd.nist.gov/vuln/detail/CVE-2026-55534
github.com/MervinPraison/PraisonAI
pypi.org/project/praisonai
Left out here: the rest of 3 source descriptions. The JSON record has them.