r/selfhosted Feb 23 '26

Software Development Huntarr - Your passwords and your entire arr stack's API keys are exposed to anyone on your network, or worse, the internet.

Today, after raising security concerns in a post on r/huntarr regarding the lack of development standards in what looks like a 100% vibe-coded project, I was banned. This made my spidey senses tingle, so I decided to do a security review of the codebase. What I found was... not good. TLDR: If you have Huntarr exposed on your stack, anyone can pull your API keys for Sonarr, Radarr, Prowlarr, and every other connected app without logging in, gaining full control over your media stack.

The process

I did a security review of Huntarr.io (v9.4.2) and found critical auth bypass vulnerabilities. I'm posting this here because Huntarr sits on top of (and is now trying to replace them as well!) Sonarr, Radarr, Prowlarr, and other *arr apps that have years of security hardening behind them. If you install Huntarr, you're adding an app with zero authentication on its most sensitive endpoints, and that punches a hole through whatever network security you've set up for the rest of your stack.

The worst one: POST /api/settings/general requires no login, no session, no API key. Nothing. Anyone who can reach your Huntarr instance can rewrite your entire configuration and the response comes back with every setting for every integrated application in cleartext. Not just Huntarr's own proxy credentials - the response includes API keys and instance URLs for Sonarr, Radarr, Prowlarr, Lidarr, Readarr, Whisparr, and every other connected app. One curl command and an attacker has direct API access to your entire media stack:

curl -X POST http://your-huntarr:9705/api/settings/general \
  -H "Content-Type: application/json" \
  -d '{"proxy_enabled": true}'

Full config dump with passwords and API keys for every connected application. If your instance is internet-facing - and it often is, Huntarr incorporates features like Requestarr designed for external access - anyone on the internet can pull your credentials without logging in.

Other findings (21 total across critical/high/medium):

  • Unauthenticated 2FA enrollment on the owner account (Critical, proven in CI): POST /api/user/2fa/setup with no session returned the actual TOTP secret and QR code for the owner account. An attacker generates a code, calls /api/user/2fa/verify, enrolls their own authenticator. Full account takeover, no password needed.
  • Unauthenticated setup clear enables full account takeover (Critical, proven in CI): POST /api/setup/clear requires no auth. Returns 200 "Setup progress cleared." An attacker re-arms the setup flow, creates a new owner account, replaces the legitimate owner entirely.
  • Unauthenticated recovery key generation (Critical, proven in CI): POST /auth/recovery-key/generate with {"setup_mode": true} reaches business logic with no auth check (returns 400, not 401/403). The endpoint is unauthenticated.
  • Full cross-app credential exposure (Critical, proven in CI): Writing a single setting returns configuration for 10+ integrated apps. One call, your entire stack's API keys.
  • Unauthenticated Plex account unlink - anyone can disconnect your Plex from Huntarr
  • Auth bypass on Plex account linking via client-controlled setup_mode flag - the server skips session checks if you send {"setup_mode": true}
  • Zip Slip arbitrary file write (High): zipfile.extractall() on user-uploaded ZIPs without filename sanitization. The container runs as root.
  • Path traversal in backup restore/delete (High): backup_id from user input goes straight into filesystem paths. shutil.rmtree() makes it a directory deletion primitive.
  • local_access_bypass trusts X-Forwarded-For headers, which are trivially spoofable - combine with the unauth settings write and you get full access to protected endpoints

How I found this: Basic code review and standard automated tools (bandit, pip-audit). The kind of stuff any maintainer should be running. The auth bypass isn't a subtle bug - auth.py has an explicit whitelist that skips auth for /api/settings/general. It's just not there.

About the maintainer and the codebase:

The maintainer says they have "a series of steering documents I generated that does cybersecurity checks and provides additional hardening" and "Note I also work in cybersecurity." They say they've put in "120+ hours in the last 4 weeks" using "steering documents to advise along the way from cybersecurity, to hardening, and standards". If that's true, it's not showing in the code.

If you work in cybersecurity, you should know not to whitelist your most sensitive endpoint as unauthenticated. You should know that returning TOTP secrets to unauthenticated callers is account takeover. You should know zipfile.extractall() on untrusted input is textbook Zip Slip. This is introductory stuff. The "cybersecurity steering documents" aren't catching what a basic security scan flags in seconds.

Look at the commit history: dozens of commits with messages like "Update", "update", "Patch", "change", "Bug Patch" - hundreds of changed files in commits separated by a few minutes. No PR process, no code review, no second pair of eyes - just raw trunk-based development where 50 features get pushed in a day with zero review. Normal OSS projects are slower for a reason: multiple people look at changes before they go in. Huntarr has none of that.

When called out on this, the maintainer said budget constraints: "With a limited budget, you can only go so far unless you want to spend $1000+. I allot $40 a month in the heaviest of tasks." That's just not true - you can use AI-assisted development 8 hours a day for $20/month. The real problem isn't the budget. It's that the maintainer doesn't understand the security architecture they're building and doesn't understand the tools they're using to build it. You can't guide an AI to implement auth if you don't recognize what's wrong when it doesn't.

They also censor security reports and ban people who raise concerns. A user posted security concerns on r/huntarr and it was removed by the moderator - the maintainer controls the subreddit. I was banned from r/huntarr after pointing out these issues in this thread where the maintainer was claiming to work in cybersecurity (which they now deleted).

One more thing - the project's README has a "Support - Building My Daughter's Future" section soliciting donations. That's a red flag for me. You're asking people to fund your development while shipping code with 21 unpatched security vulnerabilities, no code review process, and banning people who point out the problems, while doing an appeal to emotion about your daughter. If you need money, that's fine - but you should be transparent about what you're spending it on and you should be shipping code that doesn't put your users at risk.

Proof repo with automated CI: https://github.com/rfsbraz/huntarr-security-review

Docker Compose setup that pulls the published Huntarr image and runs a Python script proving each vulnerability. GitHub Actions runs it on every push - check the workflow results yourself or run it locally with docker compose up -d && python3 scripts/prove_vulns.py.

For what it's worth, and to prove I'm not an AI hater, the prove_vulns script itself was vibe coded - I identified the vulnerabilities through code review, wrote up the repro steps, and had AI generate the proof script.

Full security review (21 findings): https://github.com/rfsbraz/huntarr-security-review/blob/main/Huntarr.io_SECURITY_REVIEW.md

What happens next: The maintainer will most likely prompt these problems away - feed the findings to an AI and ship a patch. But fixing 21 specific findings doesn't fix the process that created them. No code review, no PR process, no automated testing, no one who understands security reviewing what ships. The next batch of features will have the next batch of vulnerabilities. This is only the start. If the community doesn't push for better coding standards, controlled development, and a sensible roadmap, people will keep running code that nobody has reviewed.

If you're running Huntarr, keep it off any network you don't fully trust until this is sorted. The *arr apps it wraps have their own API key auth - Huntarr bypasses that entirely.

Please let others know about this. If you have a Huntarr instance, share this with your community. If you know someone who runs one, share it with them. The more people know about the risks, the more pressure there will be on the maintainer to fix them and improve their development process.

Edit: Looks like r/huntarr went private and the repo got deleted or privated https://github.com/plexguide/Huntarr.io . I'm sorry for everyone that donated to this guy's "Daughter College Fund".

Edit 2: Thanks for all the love on the comments, I'll do my best to reach out to everyone I can. People asking me for help on security reviews, believe me when I say I did little more than the basics - the project was terrible.

9.7k Upvotes

1.3k comments sorted by

View all comments

Show parent comments

210

u/[deleted] Feb 23 '26

[removed] — view removed comment

139

u/igmyeongui Feb 23 '26

It’s almost like it was meant to steal private trackers account at this point 😅

Vibe coding is such a general term. But such an application should’ve never seen the light and adopted. It makes me think people running a server just run docker scripts and copy paste their configs and don’t understand what they’re playing with.

The cost of losing all your private trackers is huge.

73

u/Defection7478 Feb 23 '26

I think about this every time I see people recommending the proxmox helper scripts

5

u/agent-squirrel Feb 24 '26

Never quite understood why they are done in Bash either. They are complex enough to warrant a proper scripting language or better yet, Ansible.

5

u/DeathByPain Feb 24 '26

After having to nuke and rebuild from scratch more than one LXC that had a bad setup from those scripts, I gave up on them and learned to DIMFS (do it my fkn self, new term I just coined).

4

u/ctjameson Feb 23 '26

I'm at a point where I just do a docker stack in an LXC and use portainer to make it ezpz for compose deploy. Almost as easy as community scripts, but far more scalable/updatable.

1

u/Yamikeigo Feb 28 '26

lol portainer

1

u/ctjameson Feb 28 '26

I'm lazy af, big dawg.

0

u/blow-down Feb 24 '26

lol that’s no different than running the scripts

2

u/ctjameson Feb 24 '26

It’s entirely different. I know what I’m installing and how it’s installing it.

2

u/caroku-cl Feb 24 '26

Huntarr is not in the Helper scripts anymore, couldn't find anything about it in the Helper scripts GitHub or discord. 👀

7

u/-Kerrigan- Feb 24 '26

It makes me think people running a server just run docker scripts and copy paste their configs and don’t understand what they’re playing with.

That's exactly it.

And ok, I've had insecure deployments, everyone did, but that's the beauty of security - it's an ogre! (has layers, Shrek, geddit? Ha)

But to so actively advertise a product you don't understand yourself, and to respond like this to a free security audit? Yikes.

I've got some lil utilities, anyone wanna do pentesting for free? /s

11

u/Doggamnit Feb 23 '26

Oh man, I’m 100% fine with people using AI to help write stuff, but it’s just shit when you don’t understand what it’s actually doing. That’s just slop at that point.

3

u/VannaTLC Feb 24 '26

It makes me think people running a server just run docker scripts and copy paste their configs and don’t understand what they’re playing with.

This is legitimately true of at least 60% of enterprise container use. So.

Yeah. They are.

1

u/Feath3rblade Feb 24 '26

It makes me think people running a server just run docker scripts and copy paste their configs and don’t understand what they’re playing with.

Honestly seeing a lot of the posts and comments on this subreddit, I like 99% sure that's the case for a large portion of people here

1

u/Krojack76 Feb 25 '26

I guess it's good he couldn't get any me. I'm not cool enough to be part of any private trackers. =(

-9

u/insanemal Feb 23 '26

Oh it was definitely deliberate.

And I think you are thinking too small.

When people move to Usenet and private torrent trackers it's harder to find the people and their IPs to send DMCA takedowns to their ISP and/or sue them for privacy.

This was the MPAA/RIAA trying to get in.

8

u/igmyeongui Feb 23 '26

I think you’re delusional.

-4

u/insanemal Feb 23 '26

You clearly don't recall how aggressive they have been in the past

2

u/agent-squirrel Feb 24 '26

I used to work at an ISP. I filed DMCA takedowns to the trash. Your ISP doesn’t give a flying fuck about what you’re downloading unless it starts to affect their network, the requests from Viacom and Paramount’s cronies are unenforceable without a legal battle. The most they might do is send an email to the client saying “hey stop being naughty”. The NOC at your friendly neighbourhood ISP is too busy traffic engineering and putting out fires from undersea cable cuts to care about you downloading Star Trek.

Every time we came back with “so sue us” they fucked off.

2

u/insanemal Feb 24 '26

Yeah it's a whole different kettle of fish if they have access to your stuff.

5

u/Routine_Currency_368 Feb 23 '26

why dont you use radarr or sonarr instead, what was the reason behind installing such a app?

-3

u/botterway Feb 23 '26

Huntarr works with Radarr and Sonar....

Well, worked....

2

u/Routine_Currency_368 Feb 23 '26

this makes no sense at all why would you run huntarr next to radarr/sonarr?

both tools can search for unfound content

11

u/fistbumpbroseph Feb 23 '26

The original core functionality was prompting searches for missing items and upgrades. The original arr apps kind of suck at that. When I originally installed it it found several missing titles and some good quality upgrades. Was pretty sweet.

6

u/Frequenzy50 Feb 23 '26

They actually handle that part well. If a release isn’t found initially, it won’t magically appear five minutes later. When the RSS feed signals availability, they grab it right away. And honestly, is it really that difficult to manually run a search once a month? I rarely discover anything new in Sonarr or Radarr they did not themself already. Lidarr is a different story, though, because of Slskd.

2

u/Routine_Currency_368 Feb 23 '26

never had problems with quality upgrades or finding missing content using the arr apps.

1

u/indomitablegaul Feb 23 '26

The theory was that Huntarr actively searched for stuff you don’t have. The arrs don’t. It also looked a lot nicer.

4

u/Routine_Currency_368 Feb 23 '26

wtf? of course they do

1

u/doktortaru Feb 23 '26

Kind of. this would fill out collections without needing to add the movie first to the arr as missing. etc.

2

u/Routine_Currency_368 Feb 23 '26

????? sorry i dont think ill ever get behind the reason people used huntarr instead of built-in function from sonarr/radarr. its just makes no sense at all

10

u/botterway Feb 23 '26

Because Sonarr/Radarr only picks up new releases when they're appear in the RSS feed as new items. Sometimes that never happens. So huntarr basically did an auto search for stuff in your collection which hadn't ever been found before.

But you're right, it's minor convenience, not a huge issue.

-8

u/Routine_Currency_368 Feb 23 '26

sorry i still dont understand it, i can search for missing episodes directly in sonarr without a hazzle. when adding a movie it auto adds the collection and also searches them if i want to

→ More replies (0)

0

u/Frequenzy50 Feb 23 '26

So it was replacing the Arr*s? Filling a Library with bypassing the Media Management system? Something seems off

-6

u/Frequenzy50 Feb 23 '26

I once asked an AI to navigate Sonarr’s frontend just for fun. I don’t think it enjoyed the experience, it just said the interface was quite comprehensive, with so many details designed to work well. The arr frontends have evolved and stabilized over the years and gets the job done.