this post was submitted on 02 Apr 2025
230 points (100.0% liked)

Technology

38493 readers
456 users here now

A nice place to discuss rumors, happenings, innovations, and challenges in the technology sphere. We also welcome discussions on the intersections of technology and society. If it’s technological news or discussion of technology, it probably belongs here.

Remember the overriding ethos on Beehaw: Be(e) Nice. Each user you encounter here is a person, and should be treated with kindness (even if they’re wrong, or use a Linux distro you don’t like). Personal attacks will not be tolerated.

Subcommunities on Beehaw:


This community's icon was made by Aaron Schneider, under the CC-BY-NC-SA 4.0 license.

founded 3 years ago
MODERATORS
 

Collection of potential security issues in Jellyfin This is a non exhaustive list of potential security issues found in Jellyfin. Some of these might cause controversy. Some of these are design fla...

(page 2) 50 comments
sorted by: hot top controversial new old
[–] [email protected] 21 points 1 week ago (4 children)

For those unaware, it's a good idea to be using a service like tailscale (self hosted=headscale if you don't want to make your login credentials tied to apple, google, or Microsoft). It's a VPN but a lot simpler to use.

load more comments (4 replies)
[–] [email protected] 16 points 1 week ago* (last edited 1 week ago) (1 children)

I remember when they were arguing that you don't need a VPN or proxy basic authentication in front of it because their team knows how to write secure code...

[–] [email protected] 9 points 1 week ago

There's a bug (closed as won't fix) where proxy basic authentication breaks jellyfin. You can't use it.

[–] [email protected] 15 points 1 week ago* (last edited 6 days ago) (1 children)

~~Many of these have already been fixed FWIW, it's not a collection of open issues.~~ Nevermind, they have only been closed, not fixed. Yikes.

[–] [email protected] 15 points 1 week ago* (last edited 1 week ago) (3 children)

No. None of the items are closed. Click the "closed" items. All of them are "Not planned. Duplicate, see 5415".

Edit: The biggest issue of unauthenticated streaming of content... https://github.com/jellyfin/jellyfin/issues/13777

Last opened last week. closed as duplicate. it's unaddressed completely.

load more comments (3 replies)
[–] [email protected] 14 points 1 week ago (2 children)

If my server is already open to everyone, what kind of potential attacks do i need to be worried a about? I dont keep personal files on my streaming server, its just videos, music and isos/roms. I dont restrict sign ups, so the idea of an unauthorized user doing something like download a video is a non issue for me really.

I do see where there could be problems for folks running jfin on the same server they keep private photos or for people who charge users for acess, but thats not me.

Am i missing something or is the main result of most of these that a "malicious" actor could dowload files jellyfin has access to without authentication?

[–] [email protected] 18 points 1 week ago* (last edited 1 week ago) (1 children)

With unrestricted signups, they can obtain their own account easily. With their own account they can enumerate all your other users.

If they have their own account they can just find your instance, make a login, collect all the proof they need that you're hosting content you don't own (illegally own) then serve you a court summons and ruin your life.

I wouldn't worry about the vulnerability in the link since your already wide open. But I wouldn't leave Jellyfin wide open either. Movie and TV studios are quite litigious.

I hope you're at least gatekeeping behind a vpn or something.

Edit: typo

[–] [email protected] 9 points 1 week ago (1 children)

Well it's hosted in The Netherlands and I did take some steps to protect my own identity in regards to registration info, but if the studios did take an interest i'd probably have some fun with it by decaliring bankrupcy and dragging out the appeals.

[–] [email protected] 5 points 1 week ago (1 children)

I mean, sure... but you'd actually have to reasonably liquidate most of your assets at that point. You can't just "claim" bankruptcy and do literally nothing to sate your debts. Of course this is different on a jurisdictional basis... but overall, you have to sell a lot of your stuff in order to do a proper bankruptcy.

https://www.financestrategists.com/financial-advisor/bankruptcy/what-can-you-keep-after-filing-bankruptcy

It can decimate any savings you have for retirement.

[–] [email protected] 5 points 1 week ago (2 children)
load more comments (2 replies)
[–] [email protected] 12 points 1 week ago* (last edited 1 week ago)

I guess the worst thing is that your server starts attacking the US military servers because you've become part of a botnet.

That happened to my friend one time when I installed Linux on his computer. He made the username and password the same 4-character word. Got a letter from the DoD.

I dont think they would be so forgiving these days. Especially if you're brown.

[–] [email protected] 13 points 1 week ago

@Scary_le_Poo I wouldn't say never, but in most cases, you're best served by sticking it behind wireguard- but this is also true of any service or tool you don't intend to make available to the greater internet

[–] [email protected] 12 points 1 week ago (4 children)

Can someone ELI5 this for me? I have a jellyfin docker stack set up through dockstarter and managed through portainer. I also own a domain that uses cloudflare to access my Jellyfin server. Since everything is set up through docker, the containers volumes are globally set to only have access to my media storage. Assuming that my setup is insecure, wouldn't that just mean that "hackers" would only be able to stream free media from my server?

[–] [email protected] 20 points 1 week ago* (last edited 1 week ago) (2 children)

If you use normalized paths/file names (through *Arr stacks or docker mounts or otherwise common tools), then the hash that jellyfin sets up when it imports that media can be guessable. If someone was to go and precompile a list of hashes for content that they're looking for at common paths that people store their files at, they can ask your server for those hashes, and if their list is sufficiently large enough to include the path that you used, your jellyfin instance WILL RESPOND WITHOUT AUTHENTICATION.

I've been using this example because it shows how silly this is.

In the context of Sony’s top 1000 movies, they can pre-compile the top 100 likely paths for the file (/movies, /mnt/movies, etc) then run the 100000 hash check through scripts against your instance. How long does it take to let a crawler collect http statuses on 100000 page loads? Now put that to a bot that gets jellyfin instances from a tool like shodan and add more hashes. If you flag, now onus is on you to prove you have license for content and they would have a case that you distributing (albeit weak) since your server was open to the public. This is child’s play level abuse-able. Risking that something easy like this isn’t being abused by Sony and others (you know… willing to install a rootkit on your computer types…) is a very silly stance to take.

The answer to some of this is that you can just hide the content on a more complicated and less likely to guess path. That will sufficiently change the MD5 hashes enough that you should be more or less unguessable... Instead of using /mnt/media/movies (or /media/movies, or /movies/, etc...) make the path /mnt/k9RKiQvUwLVCjSqhb2gWTwstgKuDJx59S3J35eFzW2dgSSp84EG7PPAhf2MwCySt/media/movies. (obviously don't use this one... use a random generator. Make your own.)

The real answer should be that Jellyfin requires that all those endpoint need authorization/login. But their answer is "We don't want to break backwards compatibility. So we won't." Which is a bit silly of an answer. Those who use the default installation and organize their content with *arr suites (or with default docker settings/guide settings), are most likely to have guessable MD5 hashes and are most at risk.

Edit: Oh and the other point... if the "response" against this is "well that would take too long, or be too hard. You'd need a lot of money to find all these instances and test them...". We're talking about the likes of Sony... The ones that installed rootkits on peoples computers for daring to put a CD into a CD-ROM drive. They're litigious folk, and will bury you in paper and sue you to oblivion. It's not a lot of machine time to test a single server. Setting up a couple dozen scanners and just letting it go to find content on it's own isn't that bad from a computational standpoint.

And another argument I've seen here... "Well if they hack your server then that's illegal too, can't make a lawsuit out of that"... Except this is normal web operations. Bots and site scanners aren't illegal. Nor do they break any authentication mechanism (which is illegal) to do this. Specifically putting this behind authentication would make you correct. But Jellyfin didn't do that (yet). So guess what. It's perfectly possible for them to setup a few scanners across a few servers and do this 100% legally.

Security through obscurity isn't security.

Edit2: Clarification on not using the path I just gave... make up your own random gibberish.

load more comments (2 replies)
load more comments (3 replies)
[–] [email protected] 12 points 1 week ago (21 children)

Who has the technical wherewithal to run Jellyfin but leaves access on the open web? I get that sharing is part of the point, but no one's putting their media collection on an open FTP server.

The level of convenience people expect without consequences is astounding. Going to be away for home for a few days? Load stuff onto an external SSD or SD card. Phoning home remotely makes no sense.

[–] [email protected] 12 points 1 week ago

Friends, family using Jellyfin is the reason many have it directly available (and not behind VPN for example).

load more comments (19 replies)
[–] [email protected] 12 points 1 week ago

PluginsController only requires user privileges for potentially sensitive actions

  • Includes, but is not limited to: Listing all plugins on the server without being admin, changing plugin settings, listing plugin settings without being admin. This includes the possibility of retrieving LDAP access credentials without admin privileges.

Outch

[–] [email protected] 8 points 1 week ago (6 children)

I'm not smart, can you tell me if having it behind a reverse proxy with certs and everything fixes any of these flaws?

[–] [email protected] 20 points 1 week ago

Many of the issues are related to unauthenticated requests. Even though your reverse proxy provides SSL, Jellyfin still won’t know the difference between you and a random internet user. So, no, your setup doesn’t mitigate the security risks much at all.

[–] [email protected] 13 points 1 week ago

short answer: no, not really

long answer, here's an analogy that might help:

you go to https://yourbank.com/ and log in with your username and password. you click the button to go to Online Bill Pay, and tell it to send ACME Plumbing $150 because they just fixed a leak under your sink.

when you press "Send", your browser does something like send a POST request to https://yourbank.com/send-bill-payment with a JSON blob like {"account_id": 1234567890, "recipient": "ACME Plumbing", "amount": 150.0} (this is heavily oversimplified, no actual online bank would work like this, but it's close enough for the analogy)

and all that happens over TLS. which means it's "secure". but security is not an absolute, things can only be secure with a particular threat model in mind. in the case of TLS, it means that if you were doing this at a coffee shop with an open wifi connection, no one else on the coffeeshop's wifi would be able to eavesdrop and learn your password.

(if your threat model is instead "someone at the coffeeshop looking over your shoulder while you type in your password", no amount of TLS will save you from that)

but with the type of vulnerability Jellyfin has, someone else can simply send their own POST request to https://yourbank.com/send-bill-payment with {"account_id": 1234567890, "recipient": "Bob's Shady Plumbing", "amount": 10000.0}. and your bank account will process that as you sending $10k to Bob's Shady Plumbing.

that request is also over TLS, but that doesn't matter, because that's security for a different level of the stack. the vulnerability is that you are logged in as account 1234567890, so you should be allowed to send those bill payment requests. random people who aren't logged in as you should not be able to send bill payments on behalf of account 1234567890.

[–] [email protected] 11 points 1 week ago

Not really, no. These are application flaws. Caddy will happily do its job and just let bad actors abuse them. (Unless you mean mTLS certs, then Caddy would only respond to those having a client certificate, which hopefully reduces the number of bad actors to your users😉)

[–] [email protected] 6 points 1 week ago* (last edited 1 week ago) (7 children)

Not unless the reverse proxy adds some layer of authentication as well. Something like HTTP basic auth, or mTLS (AKA 2-way TLS AKA client certificates)

For nginx: https://docs.nginx.com/nginx/admin-guide/security-controls/configuring-http-basic-authentication/

so if I add a user ”john” with password “mypassword” to video.example.com, you can try adding the login as: “https://john:[email protected]/

Most HTTP clients (e.g. browsers) support adding login like that. I don’t know what other jellyfin clients do that.

The other option is to set up a VPN (I recommend wireguard)

load more comments (7 replies)
[–] [email protected] 6 points 1 week ago (4 children)

I'm also an absolute dumbfuck. And I can confidently tell you, as a matter of fact, that I don't know.

I'm running SWAG reverse proxy, my DNS is not tunneled, I share my Jellyfin with others outside my network.

My primary concern is my server gets hacked, or I get charged with distributing 'public domain movies'

load more comments (4 replies)
load more comments (1 replies)
load more comments
view more: ‹ prev next ›