CVE-2026-54741
Executive Summary
CVE-2026-54741 is an authorization bypass vulnerability in Lemmy, a link aggregator and forum platform for the fediverse. The flaw allows a user who has been blocked by another user to continue editing private messages that were sent prior to the block, effectively circumventing the intended block functionality. This creates a persistent harassment channel where a blocked sender can repeatedly modify the content of an existing private message thread that the recipient can still view. The vulnerability affects all Lemmy versions prior to 0.19.19 and 1.0.0-alpha.18, and the vendor has released patched versions that address the missing authorization check. The CVSS score is N/A, though the underlying weakness is classified as CWE-862 (Missing Authorization).
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Technical Analysis
The vulnerability resides in the private message modification workflow. The NVD description indicates a fundamental asymmetry in authorization enforcement between two distinct code paths:
Creation path (
create_private_message): Prior to inserting a new private message into the database, this function explicitly consults the recipient's block list usingPersonActions::read_block. If the recipient has blocked the sender, the message creation is rejected. This is the intended behavior — blocking a user prevents them from initiating new contact.Edit path (
edit_private_messageincrates/api/api_crud/src/private_message/update.rs): This function only verifies that the caller is the original message creator via a check againstorig_private_message.creator_id. It performs no check against the recipient's block list. Once a private message exists in the database, a blocked sender can continue to invoke the edit operation, modifying the content of that historical message.
The attack mechanism is straightforward: the authorization check on the edit path is incomplete. The recipient's block status is only validated at the moment of message creation, not at the moment of message update. The update operation writes new content to the existing message row and returns a modified PrivateMessageView object without consulting the recipient's block list.
From a code-level perspective, the flaw is a missing authorization check (CWE-862). The edit endpoint fails to enforce the same recipient-block validation that the creation endpoint enforces. This is a classic example of inconsistent access control enforcement across similar operations — the developer implemented the block check for one code path but omitted it from a parallel code path that handles a related but distinct operation.
The attack surface is the Lemmy API's private message editing functionality, which is exposed on federated instances. Because Lemmy operates on the fediverse model, instances communicate with one another, and the edit operation may be reachable through both local API calls and federation protocols. The vulnerability requires an authenticated account (the blocked sender's account) — it is not exploitable by unauthenticated attackers.
Exploitation Scenarios
The attack chain for CVE-2026-54741 is as follows:
Step 1 — Reconnaissance/target identification: The attacker must have an existing private message thread with the target recipient. This means the attacker previously sent the recipient a private message, and the recipient has since blocked the attacker. The attacker may already be aware that they were blocked (the platform may inform them) or may discover this when attempting to send a new message and receiving a rejection.
Step 2 — Triggering the flawed code path: The attacker invokes the private message edit operation on the pre-existing message. Because the edit path (edit_private_message) only checks creator_id and does not consult the recipient's block list, the request passes the authorization gate. The block check that would normally prevent continued contact via the creation path is entirely bypassed.
Step 3 — Payload execution at the vulnerability-class level: The attacker modifies the content of the existing private message. Since the vulnerability is a missing authorization check rather than an injection flaw, the "payload" is simply new message content. The attacker can repeatedly invoke the edit operation, changing the message content as many times as they wish. Each iteration returns a refreshed PrivateMessageView to the recipient, who continues to see the message in their private message inbox.
Step 4 — Post-exploitation impact: The attacker gains a persistent harassment channel. The recipient's block action is effectively neutered — they cannot prevent the attacker from rewriting content in a conversation thread they can still view. This is particularly impactful in the fediverse context, where private messages may be federated across instances, potentially exposing the modified content to other services or amplifying the harassment. The attacker can escalate from text-based harassment to include threatening content, as the message thread remains visible to the recipient with each successive edit.
No public PoC is available; the attack chain is inferred from the vulnerability class and the NVD description. The exploitation requires only authenticated access to the Lemmy instance, making it trivially easy to execute once the attacker holds a valid account and has a pre-existing message thread with the target.
Impact Assessment
Business impact: Lemmy is used by online communities and forums operating on the fediverse. The impact is primarily a user-safety and platform-integrity issue. The block feature is a core trust and safety mechanism — users block others to stop harassment. This CVE fundamentally undermines that mechanism, allowing persistent harassment through a channel the victim believes is closed. For self-hosted communities, this can lead to user churn, reputational damage, and potential legal exposure if the platform is used within a jurisdiction with strict anti-harassment laws.
Affected systems: All Lemmy instances running versions prior to 0.19.19 (for the 0.x release line) and prior to 1.0.0-alpha.18 (for the 1.0.0 alpha release line). Given that Lemmy is a decentralized platform, the blast radius is potentially large — any instance with active users and blocked-user relationships is exposed. The impact scales with community size and the prevalence of blocking interactions.
Blast radius: The vulnerability requires a pre-existing relationship (a message thread) between attacker and victim, and the attacker must be the one who originally sent the message. This narrows the pool of potential victims to users who have previously received private messages from individuals they later blocked. However, within that pool, the impact is complete — there is no mitigation available to the victim at the application level.
CVSS assessment: CVSS score is N/A per the CVE record. An estimated vector of CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N is provided for contextual purposes only — network attack vector, low attack complexity, low privileges required (authenticated user), no user interaction, unchanged scope, no confidentiality impact, low integrity impact (message content can be altered), and no availability impact. The low integrity score reflects that the attacker can only modify their own pre-existing messages, not create new ones or alter other users' data.
Detection Guidance
Sigma Rule
title: Lemmy Private Message Edit by Blocked Sender
id: 73a66b2e-ef37-4a3b-9b2d-5e4a1c9f6d82
status: experimental
description: >
Detects attempts to edit a private message in Lemmy where the sender has been
blocked by the recipient. This may indicate exploitation of CVE-2026-54741.
author: Valtersit Threat Intelligence
date: 2026/02/15
logsource:
category: application
product: lemmy
service: api
detection:
selection:
http.response.status_code: 200
http.url|contains: /private_message
http.method: PUT
lemmy.operation: edit_private_message
filter_known_ok:
lemmy.recipient_blocked_sender: false
condition: selection and not filter_known_ok
level: high
falsepositives:
- Legitimate edits to messages in threads where the recipient has not blocked the sender
- Race conditions between message edit and user block actions
fields:
- src.ip
- user.name
- lemmy.private_message_id
tags:
- cve-2026-54741
- cwe-862
- attack.defense_evasion
YARA Rule
rule Lemmy_CVE_2026_54741_Edit_Path_Block_Check_Bypass
{
meta:
author = "Valtersit Threat Intelligence"
description = "Detects source code patterns indicative of CVE-2026-54741 missing block check in edit_private_message"
date = "2026-02-15"
cve = "CVE-2026-54741"
cwe = "CWE-862"
severity = "high"
strings:
$edit_fn = "edit_private_message" ascii nocase
$create_fn = "create_private_message" ascii nocase
$read_block = "PersonActions::read_block" ascii nocase
$creator_check = "creator_id" ascii nocase
$update_path = "private_message/update.rs" ascii nocase
$orig_msg = "orig_private_message" ascii nocase
condition:
$edit_fn and $creator_check and $update_path and not ($read_block within 500 of $edit_fn)
or ($create_fn and $read_block)
}
Suricata IDS Rule
alert http any any -> any any (msg:"LEMMY CVE-2026-54741 Private Message Edit Bypass"; flow:established,to_server; http.method; content:"PUT"; http.uri; content:"private_message"; startswith; http.user_agent; content:"lemmy"; nocase; sid:10054741; rev:1; metadata:cve CVE-2026-54741, cwe CWE-862; reference:url,https://nvd.nist.gov/vuln/detail/CVE-2026-54741;)
Elastic Detection
// EQL rule to detect repeated edits to private messages by a single sender
sequence by user.name with maxspan=1h
[any where process.name == "lemmy-server" and
http.request.method == "PUT" and
match(url.path, "*private_message*")]
[any where process.name == "lemmy-server" and
http.request.method == "PUT" and
match(url.path, "*private_message*")]
Splunk SPL Query
index=lemmy sourcetype=lemmy:api
method=PUT
uri_path=*private_message*
| stats count by user, private_message_id, src_ip
| where count > 3
| table _time, user, private_message_id, src_ip, count
| sort - count
Wazuh OSSEC Rule
<group name="lemmy,">
<rule id="100547" level="12">
<decoded_as>json</decoded_as>
<field name="http.method">PUT</field>
<field name="url" type="pcre2">private_message</field>
<description>Lemmy CVE-2026-54741: Possible private message edit by blocked sender</description>
<group>cve-2026-54741,cwe-862,access_control,</group>
<mitre>
<id>T1190</id>
</mitre>
</rule>
</group>
Mitigation & Patch Guidance
Patch confidence: 0/4 — UNPATCHED per tracked sources. However, the NVD description explicitly states the issue is fixed in versions 0.19.19 and 1.0.0-alpha.18.
Immediate mitigations:
- Upgrade to the patched Lemmy 0.19.19 (for the 0.x line) or Lemmy 1.0.0-alpha.18 (for the 1.0.0 alpha line) immediately. These releases contain the fix that adds the recipient block list check to the
edit_private_messagepath. - As a temporary measure, if an upgrade cannot be performed immediately, disable private message editing functionality at the reverse proxy or application firewall level. This will prevent all edits, not just those from blocked senders, but will close the attack path.
- Monitor instance logs for anomalous PUT requests to private message endpoints, particularly from accounts that have been blocked by their recipients.
- Upgrade to the patched Lemmy 0.19.19 (for the 0.x line) or Lemmy 1.0.0-alpha.18 (for the 1.0.0 alpha line) immediately. These releases contain the fix that adds the recipient block list check to the
Patch/upgrade steps:
- The vendor has confirmed the fix in the stated versions. Obtain the release artifacts from the official Lemmy GitHub repository or your Linux distribution's package manager.
- Back up the database before upgrading.
- Follow the standard Lemmy upgrade procedure for your deployment method (Docker, binary, or source build).
- After upgrade, verify that the
edit_private_messagefunction now callsPersonActions::read_blockbefore applying edits.
Long-term hardening:
- Review access control policies across all API operations. This vulnerability highlights the risk of inconsistent authorization checks between parallel code paths (create vs. update).
- Implement automated tests that verify block-list enforcement is consistent across all message-related operations (create, edit, delete, reply).
- Consider federating only sanitized private message data to prevent cross-instance amplification of harassment content.
- Subscribe to the Lemmy security advisory feed to receive timely notifications of future fixes.
References
- NVD Entry: https://nvd.nist.gov/vuln/detail/CVE-2026-54741
- Lemmy GitHub Repository (Release Notes): https://github.com/LemmyNet/lemmy/releases — refer to versions 0.19.19 and 1.0.0-alpha.18 for the fix.
- Lemmy Official Website: https://join-lemmy.org — contains deployment and upgrade documentation.
- CWE-862 (Missing Authorization): https://cwe.mitre.org/data/definitions/862.html
- MITRE ATT&CK T1190 (Exploit Public-Facing Application): https://attack.mitre.org/techniques/T1190/
Threat actor campaigns / in-the-wild evidence: No known active exploitation campaigns have been reported for this CVE as of the time of writing. The CVE is not listed on the CISA Known Exploited Vulnerabilities Catalog. Exploit code availability is unknown, but given the simplicity of the flaw (a missing check in an authenticated edit function), weaponization is likely to be trivial for any attacker with knowledge of the codebase. Administrators should treat the vulnerability as likely to be exploited in the near term given the harassment use case.
What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.