🛡️ CVE-2026-57131 — praisonai

🔴 CVSS 9.5 — Critical ✅ No Known Exploit CWE-306 OSV
9.5
CVSS Score
0 Low4 Medium7 High9 Critical10

Description

PraisonAI: Jobs API exposes agent-execution endpoints with no authentication

# praisonai: Jobs API exposes agent-execution endpoints with no authentication

Researcher: Kai Aizen — SnailSploit (@SnailSploit), Adversarial & Offensive Security Research

Target: https://github.com/MervinPraison/PraisonAI

Package: praisonai on PyPI

Affected version (empirically tested): 4.6.48

Components:

  • praisonai.jobs.server.create_apppraisonai/jobs/server.py
  • praisonai.jobs.router.create_routerpraisonai/jobs/router.py
  • Routes mounted at /api/v1/runs/...

Weakness: CWE-306 Missing Authentication for Critical Function · CWE-862 Missing Authorization · CWE-94 Code Injection (via prompt / agent_yaml).

TL;DR

praisonai ships a standalone async-jobs HTTP server (python -m praisonai.jobs.server --host=0.0.0.0 --port=8005) whose job is to accept job submissions and run agents on the operator's behalf. Every endpoint under /api/v1/runs is unauthenticated. There is no auth_token field, no Depends(verify_*), no middleware that inspects Authorization — the CORS middleware *lists* Authorization in allow_headers (the only signal in the whole module that the developer was aware authentication is a thing), but no route ever reads it.

A network-reachable attacker can:

1. Execute arbitrary agent codePOST /api/v1/runs accepts prompt, agent_yaml, agent_file, config, framework. The job is queued and an executor invokes whichever framework (praisonai / crewai / autogen) the attacker picks, with whichever prompt and tool config the attacker supplies. The job runs in the operator's process — same environment variables, same filesystem, same credentials (OpenAI / Anthropic / Azure / Bedrock keys; tool integrations; on-disk YAML recipes).

2. List and read every job system-wideGET /api/v1/runs lists all jobs; GET /api/v1/runs/{job_id}/result returns the full result of any completed job. Operator's prompts, the agent's chain-of-thought, tool inputs / outputs, retrieved documents — all readable to an anonymous client.

3. Cancel or delete any jobPOST /…/cancel and DELETE /…/{job_id} accept arbitrary job IDs without any ownership / authorization check.

4. Stream live SSE of any in-flight jobGET /…/{job_id}/stream reads the executor's live progress for any job ID.

The remote-RCE shape (1) is the load-bearing one. Even with webhook_url SSRF-guarded (and it is — the model validator at jobs/models.py:42-65 rejects localhost / private IPs), the attacker needs no callback: SSE streaming returns the agent's output directly on the same connection.

Root cause

```

Expected behavior when starting praisonai.jobs.server:

"I'm running an HTTP API my application backend will call.

The CORS middleware permits Authorization, so the server

enforces it. Anonymous attackers cannot submit jobs."

Actual behavior (praisonai 4.6.48):

  • server.py:59-152 create_app builds a FastAPI app, adds

CORSMiddleware, includes the jobs router.

NO auth middleware. NO global Depends.

  • router.py:43 @router.post("") submit_job(...)

No Depends, no Authorization header read,

no auth_token config field at all.

  • router.py:109,148,161,180,205,224 every other route:

likewise, no auth on any of GET-list,

GET-status, GET-result, POST-cancel,

DELETE, GET-stream.

  • server.py:117 CORS allow_headers DOES include

"Authorization" — the only token in the

entire jobs/ subpackage that suggests

the developer was thinking about auth.

Impact:

The API is intended to be production-ready (the CORS code at

server.py:96-102 explicitly branches on

os.getenv("ENVIRONMENT") == "production" to harden origins),

yet ships with no authentication layer at all. Operators who

bind the server to a network interface — including the

suggested --host=0.0.0.0 in the CLI parser — expose

unauthenticated agent execution to anyone who can reach the

port.

```

The same package gets auth right elsewhere (praisonai/gateway/server.py auto-generates an auth_token if none is configured and refuses to serve requests without it; praisonai/endpoints/a2u_server.py:250-264 uses hmac.compare_digest on a Bearer token). The jobs API is the outlier.

Empirically affected routes

Verified by PoC against published praisonai==4.6.48 (/api/v1/runs/... paths):

| Method | Path | Unauth result |

|----------|-------------------------------|--------------------------|

| POST | /api/v1/runs | HTTP 202 Accepted, attacker job queued and executor invoked the framework |

| GET | /api/v1/runs

How this vulnerability can be exploited

This issue can be reached over the network, attack complexity is low, an attacker needs no privileges on the target. No user interaction is required. The scope is unchanged, so the impact stays within the vulnerable component. Rated impact: confidentiality high, integrity high, availability high.

Weakness class

CVE-2026-57131 is classified as CWE-306: Missing Authentication for Critical Function. A sensitive function can be reached without authenticating at all.

Affected software

CVE-2026-57131 is recorded against 1 package.

  • praisonai (fixed in 4.6.59)

Timeline and source

Published on 18 June 2026 and last revised on 23 July 2026. No public exploit is currently recorded for this entry. Record sourced from OSV.

References

github.com (Web)
github.com (Package)

Details

Severity CRITICAL
CVSS Score 9.5
CVSS Vector CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CWE CWE-306
Public Exploit ✅ No
Source OSV
Published 2026-06-18
Updated 2026-08-12
Modified 2026-07-23
Fix URL N/A

Affected Packages

Software From version Fixed in
praisonai 4.6.59

Similar Threats

Exploit Protection

Are you running praisonai?

CVE-2026-57131 carries CVSS 9.5 Critical rating. BotEraser checks your installation against this and other known CVE records, and blocks IPs associated with exploit activity.

Check My Site For CVE-2026-57131 →

No credit card required  ·  Results in minutes

ⓘ Data Notice: The information presented above has been compiled from publicly available internet sources. Boteraser aggregates this data solely for informational purposes and does not independently classify, evaluate, or endorse any findings about the vulnerabilities listed. The accuracy and completeness of this information is the sole responsibility of the original publishers. Boteraser and its operators accept no liability for any decisions made based on this data.