🛡️ CVE-2026-56832 — praisonai

🟠 CVSS 8.0 — High ✅ No Known Exploit CWE-345 OSV
8.0
CVSS Score
0 Low4 Medium7 High9 Critical10

Description

PraisonAI DiscordApproval accepts unrelated channel messages as dangerous-tool approvals

# DiscordApproval accepts unrelated channel messages as dangerous-tool approvals

Summary

praisonai.bots.DiscordApproval approves a pending dangerous tool call when it

sees any later non-bot message in the configured Discord channel whose text is

classified as approval, such as yes.

The decision is not bound to:

  • a Discord reply to the approval message;
  • a Discord thread created for that request;
  • a Discord interaction/button callback for that request;
  • an explicit approver user allowlist; or
  • an approval nonce visible only to intended approvers.

As a result, any user who can post in the configured approval channel can

approve a pending high-risk tool call by sending yes after the approval

message appears. The same local PoV also shows that the Slack and Telegram

messaging approval backends have no explicit approver allowlist parameter, but

the primary report-grade issue is the Discord backend's unthreaded channel

cross-talk: the approving message does not need to be a reply or otherwise

request-bound.

Affected Product

  • Repository: MervinPraison/PraisonAI
  • Ecosystem: pip
  • Package: praisonai
  • Component: Python messaging approval backends
  • Primary affected file: src/praisonai/praisonai/bots/_discord_approval.py
  • Related sibling files:
  • src/praisonai/praisonai/bots/_slack_approval.py
  • src/praisonai/praisonai/bots/_telegram_approval.py
  • Latest PyPI version validated: 4.6.58
  • Current origin/main validated:

1ad58ca02975ff1398efeda694ea2ab78f20cf3e

  • Current origin/main tag validated: v4.6.58

Suggested affected range:

```text

pip:praisonai >= 4.5.2, <= 4.6.58

```

Representative local sweep:

```text

4.5.0 Discord approval backend not present

4.5.2 vulnerable

4.5.128 vulnerable

4.6.9 vulnerable

4.6.10 vulnerable

4.6.56 vulnerable

4.6.57 vulnerable

4.6.58 vulnerable

```

Root Cause

DiscordApproval.request_approval() posts an approval message to the configured

channel and records the returned message id.

_poll_for_response() then polls channel history with:

```python

f"/channels/{channel_id}/messages?after={message_id}&limit=10"

```

For each later non-bot message, it reads content, classifies the text, and

returns ApprovalDecision(approved=True) when the text is approve/yes.

There is no check that the message is a Discord reply to the approval message,

belongs to a request-specific thread, came from an intended approver, or

contains a request-specific approval token.

Important source evidence from origin/main:

  • _discord_approval.py lines 57-73: constructor accepts token,

channel_id, timeout, and poll_interval; no approver allowlist.

  • _discord_approval.py line 239: polls all messages after the approval

message in the configured channel.

  • _discord_approval.py lines 252-265: skips bot messages, classifies the

remaining text, and approves when the keyword is approve.

The Slack and Telegram backends are better request-scoped than Discord:

  • Slack uses conversations.replies for the approval message thread.
  • Telegram checks the callback/reply message id.

However, both still lack an explicit approver identity parameter. They are

included in the PoV and suggested fix because the authorization model should be

consistent across all messaging approval backends.

Local PoV

Run against the latest local checkout:

```bash

python3 poc/pov_prai_cand_029_messaging_approval_channel_member_bypass.py \

--repo ../../artifacts/repos/praisonai-v4.6.58 \

--json

```

The PoV is local-only. It mocks Slack, Telegram, and Discord API helpers

in-process and does not contact those services.

For Discord, the mock sequence is:

1. DiscordApproval posts a critical execute_command approval request to

D_APPROVAL_CHANNEL.

2. The mocked channel-history endpoint returns a later ordinary non-bot

channel message from D_INTRUDER with content yes.

3. DiscordApproval returns approved=True and approver="D_INTRUDER".

Observed output from evidence/pov-v4.6.58.json:

```json

{

"approval_from_unconfigured_channel_participant": {

"discord": true,

"slack": true,

"telegram": true

},

"backends": [

{

"backend": "discord",

"configured_channel_id": "D_APPROVAL_CHANNEL",

"decision_approved": true,

"decision_approver": "D_INTRUDER",

"decision_reason": "Approved via Discord by intruder",

"intruder_user": "D_INTRUDER"

}

],

"no_explicit_approver_allowlist_parameters": true,

"vulnerable": true

}

```

The command in the approval request is a harmless local sentinel:

touch /tmp/prai-cand-029. The PoV stops at the approval decision; it does not

execute the tool.

Why This Is Not Intended Behavior

This report does not claim that a deliberately private approval channel with

only trusted approvers is unsafe by itself. The narrower issue is that the

Discord

How this vulnerability can be exploited

This issue can be reached over the network, attack complexity is low, an attacker needs low-level 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-56832 is classified as CWE-345: Insufficient Verification of Data Authenticity. Data is trusted without confirming it really came from the claimed source and was not altered.

Affected software

CVE-2026-56832 is recorded against 1 package.

  • praisonai (from 4.5.2 up to 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 HIGH
CVSS Score 8.0
CVSS Vector CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
CWE CWE-345
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.5.2 4.6.59

Similar Threats

Site Security Check

Is praisonai part of your stack?

CVE-2026-56832 is rated CVSS 8.0 High. BotEraser scans your installation against known CVE records and tells you whether this vulnerability applies to the versions you actually run.

Scan My Site Free →

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.