-
Notifications
You must be signed in to change notification settings - Fork 308
Mitigate npm spam/phishing #4557
Comments
We do have rate limiting already, I think it is 3 emails per minute or similar. |
Well, that could end up in 1440 emails per day - so might be worth revising our algorithm. |
Alright, what's the right thing to do here? |
Since we're working with public emails that haven't been verified with us yet, there's no way we can close this off entirely without neutering the entire feature. |
I've marked the account doing the spamming as suspicious. |
Considering that you need to be logged in to see the emails and click apply, I think limiting per account wouldn't be outside a realistic possibility. Or do like Slack does and require that you can only have n unconfirmed emails. So if you click "apply" on three projects that aren't yours, you won't be able to on the fourth one. |
I like this idea. |
I'm trying to understand the damage here. How many mails did Spammer send? |
Three to the person above, and he is not happy about it. |
I've replied:
|
|
My reply:
|
+1 from @/avoidwork on Twitter, cf. gratipay/project-review#549. @/apanoo marked suspicious. |
Wonder what this means? |
We have this copy in the email:
... which is presumably how they got to us in the first place. I think that's actually sufficient? |
Zooming back out here from #4579 (comment) ff. ...
Do we need that {in addition to,instead of} our current "Something not right? Reply to this email for help."?
👍
Isn't this basically what we have now? I guess we have the further streamlining that we verify the email and claim the packages in one email-link-step—a bridge too far, I think you're saying? Part of what we're up against is that at the top end, packages have about 100 maintainers on file. That's why we put them in a select instead of listing all maintainers, but that takes away from the idea of attaching a button to each maintainer in a listing (otherwise we could use the same layout evolving above on #4579, where we have guaranteed ourselves < 10 email addresses per participant). What if we varied the action on the package claim page based on the state of the selected address? So it would only read "Apply to accept payments" if the selected address is verified, and it would read "Verify email address" if unverified: "Ready to apply" mockup"Ready to verify" mockup
Then we could surface claimable packages on |
I still think we should only allow one pending verification at a time, to mitigate phishing. I would be comfortable allowing self-service removal of pending verifications if we also tighten the verification window to five minutes. That plus low-level throttling (one user-initiated email per 30 seconds or so) should be pretty good. |
Actually, it's the combination of these two that especially mitigates phishing. Once you remove a pending verification, it renders the verification link ineffective. The remove-and-readd workaround would only aid phishing if the verification link in the first phishing attempt survived the remove-and-readd. Limiting pending verifications to one at a time forces phishers to serialize their phishing—they can't mass-phish all of npm via Gratipay. They can at best engage in targeted phishing. The five-minute limit on verification links would further mitigate since people not expecting a verification email are fairly likely to take at least that long to notice the message and process what's going on even if they were to end up clicking. An additional mitigation would be a confirmation step once back on-site (cf. #4577 vis-a-vis oauth).
For the case where recipient addresses are not associated with Gratipay participant accounts, a generic unsubscribe (#4548 (comment)) could at least partially address the desire to take action on unexpected claim messages. |
The user above at #4557 (comment) claimed all their packages as a defense against phishing/spam. Part of bringing back pledging is to bring back locking (hard-opt-out of) all pledges, which would be an alternate and preferable active protection against individual targeted spam/phishing. |
I forgot! We already have a bulk claim page! 😆 |
@rohitpaulk I think I'm starting to see what you're saying at #4579 (comment):
In other words, phishing depends on email and the messages an attacker can get through to a victim via our service. Both the quantity and the quality of messages matter. We can limit the quantity in various additional ways. We can limit the quality by only ever sending verification messages to unknown addresses. I like that as a policy. Okay! So ... #4520? |
Though of course sending "claim your free money!" messages to unknown addresses is exactly what we propose to do on #4569. 😬 |
I guess the difference is that one type of message suggests that the user took an action. If they didn't take it, then they feel unsettled, "Why is this telling me I did something that I don't think I did? Did I really and I forgot? Or am I being hacked?" Whereas the second type of message does not assign agency to the user: "We have money waiting for you if you want it." |
Kicking out a PR for the "Ready to verify" idea above at #4557 (comment) ... #4584. |
Consolidating from @rohitpaulk at #4579 (comment):
|
Done in #4584. |
I think with #4579 and #4584 we are back ahead of the spam/phishing risk given our present scale. Leaving open for further mitigations as we continue to scale #4427:
|
I am kind of concerned that this would encourage phishing. If I am "not the most honest person" and I see a situation where I can phish to get free money I may take it. I personally think that the packages claimers should verify their emails separately first (it should the one used in the maintainer list for that package(s) that you intend on claiming) and then go through the claiming of the package(s). This may be a longer process but (to me at least ) it reduces the possibility of phishing. |
Never mind, this was the email verification step, not the package claiming step.
Do we have any method for hard opt-out? We shouldn't store email addresses people don't want us to, even if pulled from a package manager API...although we'd need to store these to not use them. 🤔 |
Whether it's an accident or not, seeing this coming through Freshdesk.
The text was updated successfully, but these errors were encountered: