🛡️ CVE-2026-56837 — praisonai

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

Description

PraisonAI LinearBot processes unsigned webhooks when LINEAR_WEBHOOK_SECRET is missing

# PraisonAI LinearBot processes unsigned webhooks when LINEAR_WEBHOOK_SECRET is missing

Summary

PraisonAI's LinearBot starts a public webhook listener on 0.0.0.0 and treats

LINEAR_WEBHOOK_SECRET as optional. When the secret is absent, startup only logs

a warning and _handle_webhook() skips Linear-Signature verification entirely.

An unauthenticated network caller who can reach the webhook endpoint can submit

a forged Linear-Event: AgentSession request. The forged request is parsed,

scheduled for background processing, dispatched to _handle_agent_session(),

and passed into BotSessionManager.chat(). The bot then attempts to post the

agent response back to Linear under the configured bot token.

The local PoV is offline and deterministic. It does not contact Linear. It calls

the webhook handler directly, monkey-patches the outbound Linear comment path,

and proves both sides of the boundary:

  • no secret configured: unsigned forged webhook returns 200, invokes the

agent session path once, and attempts one Linear comment;

  • secret configured: missing and bad signatures both return 401 and do not

invoke the agent;

  • secret configured with valid HMAC: request returns 200 and invokes the

agent, proving the control path still works.

Affected Product

  • Repository: MervinPraison/PraisonAI
  • Package: praisonai
  • Components:
  • src/praisonai/praisonai/bots/linear.py
  • src/praisonai/praisonai/cli/features/bots_cli.py

Validated affected:

  • live main / latest observed release v4.6.58:

1ad58ca02975ff1398efeda694ea2ab78f20cf3e

  • previous local current checkout:

2f9677abb2ea68eab864ee8b6a828fd0141612e1

  • v4.6.57
  • v4.6.56
  • v4.5.50

Sampled tags where the LinearBot component was not present:

  • v4.5.49
  • v4.5.51
  • v4.6.9
  • v4.6.10

Suggested affected range: LinearBot-bearing releases with the fail-open

signature behavior, at least 4.5.50 and >= 4.6.56, <= 4.6.58. The

component appears non-contiguously in sampled tags, so maintainers should

confirm the exact packaged version history before publishing a final range.

Root Cause

LinearBot.__init__() accepts an empty signing secret and falls back to an

empty environment value:

```python

self._signing_secret = signing_secret or os.environ.get("LINEAR_WEBHOOK_SECRET", "")

```

start() treats the missing secret as a warning instead of refusing to expose

the webhook listener:

```python

if not self._signing_secret:

logger.warning("LINEAR_WEBHOOK_SECRET not set - webhook signatures will not be verified")

self._site = web.TCPSite(self._runner, "0.0.0.0", self._webhook_port)

```

_handle_webhook() only verifies the request if the secret is truthy:

```python

if self._signing_secret:

signature = request.headers.get("Linear-Signature", "")

if not self._verify_signature(raw_body, signature):

return web.Response(status=401, text="Invalid signature")

```

With no secret configured, the code continues to JSON parsing, accepts a caller

supplied webhookTimestamp, reads the caller supplied Linear-Event header,

and schedules processing:

```python

event_type = request.headers.get("Linear-Event", "")

task = asyncio.create_task(self._process_webhook(event_type, body))

return web.Response(status=200, text="OK")

```

For AgentSession, the forged body is routed to the agent:

```python

if event_type == "AgentSession":

await self._handle_agent_session(body)

...

response = await self._session_mgr.chat(self._agent, user_id, message.content)

await self._send_comment(...)

```

The CLI has the same fail-open posture: start_linear() loads

LINEAR_WEBHOOK_SECRET, prints a warning when it is missing, then reports a

public http://0.0.0.0:<port>/webhook endpoint with verification disabled.

Why This Is Not Intended Behavior

PraisonAI's Linear Bot documentation tells operators to set

LINEAR_WEBHOOK_SECRET, pass it to praisonai bot linear, copy the Linear

webhook signing secret, and use it for HMAC-SHA256 verification. The same page

says missing secrets disable signature verification, while its best-practices

section says webhook secrets ensure authenticity.

Linear's webhook documentation says receivers should ensure requests were sent

by Linear by verifying the Linear-Signature HMAC over the raw body, then

checking that webhookTimestamp is recent. The timestamp check alone is not an

authentication boundary because an attacker can supply a current timestamp in a

forged body.

The implementation itself also confirms the intended boundary: when a secret is

configured, missing and bad signatures are rejected before agent dispatch. The

bug is the missing-secret fail-open mode on a public webhook server, not the

signature algorithm.

Local PoV

Run against the latest observed release checkout:

```bash

python3 submission-bundle/praisonai-prai-cand-013-linear-webhook-signature-fail-open/poc/po

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 low, integrity high, availability low.

Weakness class

CVE-2026-56837 is classified as CWE-287: Improper Authentication. The identity of the caller is not established correctly, so an attacker can act as another user.

Affected software

CVE-2026-56837 is recorded against 1 package.

  • praisonai (from 4.6.56 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:N/UI:N/S:U/C:L/I:H/A:L
CWE CWE-287
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.56 4.6.59

Similar Threats

Site Security Check

Is praisonai part of your stack?

CVE-2026-56837 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.