Your RSA-2048 keys break in 2030. Find every one of them before attackers do.
🦀 crates.io
Not in CISA KEV

GHSA-wr2m-38xh-rpc9 lemmy_server

Fix: LemmyNet/lemmy#1809

GHSA-wr2m-38xh-rpc9 is a security vulnerability in lemmy_server. A fix is available for lemmy_server — see the affected versions and patch details below.

Lemmy user purging users or communities or banning users can delete images they didn't upload/exclusively use

Published
Apr 8, 2025
Updated
Apr 8, 2025
Affected
1 pkg
Patched
1 / 1
Exploits
None indexed
Exploitation data as of Apr 8, 2025 · OSV.dev, FIRST.org (EPSS)

Real-World Exposure

1 pkg affected
🦀lemmy_server

Real-time download stats are indexed for npm and PyPI packages. This vulnerability affects crates.io packages — download data is not available via public APIs for these ecosystems.

Description

Summary

An improper uploaded media ownership check can result in inadvertent deletion of media when a user is banned with content removal or purged. This can lead to deletion of media that was not uploaded by the banned/purged user. This also applies to purged communities, in which case all media posted in that community will get deleted without proper ownership check. This is limited to media with an image/* content-type returned by pict-rs.

Details

Lemmy did not associate users with media uploads until version 0.19.0 (#3927). Back when the first parts of content purging were implemented for 0.17.0 (#1809), it was therefore not possible to properly identify media belonging to a specific user for situations in which this data should get erased from pict-rs, Lemmy's media storage backend.

Pict-rs deduplicates uploaded files transparently. As a result, it has two types of media deletion. A regular deletion will only remove the referenced alias, and if there are not other aliases pointing to the same file, the backing file will also be deleted. A purge on the other hand will delete all aliases pointing to the specified file, as well as the file itself.

The logic implemented in 0.17.0 iterated over media URLs related to users and communities when purging them and purged them from pict-rs. This results in a full deletion of the backing media, even if either the same URL was the result of an upload by a different user, or the same media being uploaded by another user with a different alias. For user purges, Lemmy iterated over all posts they created and applied this to all media referenced in post URLs and post thumbnails. For community purges, this applied to all posts within this community.

Additionally, the deletion of user avatars, banners, as well as the media from all their posts was implemented when users were banned with content removal. This includes local bans and also bans received via federation, when a user gets banned on their home instance.

The function for purging images from pict-rs performs a check at the start to verify that the media Content-Type header returned by pict-rs starts with image/, which limits this to not affect other media types supported by Lemmy and pict-rs, such as videos.

Impact

Instances with open federation

The vast majority of Lemmy instances has open federation, which means that this can be exploited remotely without any authentication.

Instances with limited or no federation

Exploitation requires user interaction by an admin of the targeted instance or a federation-linked instance if federation is enabled. It may also require authentication, as instances may not have open registrations.

Affected Packages

1 total 1 fixed
EcosystemPackageVulnerable rangeFix
🦀crates.iolemmy_server0.17.0&&< 0.19.110.19.11cargo update -p lemmy_server --precise 0.19.11

Detection & mitigation playbook

Open-source dependency
  1. Detect

    Scan your dependency tree (package-lock.json, pnpm-lock.yaml, requirements.txt, go.sum, etc.) for lemmy_server, including transitive dependencies — a direct dependency you never call can still pull in a vulnerable version.

  2. Fix

    Update lemmy_server to 0.19.11 or later, then make sure no transitive (indirect) dependency still pins the vulnerable range — O3 confirms GHSA-wr2m-38xh-rpc9 is resolved across your whole dependency graph.

  3. Workarounds

    If you can't upgrade right away: gate or disable the affected feature, validate untrusted input at the boundary, and avoid passing attacker-controlled data into the vulnerable path. O3's runtime protection blocks exploitation in production as an interim safeguard until the upgrade lands.

  4. How O3 protects you

    O3 Security's impact-aware SCA analyses which vulnerable code paths your application actually calls, so a match like GHSA-wr2m-38xh-rpc9 can be triaged on real exposure rather than presence alone.

Tailored to GHSA-wr2m-38xh-rpc9. Runtime protection reduces exposure until a permanent patch is applied and verified — it complements patching, it doesn't replace it.

Frequently Asked Questions

### Summary An improper uploaded media ownership check can result in inadvertent deletion of media when a user is banned with content removal or purged. This can lead to deletion of media that was not uploaded by the banned/purged user. This also applies to purged communities, in which case all media posted in that community will get deleted without proper ownership check. This is limited to media with an `image/*` content-type returned by pict-rs. ### Details Lemmy did not associate users with media uploads until version 0.19.0 ([#3927](https://github.com/LemmyNet/lemmy/pull/3927)). Back whe
O3 Security · Impact-Aware SCA

Is GHSA-wr2m-38xh-rpc9 in your dependencies?

O3 Security finds GHSA-wr2m-38xh-rpc9 across crates.io dependencies, including transitive ones, and its impact-aware SCA ranks findings by whether your code actually calls the vulnerable path.

GHSA-wr2m-38xh-rpc9: lemmy_server | O3 Security