Skip to main content

Movary CVE-2026-40348

| EUVDEUVD-2026-23617 HIGH
Server-Side Request Forgery (SSRF) (CWE-918)
2026-04-18 GitHub_M
7.7
CVSS 3.1 · GitHub Advisory
Share

Severity by source

GitHub Advisory PRIMARY
7.7 HIGH
AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N

Primary rating from GitHub Advisory · only source for this CVE.

CVSS VectorGitHub Advisory

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

Lifecycle Timeline

8
Patch released
Apr 27, 2026 - 14:21 nvd
Patch available
Patch available
Apr 18, 2026 - 01:01 EUVD
Analysis Updated
Apr 18, 2026 - 00:28 vuln.today
v2 (cvss_changed)
Re-analysis Queued
Apr 18, 2026 - 00:22 vuln.today
cvss_changed
Analysis Generated
Apr 18, 2026 - 00:18 vuln.today
EUVD ID Assigned
Apr 18, 2026 - 00:15 euvd
EUVD-2026-23617
Analysis Generated
Apr 18, 2026 - 00:15 vuln.today
CVE Published
Apr 18, 2026 - 00:01 nvd
HIGH 7.7

DescriptionGitHub Advisory

Movary is a self hosted web app to track and rate a user's watched movies. Prior to version 0.71.1, an ordinary authenticated user can trigger server-side requests to arbitrary internal targets through POST /settings/jellyfin/server-url-verify. The endpoint accepts a user-controlled URL, appends /system/info/public, and sends a server-side HTTP request with Guzzle. Because there is no restriction on internal hosts, loopback addresses, or private network ranges, this can be abused for SSRF and internal network probing. Any ordinary authenticated user can use this endpoint to make the server connect to arbitrary internal targets and distinguish between different network states. This enables SSRF-based internal reconnaissance, including host discovery, port-state probing, and service fingerprinting. In certain deployments, it may also be usable to reach internal administrative services or cloud metadata endpoints that are not directly accessible from the outside. Version 0.71.1 fixes the issue.

AnalysisAI

Server-Side Request Forgery in Movary movie tracking application allows authenticated users to probe internal networks and metadata endpoints. The /settings/jellyfin/server-url-verify endpoint accepts user-controlled URLs without validating against private IP ranges, enabling internal reconnaissance through the server's context. Affects all versions prior to 0.71.1. EPSS data not available, but exploitation requires only low-privilege authentication (CVSS PR:L) with no attack complexity, making this readily exploitable by any registered user. Upstream fix confirmed in version 0.71.1 via GitHub commit d459b35.

Technical ContextAI

This vulnerability exploits the Jellyfin server URL verification feature in Movary, a self-hosted PHP web application for movie tracking. The endpoint uses the Guzzle HTTP client library to validate user-provided Jellyfin server URLs by appending /system/info/public and making an outbound request. The root cause is CWE-918 (Server-Side Request Forgery) - the application fails to implement network allow-listing or deny-listing before making HTTP requests. Because Guzzle follows user-controlled URLs without restriction, attackers can specify loopback addresses (127.0.0.1, localhost), link-local addresses (169.254.x.x), or RFC 1918 private ranges (10.x.x.x, 192.168.x.x, 172.16-31.x.x) to reach internal services. The scope change (S:C in CVSS vector) indicates the vulnerable component can impact resources beyond its security scope, which is accurate for SSRF - the web application becomes a proxy to internal infrastructure it shouldn't normally access.

RemediationAI

Upgrade Movary to version 0.71.1 or later, which implements URL validation to prevent SSRF attacks (release notes: https://github.com/leepeuker/movary/releases/tag/0.71.1, fix commit: https://github.com/leepeuker/movary/commit/d459b3513293d41254f7093aef07010a8e5dcf04, patch implementation: https://github.com/leepeuker/movary/pull/751). If immediate upgrade is not possible, implement network-level controls: configure egress firewall rules on the Movary server to block outbound connections to RFC 1918 private ranges (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16), loopback (127.0.0.0/8), link-local (169.254.0.0/16), and cloud metadata endpoints (169.254.169.254/32 for AWS/Azure/GCP). Note this mitigation may break legitimate Jellyfin integrations if your Jellyfin server is on a private IP - in such cases, implement allowlist rules for only your specific Jellyfin server IP. Alternatively, restrict access to the /settings/jellyfin/server-url-verify endpoint to only administrative users via web server configuration (Apache/Nginx location block with auth requirements), though this reduces functionality for regular users. Monitor HTTP access logs for requests to /settings/jellyfin/server-url-verify with suspicious URL patterns (IP addresses instead of hostnames, non-standard ports, internal IP ranges).

Share

CVE-2026-40348 vulnerability details – vuln.today

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