mediumCVSS 6.3Vulnerability

GHSA-3jvj-v6w2-h948

### Summary Lemmy allows an authenticated low-privileged user to create a link post through `POST /api/v3/post`. When a post is created in a public community, the backend asynchronously sends a Webmention to the attacker-controlled link target. The submitted URL is checked for syntax and scheme, but the audited code path does not reject loopback, private, or link-local destinations before the Webmention request is issued. This lets a normal user trigger server-side HTTP requests toward internal services. ### Details The entry point is the normal post creation API. The user-controlled `url` field is accepted, normalized with `diesel_url_create()`, and only validated with `is_valid_url()`. That validation allows `http` and `https` but does not implement internal address rejection. The post creation flow then schedules Webmention delivery for public communities. This creates a direct source-to-sink path from an externally supplied post URL to a server-side outbound HTTP request. Core vulnerable code path: ```rust // crates/api_crud/src/post/create.rs let url = diesel_url_create(data.url.as_deref())?; if let Some(url) = &url { is_url_blocked(url, &url_blocklist)?; is_valid_url(url)?; } ``` ```rust // crates/utils/src/utils/validation.rs pub fn is_valid_url(url: &Url) -> LemmyResult<()> { let is_valid = ["http", "https", "magnet"].contains(&url.scheme()); if !is_valid { Err(LemmyErrorType::InvalidUrl)? } Ok(()) } ``` ```rust // crates/api_crud/src/post/create.rs if community.visibility == CommunityVisibility::Public { let post = inserted_post.clone(); let url = url.clone(); spawn_try_task(async move { if let Some(url) = url { Webmention::new(post.ap_id.clone().into(), url.into()).send().await?; } Ok(()) }); } ``` These snippets matter because they show that the attacker controls `CreatePost.url`, the only validation is scheme-level, and the resulting URL is later used for server-side Webmention delivery. ### PoC _Complet

Properties

ghsa_id
GHSA-3jvj-v6w2-h948
severity
medium
summary
Lemmy has SSRF in /api/v3/post via Webmention dispatch
cvss_score
6.3
cve_id
GHSA-3jvj-v6w2-h948
cvss_vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L
is_ghsa_only
true
ghsa_published
2026-04-24T15:22:49Z
source_url
https://github.com/advisories/GHSA-3jvj-v6w2-h948
ghsa_updated
2026-04-24T15:22:50Z

Related Entities (4)

HAS_WEAKNESS (1)

[Weakness]Server-Side Request Forgery (SSRF)

REPORTED_BY (1)

[Source]GitHub Advisory Database

VULNERABLE_TO (1)

[Software]rust/lemmy_api_common

AFFECTS (1)

[Software]rust/lemmy_api_common

Explore deeper with Ninja Signal's threat intelligence graph