CVE-2024-43801

4.6 MEDIUM

📋 TL;DR

Jellyfin's user profile image upload accepts SVG files that can contain malicious JavaScript. When an admin user views such an image outside the Jellyfin Web UI (e.g., via browser 'view image'), the script can steal their AccessToken from browser LocalStorage and use it to elevate privileges to administrator. This affects all Jellyfin instances with vulnerable versions where SVG uploads are enabled.

💻 Affected Systems

Products:
  • Jellyfin
Versions: Versions before 10.9.10
Operating Systems: All platforms running Jellyfin (Linux, Windows, macOS, Docker, etc.)
Default Config Vulnerable: ⚠️ Yes
Notes: Vulnerability exists if SVG uploads are enabled (default in Jellyfin). No specific OS or configuration changes are required beyond running a vulnerable version.

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

An attacker gains administrator access to the Jellyfin server, allowing full control over media, users, and server configuration.

🟠

Likely Case

Limited impact due to the requirement for an admin to manually view the SVG outside the Web UI; most attacks would fail at this step.

🟢

If Mitigated

With proper patching, SVG files are treated as attachments and downloaded instead of viewed, preventing LocalStorage access and exploitation.

🌐 Internet-Facing: MEDIUM - Internet-facing instances are accessible to attackers, but exploitation requires admin interaction, reducing likelihood.
🏢 Internal Only: LOW - Internal-only deployments have reduced attack surface, though insider threats or compromised accounts could still attempt exploitation.

🎯 Exploit Status

Public PoC: ⚠️ Yes
Weaponized: LIKELY
Unauthenticated Exploit: ✅ No
Complexity: MEDIUM

Exploit requires an attacker to upload a malicious SVG as a user profile image and trick an admin into viewing it outside the Web UI (e.g., via browser). Public proof-of-concept details are available in the advisory links.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: 10.9.10

Vendor Advisory: https://github.com/jellyfin/jellyfin/security/advisories/GHSA-vcmh-9wx9-rfqh

Restart Required: Yes

Instructions:

1. Backup your Jellyfin data and configuration. 2. Upgrade Jellyfin to version 10.9.10 or later using your package manager (e.g., apt, yum, Docker pull). 3. Restart the Jellyfin service to apply changes. 4. Verify the upgrade by checking the version in the Web UI or via command line.

🔧 Temporary Workarounds

Disable SVG uploads via configuration

all

Modify Jellyfin configuration to block SVG file uploads for user profile images, preventing malicious SVG files from being uploaded.

Edit Jellyfin's configuration file (e.g., /etc/jellyfin/system.xml) and set allowed image extensions to exclude .svg, or use Web UI settings if available.

Restrict admin image viewing

all

Educate administrators to avoid viewing user profile images outside the Jellyfin Web UI, reducing the chance of triggering the exploit.

🧯 If You Can't Patch

  • Disable user profile image uploads entirely in Jellyfin settings to prevent SVG file uploads.
  • Implement network segmentation to isolate Jellyfin server from untrusted users and limit admin access to trusted networks only.

🔍 How to Verify

Check if Vulnerable:

Check the Jellyfin version via the Web UI (Dashboard > Server > General) or command line (e.g., 'jellyfin --version' or check package version). If version is below 10.9.10, it is vulnerable.

Check Version:

jellyfin --version  # or check via package manager like 'apt list --installed | grep jellyfin' on Linux

Verify Fix Applied:

After upgrading, confirm version is 10.9.10 or higher. Test by uploading an SVG file as a user profile image; it should be downloaded as an attachment, not rendered in the browser.

📡 Detection & Monitoring

Log Indicators:

  • Unusual SVG file uploads to user profile images, especially from non-admin users.
  • API calls from unexpected sources attempting privilege escalation using stolen tokens.

Network Indicators:

  • HTTP requests for SVG files with suspicious JavaScript content in payloads.
  • Outbound connections from Jellyfin server to unknown IPs if token exfiltration occurs.

SIEM Query:

source="jellyfin.log" AND ("upload" AND ".svg") OR ("AccessToken" AND "elevate")

🔗 References

📤 Share & Export