mervinpraison/praisonai · Security
PraisonAI Has Unauthenticated SSE Event Stream that Exposes All Agent Activity in A2U Server
- GHSA ID
- GHSA-f292-66h9-fpmf
- CVE ID
- CVE-2026-39889
- Severity
- high
- Published
- Updated
- CVSS
- 7.5 · CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
- CVSS v3
- 7.5 · CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
Description
The A2U (Agent-to-User) event stream server in PraisonAI exposes all agent activity without authentication. This is a separate component from the gateway server fixed in CVE-2026-34952.
The create_a2u_routes() function registers the following endpoints with NO authentication checks:
- GET /a2u/info — exposes server info and stream names
- POST /a2u/subscribe — creates event stream subscription
- GET /a2u/events/{stream_name} — streams ALL agent events
- GET /a2u/events/sub/{id} — streams events for subscription
- GET /a2u/health — health check
An unauthenticated attacker can:
- POST /a2u/subscribe → receive subscription_id
- GET /a2u/events/sub/{subscription_id} → receive live SSE stream of all agent events including responses, tool calls, and thinking
This exposes sensitive agent activity including responses, internal reasoning, and tool call arguments to any network attacker.
[1] POST /a2u/subscribe (no auth token) Status: 200 Response: {"subscription_id":"sub-a1ad8a6edd8b","stream_name":"events", "stream_url":"http://testserver/a2u/events/sub-a1ad8a6edd8b"} Got subscription_id: sub-a1ad8a6edd8b
[2] GET /a2u/info (no auth token) Status: 200 Response: {"name":"A2U Event Stream","version":"1.0.0", "streams":["events"],"event_types":["agent.started","agent.thinking", "agent.tool_call","agent.response","agent.completed","agent.error"]}
[3] GET /a2u/health (no auth token)
Status: 200
Response: {"status":"healthy","active_subscriptions":1,"active_streams":1}
Impact: Attacker can subscribe and receive ALL agent events including responses, tool calls, and internal reasoning in real-time
CWEs
- CWE-200 · Exposure of Sensitive Information to an Unauthorized Actor