Use Cases and Ideas for secure Room Codes #5193
Replies: 13 comments 16 replies
-
Thanks for starting this discussion.
I don't think this particular idea is viable from a security perspective. We're not concerned with regular users abusing the feature. We're concerned with malicious users. Simply hiding the feature behind another screen will not deter attacks, and the important part is the backend mechanism anyway, not the UI. Aside from re-introducing a similar feature (with security concerns addressed), the community might find it useful to know that short links still work with the room ID. For example, hub.link/ro0miDs, using the 7-character alphanumeric code, will still redirect to the full URL. This also applies to the short domain used on a Hubs Cloud instance. Another potential idea might be to couple a room code with a password, though that might defeat the purpose of the feature if the main goal is to reduce the effort in typing things out. Arguably, you might as well use the room ID and short link instead, since it is only 7 characters. To make things a easier, we could have hub.link (or the equivalent on a Hubs Cloud instance) let you enter a room ID in a normal text input. That would improve UX slightly, since you could then bookmark hub.link and only have to enter the room ID, instead of the whole short link. Another option, outside Hubs, is to use a different sharing mechanism for group scenarios, such as QR Codes, email, shared chat, etc. That would allow you to maintain privacy and provide ease of access by other means. |
Beta Was this translation helpful? Give feedback.
-
I think Sage's suggestion of limiting short code entry to logged in users makes sense as it gives you a unique key to rate limit against. However, an attacker could create 10,000 accounts and start war dialing for codes with a 1% chance of getting a specific room on the first try and a higher chance of getting any room. The addition of a captcha to the room code entry dialog might help if captchas still work, but it does add friction. Brian's suggestion of a third party service makes sense, especially if it's something with it's own authentication like Teams. For colocated users there are services like https://hmd.link which rely on devices having the same public IP address. This is common for devices on the same LAN, but not for mobiles using a cellular connection. |
Beta Was this translation helpful? Give feedback.
-
This was one of the most differentiating features of Hubs for me. I could text someone to join me at immers.link with code 123456, and then they could choose to join there on phone or easily enter the code on PC or VR, no matter their technical skill. A base-62 room id string is not in the ballpark in term of usability. Now that it is mitigated, could you disclose the details of the attack vector so that we can propose alternatives? For a simple brute-force, adding a 1 second delay in the server response would be imperceptible to users but would push the cracking time over 10 days. Combined with a global API rate limit (which may not be feasible for something as high traffic as hubs.mozilla.com, but would be totally fine for most Hubs Clouds), the attack time could be stretched out so long as to be futile. |
Beta Was this translation helpful? Give feedback.
-
One other idea. Could room codes be active for a limited amount of time (a
few minutes) to allow everyone time to join?
On Tue, Mar 1, 2022 at 1:16 PM Will Murphy ***@***.***> wrote:
This was one of the most differentiating features of Hubs for me. I could
text someone to join me at immers.link with code 123456, and then they
could choose to join there on phone or easily enter the code on PC or VR,
no matter their technical skill.
A base-62 room id string is not in the ballpark in term of usability.
Now that it is mitigated, could you disclose the details of the attack
vector so that we can propose alternatives?
For a simple brute-force, adding a 1 second delay in the server response
would be imperceptible to users but would push the cracking time over 10
days. Combined with a global API rate limit (which may not be feasible for
something as high traffic as hubs.mozilla.com, but would be totally fine
for most Hubs Clouds), the attack time could be stretched out so long as to
be futile.
—
--
edited to scrub personal info. Please take care with email signatures coming through to github. -Matt Cool
|
Beta Was this translation helpful? Give feedback.
-
@wmurphyrd As profhupe mentioned would you be satisfied if we allowed entering room ids on on the link page? |
Beta Was this translation helpful? Give feedback.
-
To answer the question about the attack vector; Obviously any solution we use would have to be resilient to simple fuzzing attacks, where a single machine just bombards the endpoint with a million room codes as fast as possible. The situation is complicated by the fact that we also have to consider Hubs Cloud instances with multiple app servers. It would not be sufficient to rate limit per server, per IP, since the rate limit would be decimated by the number of app servers you have running in your instance. Additionally, the solution would have to be resilient to attacks that use many attacking machines, or IP addresses. This kind of attack can come from a botnet, or more easily from a service that runs serverless functions at scale from multiple IP addresses. In theory the endpoint could be attacked simultaneously from thousands of different IP addresses, even up to a million IP addresses if the attacker were determined enough, in which case you would not be able to distinguish an attack from normal usage, unless you monitored the endpoint based on traffic. In order for a ratelimit to be effective for a multi-server setup, it would have to be applied globally across all servers, and even then you would have to queue requests, not simply delay them, in order to account for attacks from multiple IP addresses. Those are the constraints and pitfalls we have to consider. I'd be happy to hear if the community has other solutions. We attempted to mitigate with a simple rate limit (per IP, per server) and we then attempted to mitigate with a fail2ban solution (again per IP, per server). These mitigations were not sufficient to protect against attacks from multiple IP addresses. Our goal with this change was to remove the attack vector so that users wouldn't continue to be vulnerable to it. Lastly, to the question about allowing Hubs Cloud administrators to opt-in to this feature. This is more of a product-level decision than a technical one. Should we allow users and administrators, to expose their rooms in such a way? Will users be savvy enough to understand the concerns an make their own decision? Can we message the security concerns clearly enough? Perhaps if a Hubs Cloud instance was secured in some other way to begin with, like a global password protection, or required sign-ins, it would be reasonable to allow 6-digit room codes, but would the added protection break the usability for the use cases that all of you have in mind? |
Beta Was this translation helpful? Give feedback.
-
Having an input field for the room ID seems like a good alternative to me but I think the biggest issue for usability is case sensitivity. Ideally you'd have a code that's all-lowercase + numbers (minus similar chars). To match base64*7 difficulty, room ID would need to be 8 chars longs instead of 7, which is not a big stretch. |
Beta Was this translation helpful? Give feedback.
-
I want to express my discomfort for removing such an important functionality for the community in such a drastic way. We need to find a way to simplify this step. I hope we will have a solution soon, right now my startup depends on this functionality a lot. I trust in this great Mozilla hub team. |
Beta Was this translation helpful? Give feedback.
-
I tend to agree with @fonefen here. Systematically removing a very useful function because it could possibly be abused does not seem like the right solution. I'm not a security expert, but I would think there are other methods to identify bad actors and block them rather than remove the functionality entirely. |
Beta Was this translation helpful? Give feedback.
-
Hi folks, and thank you so much to Sage for starting this discussion so we can compile your feedback in one place. We really appreciate hearing your thoughts on this issue. We definitely hear your concerns, and this decision was not one we took lightly. Ultimately, we felt that the security risk was too significant for us to leave as is in Hubs at this time. We are keeping an eye on your suggestions and are weighing the possibilities from a product standpoint (e.g: offering this as an "admin option"). Please keep continuing to add suggestions as we are reviewing and learning from them. |
Beta Was this translation helpful? Give feedback.
-
We have a solution to this problem? several options have already been presented. Our project is currently in serious trouble without this functionality. Is there any time frame to solve it? Thanks Team. |
Beta Was this translation helpful? Give feedback.
-
I have an idea but I don't know if it is better: If the problem was a user scanning for number codes, how about using sets of 24 icons where you have to put 5 in certain order as a password? Then those icons could be translated to unicode, creating a long password. Example: U+0267DU+0266CU+0265CU+0265AU+0262F Could that work? |
Beta Was this translation helpful? Give feedback.
-
I would suggest instead of removing the lock code, we should add a delay to the number of times it can be entered. If 5 bad codes, it should lock out the user for 5 mins and increase as the number of bad attempts happen. In my mind 5 bad codes should equal a 5 min ban then the next 5 would be 15 and keep upping it to reduce the chance someone will even try to brute-force it. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
Room Codes was recently removed from Hubs to ensure security and privacy standards. This discussion aims to capture use cases and ideas to help reintroduce a similar feature that is secure by default.
Below are some starters...
Use Case: directing large groups of users (eg, students, audience) on VR head sets into shared rooms in Hubs.
Use Case: directing small groups of users (eg, friends, family) on VR head sets into shared rooms in Hubs.
Idea: could Room Codes be tucked away under Room Settings to discourage abuse?
Idea: could room codes be enabled for signed in users only?
Idea: could room codes be enabled for Hubs Cloud instances that are configured to require accounts for any room entry?
Note: Enter on Device codes are still available but should not be shared with multiple users and timeout quickly.
Beta Was this translation helpful? Give feedback.
All reactions