跳至内容

事件报告:用户账户被盗

发生了什么?

一个 PyPI 用户的账户被盗,并被用于删除该用户对 4 个项目的拥有权。这不是 PyPI 的故障,也不是利用任何漏洞,而是该用户的账户没有受到足够的保护以防账户被盗。

攻击者将自己添加为这些项目的合作者,并删除了原始所有者。除了所有权变更之外,这些项目都没有进行任何修改。

攻击者完成所有权变更后,删除了该用户的账户。

PyPI 管理员通过电子邮件收到该用户的通知,封锁了攻击者对该账户的访问,并恢复了该用户对其项目的拥有权。

没有造成进一步的损失,并且 **现有软件包没有被修改**。

继续阅读以获取更多详细信息。

时间线

所有时间均为 UTC 时间

系统时间来自项目所有权变更和电子邮件通知。当用户账户被删除时,账户数据会立即被删除,因此我们没有攻击者何时获得对 meisnate12 账户的访问权限的计时。

日期:2023-11-22

  • 08:42:33 新用户账户 dvolk 创建

(这是 4 个软件包中的第一个,这里只描述一个)

  • 08:44:55 meisnate12 账户邀请 dvolk 成为 arrapi 的合作者
  • 08:47:25 dvolk 接受邀请
  • 08:47:35 dvolk 删除 meisnate12 作为 arrapi 的合作者

(重复用于 tmdbapisnagerapipmmutils)

  • 08:50:27 meisnate12 账户被删除

在此之后未观察到 dvolk 的任何进一步操作。

  • 14:33,admin@pypi.org 收到来自与 meinstate12 账户关联的地址的电子邮件

    我被移除了 arrapi、tmdbapis、nagerapi 和 pmmutils 的所有者身份。然后我的账户被删除了,所以我无法再登录。我的用户名是 meisnate12。我的下一步行动是什么?

  • 14:46 一位 PyPI 管理员回复道

    感谢您的报告。我们已冻结该账户,同时我们会对此进行调查。

  • 14:44 PyPI 管理员在 PyPI 管理员 Slack 频道中与另外两位 PyPI 管理员讨论了可选方案

  • 14:46 一位 PyPI 管理员禁用了 dvolk 账户

经过调查,PyPI 管理员确定该账户遭到入侵,但攻击者没有更改任何项目的數據。

我们决定,正确的做法是手动恢复已删除的用户账户,并恢复用户对其项目的拥有权。

  • 15:53 PyPI 管理员关闭了此事件

我们能从这次事件中学到什么并改进?

预防胜于治疗

我们与 HaveIBeenPwned 集成,以 检查用户的密码 并在每次登录时将其与他们的服务进行比较。不幸的是,该密码之前没有出现在 HaveIBeenPwned 知道的任何漏洞中,因此这并没有阻止攻击。

迄今为止,我们拥有的最佳工具之一是 双因素身份验证 (2FA,或 MFA - 多因素身份验证) 来防止账户被盗。

如果该用户账户启用了 2FA,攻击者将无法在没有访问用户第二因素 (TOTP 应用程序、WebAuthN 设备或通行证密钥) 的情况下接管该账户。

我们已经采取措施 减少 PyPI 的使用,如果用户没有启用 2FA

这种鼓励将在 2023 年底变成强制执行

我们仍然有一个用例,即 PyPI 的不经常用户,他们的账户是在 2FA 可用之前创建的,仍然能够在没有 2FA 的情况下登录他们的账户,以便注册 2FA 设备。阅读有关此问题的更多信息,以及一些解决方案的想法。

删除东西可能会产生意想不到的后果

当用户账户被删除时,所有账户数据都会被删除。我们今天已经实施了一种机制,可以防止用户账户被删除,如果他们是任何项目的唯一所有者,以防止项目成为孤儿。

在这种情况下,攻击者能够删除用户对其项目的拥有权,然后删除账户。

我们以前曾讨论过如何防止在没有 PyPI 管理员干预的情况下完全删除账户,但尚未找到解决方案。请参阅 此跟踪问题 以了解更多详细信息。这不像看起来那么简单。

即使我们继续立即删除资源,我们也应该考虑我们能做些什么来保留我们可能需要进一步调查的一些细节。 此问题 跟踪了该努力。

如果你看到什么,请说出来

当合作者被添加到项目或从项目中删除,或账户被删除时,我们会向存档的地址发送电子邮件。

我们通过受影响的用户了解了此事件,他们仍然可以访问与他们的 PyPI 用户名关联的电子邮件账户。

以下是一些您可以采取的措施,以帮助保护您的 PyPI 账户

该用户积极向我们报告了此事件,这有助于防止进一步的损失。