Skip to main content

Discourse ActivityPub CVE-2026-55103

| EUVDEUVD-2026-102202 HIGH
Insufficient Verification of Data Authenticity (CWE-345)
2026-10-15 GitHub_M
8.6
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Sign ActivityPub request with attacker-controlled key
  2. Delivery
    Deliver forged activity to inbox endpoint
  3. Exploit
    Declare Activity actor mismatching signed actor
  4. Execution
    Bypass missing identity and ownership checks
  5. Impact
    Edit, delete, or reply to victim's federated posts

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A08:2025 - Software or Data Integrity Failures
ASVS 5.0
V15 - Secure Coding and Architecture Data authenticity verification
Exploitation Conditions

The target must run the discourse-activity-pub plugin with federation active and must host federated posts that can be referenced; exploitation occurs by delivering a validly HTTP-signed ActivityPub activity to the inbox or shared_inbox controller where the signed request actor differs from the declared Activity actor or does not own the attributed object. No account on the Discourse instance is required (PR:N), but the attacker must be able to produce a valid HTTP signature for some federated actor, and the limiting factor is that stock Discourse does NOT ship this plugin - only instances that have installed and enabled ActivityPub federation are exposed.

Impact

Signals are moderately strong but internally inconsistent, so judgment is required. The input CVSS of 8.6 with vector AV:N/AC:L/PR:N/UI:N/S:C describes a network-reachable, low-complexity, unauthenticated attack with changed scope - all consistent with a remote actor abusing the ActivityPub inbox endpoints. However, the CVSS impact metrics (C:H/I:N/A:N) directly CONTRADICT the description: the flaw lets an attacker 'edit, delete, or reply to federated posts,' which is an INTEGRITY/tampering impact, not confidentiality - the vector appears mis-scored and the 'Information Disclosure' tag is likewise wrong. CWE-345 (insufficient verification of data authenticity) correctly fits the root cause: inbound processing never checked that the HTTP-signature actor matched the Activity actor and owned the referenced object. No EPSS score, no CISA KEV listing, and no public exploit were provided, so this is not confirmed as actively exploited; the only exploitation enabler is the public patch commit, which reveals the exact missing checks and could accelerate exploit development. Net assessment: a genuinely serious integrity/spoofing flaw for the subset of Discourse instances that run the ActivityPub plugin with federation enabled, but overall real-world risk is tempered by the plugin's limited deployment footprint and the absence of any exploitation evidence. Treat as a prompt-patch item for federating instances rather than an emergency fleet-wide priority.

Exploit ScenarioDerived

An attacker operating any fediverse-capable server crafts an ActivityPub Update/Delete/Create activity whose declared actor or object attribution belongs to a victim, then signs the HTTP request with their own key and delivers it to the target Discourse instance's inbox or shared inbox. Because the pre-patch code never confirmed the signed actor matched the Activity actor or owned the object, the forged activity is processed, letting the attacker alter or remove another user's federated posts or inject replies in their name. No public exploit was identified at time of analysis, though the fix commit publicly discloses the exact missing identity and ownership checks.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 15, 2026

Missing actor-identity and object-ownership checks in the Discourse ActivityPub plugin allow remote attackers to edit, delete, or reply to federated posts without the permissions those actions normally require. Because inbound ActivityPub processing trusts the Activity actor declared inside the payload rather than the actor authenticated by the request's HTTP signature, anyone who can produce a valid HTTP signature for any federated actor can operate on posts that actor does not own; the assessed vector (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:N/I:H/A:N) confirms no account on the target Discourse instance is needed, with the impact being unauthorized modification rather than data exposure. No public exploit code has been identified at time of analysis and the issue is not confirmed as actively exploited (not in CISA KEV), though the fixing commit is publicly visible and the affected CPE entry spans all plugin versions prior to that commit. Exposure is limited to Discourse instances that have installed and enabled the ActivityPub federation plugin, since stock Discourse does not ship it.

RemediationAI

Apply the upstream fix by updating the discourse-activity-pub plugin to a revision that contains commit 1c8518b0f2abdf31cbea3e0b242f74d8994a9ba5 - since the fix is delivered as a raw commit rather than a confirmed tagged release, verify the deployed plugin's revision hash rather than relying on a version label, and consult the advisory at https://github.com/discourse/discourse-activity-pub/security/advisories/GHSA-jw39-rch6-mhwf for the vendor's stated guidance. Where an immediate update is not possible, the most effective compensating control is to disable the ActivityPub plugin or turn off inbound federation, which removes the exposed inbox and shared_inbox endpoints entirely (trade-off: federated interaction with remote servers stops working); if federation must remain live, restrict the /ap/inbox and shared_inbox routes at the reverse proxy so that only trusted remote instances can deliver activities - this narrows but does not eliminate the attack surface, since any federated server the attacker controls or impersonates still passes, and it also introduces a maintenance burden as peer instances change. Auditing existing federated posts for unexpected edits, deletions, or replies since the plugin was enabled helps determine whether the missing checks were already exercised. Note that the input data contains no vendor-released patched version number, so no specific fixed release should be assumed.

Affected VersionsENISA

discourse-activity-pub < 1c8518b0f2abdf31cbea3e0b242f74d8994a9ba5

Affects your stack

Find out whether the stacks and servers you run are on an affected version.

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The vulnerability class is CWE-345 (Insufficient Verification of Data Authenticity) and sits in the federation trust boundary of ActivityPub, the W3C protocol Discourse uses to exchange activities with other federated servers. Inbound activities arrive as JSON-LD payloads POSTed to an actor's inbox or the shared_inbox, authenticated with HTTP Signatures; the server verifies the signature on the request but, before the fix, never compared the verifying key's/actor's identity to the actor named in the Activity body, nor checked that this actor owned the object referenced via the attributedTo property. The patch commit 1c8518b0f2abdf31cbea3e0b242f74d8994a9ba5 closes this by propagating signed_actor_ap_id from the inbox and shared_inboxes controllers into the DiscourseActivityPub::Process background job, storing it on the AP activity object, and adding validation: signed_actor_matches? rejects activities whose Activity actor differs from the signed-request actor (signed_actor_must_match_activity_actor), and additional guards enforce that the object's attributedTo matches the Activity actor (attributed_to_must_match_actor) and that the actor owns the object (actor_must_own_object). Object resolution was also tightened so that attribution is only inherited from a parent actor when the attributedTo id resolves to that same actor. The CPE cpe:2.3:a:discourse:discourse-activity-pub:*:*:*:*:*:*:*:* reflects that the flaw applies to all plugin builds before the fix rather than to a single tagged release.

Know when Discourse gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (GitHub_M) PRIMARY 8.6 HIGH
AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N
vuln.today AI 8.6 HIGH

Remote unauthenticated spoofed activity (AV:N/AC:L/PR:N/UI:N); impact is tampering with other users' federated posts (I:H, C:N), affecting objects owned across federation so S:C.

3.1 AV:N/AC:L/PR:N/UI:N/S:C/C:N/I:H/A:N
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Changed
Confidentiality
High
Integrity
None
Availability
None

Lifecycle Timeline

2
Patch available
Oct 15, 2026 - 18:18 EUVD
CVE Published
Oct 15, 2026 - 17:05 cve.org
HIGH 8.6

DescriptionCVE.org

Discourse ActivityPub adds ActivityPub support to Discourse. Prior to commit 1c8518b0f2abdf31cbea3e0b242f74d8994a9ba5, inbound ActivityPub processing does not sufficiently verify that the actor authenticated by the signed request matches the Activity actor and owns the referenced federated post. A remote attacker can exploit these missing identity and ownership checks to edit, delete, or reply to federated posts without the required permissions. This vulnerability is fixed with commit 1c8518b0f2abdf31cbea3e0b242f74d8994a9ba5.

Technical POC Analysis

Bug class: CWE-345, insufficient verification of data authenticity (the advisory page itself lists "No CWEs"; CWE-345 comes from the CVE record).

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

The ActivityPub federation plugin for Discourse, used by community, support and customer-facing forums, contains a missing-authorization flaw that lets any remote party holding a single valid HTTP signature edit, delete or reply to federated posts belonging to other actors. No account on the target forum is required, so the exposure is that of an anonymous internet attacker against an externally reachable component, and only organizations running the plugin with federation enabled are affected. The consequence is loss of content integrity and trust in federated discussions rather than a data breach, and no vendor-released fix is yet available, making interim containment the deciding factor.

Business Impact: High
Compensating Controls

No vendor-released patch identified at time of analysis, so interim mitigations are required: disable the ActivityPub plugin where federation is not essential; block or allowlist inbound ActivityPub delivery at the WAF/reverse proxy; ensure HTTP signature validation is enforced before payloads reach the plugin and reject unsigned or mismatched-actor requests; restrict federation to trusted peer domains; monitor and alert on anomalous edit/delete/reply activity against federated posts; and maintain backups of federated content to recover from tampering. Re-enable full federation only after upgrading to a vendor-patched plugin version.

Threat Intelligence Overview

EPSS Score
0.2%
Top 91% exploitable
Prevalence
Low
optional experimental federation plugin, not enabled on most Discourse installs
Social Media
1
Sightings
Data Quality
5 sources
Confidence: Medium

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
Yes
Human Impact
High

Priority Score

43
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +43
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0
CVE-2025-48954 HIGH POC
8.1 Jun 25

Discourse versions prior to 3.5.0.beta6 contain a reflected cross-site scripting (XSS) vulnerability in social login fun

CVE-2022-46162 CRITICAL POC
9.8 Nov 30

discourse-bbcode is the official BBCode plugin for Discourse. Rated critical severity (CVSS 9.8), this vulnerability is

CVE-2026-27934 HIGH POC
8.7 Mar 19

Unauthorized information disclosure in Discourse discussion platform versions prior to 2026.3.0-latest.1, 2026.2.1, and

CVE-2024-47773 HIGH POC
8.2 Oct 08

Discourse is an open source platform for community discussion. Rated high severity (CVSS 8.2), this vulnerability is rem

CVE-2026-26265 HIGH POC
7.5 Feb 26

Discourse versions prior to 2025.12.2, 2026.1.1, and 2026.2.0 contain an insecure direct object reference (IDOR) in the

CVE-2021-3138 HIGH POC
7.5 Jan 14

In Discourse 2.7.0 through beta1, a rate-limit bypass leads to a bypass of the 2FA requirement for certain forms. Rated

CVE-2026-26077 MEDIUM POC
6.5 Feb 26

Unauthenticated attackers can submit forged webhook payloads to multiple email provider integrations in Discourse versio

CVE-2023-38706 MEDIUM POC
6.5 Sep 15

Discourse is an open-source discussion platform. Rated medium severity (CVSS 6.5), this vulnerability is remotely exploi

CVE-2024-53991 MEDIUM POC
5.9 Dec 19

Discourse is an open source platform for community discussion. Rated medium severity (CVSS 5.9), this vulnerability is r

CVE-2025-48877 CRITICAL
9.8 Jun 09

Discourse versions prior to 3.4.4 (stable), 3.5.0.beta5 (beta), and 3.5.0.beta6-dev (tests-passed) contain a critical vu

CVE-2023-47121 CRITICAL
9.8 Nov 10

Discourse is an open source platform for community discussion. Rated critical severity (CVSS 9.8), this vulnerability is

CVE-2022-39355 CRITICAL
9.8 Oct 26

Discourse Patreon enables syncronization between Discourse Groups and Patreon rewards. Rated critical severity (CVSS 9.8

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy