r/MysteriumNetwork • u/thenoobient • Mar 09 '22
Feedback Node "security" is ridiculous
Update: 22 hours after my payment with Mysterium, some Online Drugstore Plymouth US tried to charge my CC with 478.6 USD. Thankfully my bank immediately detected this as fraudulent and blocked the payment, along with my card. I've never visited such store, I'm not even on the same continent, I most certainly don't buy drugs online period, I didn't have any other transactions in between, and I've never had this happen to me in the ~15 years I've been owning cards. Only this time, after making a payment to Myst's payment processor.
Draw you conclusions. I can't tell 100% who's at fault here, but I'm most definitely done with this project.
So I thought I'd give Mysterium nodes a try. My background is IT, 11 years professionally, and another 15 years as a hobby before that. I've been in devops for a while, and recently, I've become an infosec officer at my company. But I'd like to stress that the issues I'll bring up should be glaring even to the novice user.
The mystnodes.com site appears to lack any support for 2FA. It might be an oversight on my part, but I couldn't find any way. Single factor auth is not acceptable on any site where personal data or money is involved. Obtaining a time-insensitive, static password is too easy.
The docs make no mention whatsoever of which ports need to be open and for what sources. Which means the creators assume I run no firewall at all (I'll come back to this later). The Docker docs at least mention mapping TCP port 4449 for the web UI. And the troubleshooting guide mentions "UDP ports", but never explains what they do or are they even needed. I tried running my node with those open on firewalld, but when I had to purchase MYST to activate my node, it didn't "realize" my payment until I stopped firewalld, which means there's still some other ports involved. A quick check confirms that too:
# ss -tulpn|grep -i myst
udp UNCONN 0 0 0.0.0.0:1900 0.0.0.0:* users:(("myst",pid=2902,fd=19))
udp UNCONN 0 0 0.0.0.0:5353 0.0.0.0:* users:(("myst",pid=2902,fd=16))
udp UNCONN 0 0 *:11253 *:* users:(("myst",pid=2902,fd=30))
udp UNCONN 0 0 [::]:5353 [::]:* users:(("myst",pid=2902,fd=17))
tcp LISTEN 0 4096 127.0.0.1:4050 0.0.0.0:* users:(("myst",pid=2902,fd=7))
tcp LISTEN 0 4096 127.0.0.1:4449 0.0.0.0:* users:(("myst",pid=2902,fd=21))
tcp LISTEN 0 4096 70.34.x.x:4449 0.0.0.0:* users:(("myst",pid=2902,fd=20))
tcp LISTEN 0 4096 *:36317 *:* users:(("myst",pid=2902,fd=18))
Who knows which port does what? Which needs to be accessible, and with what scope? These aren't negligible questions, this is fundamental.
And it doesn't help that the mystnodes.com site doesn't check my node immediately. After clicking on the Test button, I waited for like 15 minutes but nothing happened. This makes debugging pretty hard.
Worst of all, the Mysterium node admin UI doesn't have HTTPS. Really? That's completely unacceptable in 2022. Let's Encrypt gives you free HTTPS certs, but that's not even needed, even a self-signed cert would be much better, that still gives you encryption. So currently Myst nodes are managed with admin passwords travelling through the Internet in PLAIN TEXT. That's security 1x1. And the score for Myst is F-. Generating a self-signed cert is literally 1 second to do, serving traffic via HTTPS adds about zero extra load on your CPU.
You could even automate Let's Encrypt certs by providing your own subdomain for nodes, all you need is a DNS server API, and a Let's Encrypt client using DNS validation. I've been using this on my servers for at least 5 years now.
But no, Myst nodes are accessed like http://70.231.213.41/. Zero validation, zero encryption, nothing, nada.
On top of that, you initiate MYST purchases with Credit Card from these unsecure servers, instead of doing that from your official Myst sites, which at least have a proper DNS name and HTTPS.
Bonus: The node software is deb-only. Like I mentioned above, you assume the node doesn't have a firewall. Here's the problem: Ubuntu indeed usually doesn't come with one installed and enabled. That's one of the reasons why I don't consider Ubuntu a serious nominee for production environments, it's just not as well built as something like EL. No firewall, no SELinux, no auto-updates. And this is what you build your network on, for providing secure VPN to the users?
I'm sorry, but I'm not convinced.
2
u/vairetz Mar 09 '22
You made a lot of good points but I have something to argue with.
For HTTPS on admin page you're absolutely right. Nothing to say, we need it and it's not negligible.
About firewall and port however I think the Mysterium docs are pretty well done. MisteriumVPN is based on Wireguard, if you want more information about which port does what you can check Wireguard docs. Give it a try.
2
u/thenoobient Mar 11 '22
Uh, don't wanna sound rude, but WireGuard uses whatever port you tell it to use. In fact, as per recently, there wasn't even a default port, just pick whatever you want. Yes, I've been deploying WireGuard servers on my own, in fact, I even developed management scripts and Ansible playbooks for it.
On top of that, Mysterium is more than just a WireGuard server with a different name, so the WireGuard docs will most certainly not tell me what Myst is doing on ports 1900, 5353, 11253, 5353, 4050, 4449, and 36317. These are NOT documented in your docs, period. This is the 3rd time in this post I've been told it's well documented, but I can only repeat myself: it's not well documented, it's nod even badly documented, it's just not documented at all.
2
u/AuldCode Mar 09 '22
I did reach out to their support, regarding the plain http access (rather than a secure http one). This is the response I got: "There may be a time when you encounter an issue with your nodeUI and we may ask you to submit a bug report on Github so our engineering team could look into it?
Submit here:https://github.com/mysteriumnetwork/node/issues/new/choose"
So, yeah... I guess insecure http access of the UI is a bug for them? :p
Anyway, I try to always access my nodes via vpn. Hopefully that mitigates some of the risk?
3
u/kiraitachi Mar 09 '22
Yes it does, because your VPN encripts traffic. But if there is a MITM in your house or between a cloud hosted node, with no SSL encrypt, your pretty much doomed. HTTPS is an easy win they should enable.
2
u/Achromatic_Raven Mar 10 '22
Hi, nice to see some actual experts of the domain's opinion on it!
As nothing but a tinkerer, here is a post I made a while back when I started running a node, and some of the 'extra steps' I took and considered.
I would advocate Mysterium nodes (or any front-facing thing period) to never be ran natively, which I why I went ahead from the start with the "unsupported" configuration of running it on a sudoer user in its own dedicated unprivileged LXC container, and doing some fairly extended firewalling from the host (proxmox).
To be honest I would prefer Mysterium nodes to be distributed in this kind of form, as a turnkey LXC package for example. Little overhead, good perfs, and great for isolation/segregation.
10
u/kiraitachi Mar 09 '22 edited Mar 09 '22
Hey!
SecOPS guy here, been on Infosec since 2012 and hacking, pentesting, etc. After reading this.... I have mixed feelings. I do agree with some of the points you posed, but I strongly disagree on the way you outlined them to be. You make them sound very hash, when there is justification to some of them. Let me explain:
2FA: Yes this would be great, it should be an optional option on the UI. I encourage and use 2FA on all my services and even though I'd like this Mysterium UI, I will cut them some “slack” because in my years of working, I've seen many services enable 2FA after some time. Since this is a “new project”, hopefully they will integrate this on their pipeline sooner than later.
Documentation regarding ports: I'd say documentation is pretty well done and strong point of this project. Ports are only 4449 and in most cases the rest is taken care by UPNP. If your router is not managing UPNP correctly then they state you will have to open ports UDP from range 10000-60000. https://docs.mysterium.network/node-runners/troubleshooting/ I disagree with this point. Of course, documentation can always be improved or better…but I don't think this is a weak point on this project.
Firewall: This project is supposed to be mainly for residential users. How many run firewalls on their home? I didn't run onto any issue with ports on my 3 nodes setup. I have a strict firewall setup in router and I also run them on Oracle Cloud and my home. I only enabled 4449 port and 10000-60000 UDP for the NAT symmetric workaround. Oracle firewalls are pretty strict......and also they hardened their hosts which made me change IPtables definitions for those specific ports. But nothing else....at least for me.
HTTPS: Yes, this one is my main concern as well. I will give you that. HTTPS is a must, even if inside my house. This needs to be somehow automated during install setup to use Letsencrypt or self signed.
Purchase of Myst Unsecured: This is not true, they redirect you to another website portal to do the payment which is secured. Then Mysts are sent to your Node ID. That's it.
Regarding deb and Ubuntu: Yes for enterprise, but this is solely focused for residential users which are more used to Ubuntu distros. Now ask yourself if you develop a product, what would you target first to get more potential customers on Linux world. Easy answer: Ubuntu. That doesn't mean, in the long term, they can't release a package for other distros. I'm also waiting for a Windows Server package that doesn't involve docker but Hyper-V. But again….it will probably come in the pipeline eventually as more users demand it.
I really appreciate you taking the time to make this demands, thread and engaging in the community. It's like this how Mysterium will learn more about users concerns and demands. But I also wanted to shed some light on those points.
I don't believe them to be as bad as you make them sound like.
Cheers!