来源: https://community.geph.io/t/topic/22227
摘要
2026 年 9 月 11 日,攻击者利用一个于 2021 年被意外发布到 GitHub 上的数据库密码,复制了迷雾通 PostgreSQL 账户数据库的大部分内容。
对于绝大多数用户,没有任何敏感个人信息被泄露。 注册迷雾通账户无需提供任何联系方式,我们也从不存储浏览记录、银行卡号或支付宝/微信账号。只要您没有购买或收到过礼品卡(也没有使用包含电子邮件地址的旧版用户名),泄露的数据中就不包含您的电子邮件、姓名或其他可识别身份的信息。您唯一需要做的,是更换账户密钥(见下文)。
时间: 从 UTC 01:28 起,直至 UTC 03:57 该凭据被吊销。
泄露的信息: 账户密钥、旧版密码哈希、支付记录(金额、时间和交易编号等,不含卡号或支付宝/微信账号),以及 1,053 个礼品卡收件人电子邮件地址。
未泄露的信息: 浏览记录、流量加密密钥和支付卡信息,因为迷雾通从不存储这些信息。
服务影响: 数据导出引发了数据库锁定故障,导致中介服务器(broker)在 UTC 01:58 至 03:44 期间服务中断。
需要您采取的行动: 将迷雾通更新至 5.9.0 版本,并更换您的账户密钥。Plus 用户更换密钥后,将额外获赠 7 天 Plus 时长作为补偿。
泄露了哪些信息?
根据数据库日志,我们可以确定以下信息已被泄露。但在未授权访问期间,耗时不到一秒的查询没有被记录,因此攻击者可能在我们不知情的情况下获取了其他少量信息。
未被泄露的信息请参见我们从未存储的信息。
最主要的泄露信息如下:
- 账户凭据:
- 账户密钥:所有账户密钥(明文)及其关联的内部账户 ID。
- 与账户 ID 关联的身份验证令牌。
- 旧版用户名、密码哈希及关联的账户 ID。
- 账户元数据:登录时间戳,以及订阅等级及其开始和结束时间。
- 支付账单:与迷雾通账户关联的购买金额、时间戳、支付方式和内部使用的的交易编号。
- 请注意: 这里的“支付记录”仅指订单/发票编号、交易编号这类账单数据,不包括银行卡号、信用卡信息或支付宝/微信账号或单号——这些信息我们从未存储,因此也不可能泄露。
- 礼品卡信息:
- 全部 1,053 个不重复的收件人电子邮件地址。
- 礼品卡兑换码、赠送人姓名、购买账户和兑换数据。
- 迷雾通 4 旧版基础设施密钥:泄露的旧版凭据中,除
bridge_secret(中介服务器的网桥注册令牌)外均已失效。该令牌现已更换。
我们从未存储的信息
以下信息没有泄露,因为我们的数据库从未存储过它们:
- VPN 浏览记录或加密密钥:迷雾通从不存储任何用户的浏览记录或隧道加密密钥。
- 用户联系方式:电子邮件、电话号码、地址等。注册迷雾通账户无需提供任何联系方式,因此我们没有可存储的联系信息。例外: 礼品卡收件人的电子邮件,以及包含用户电子邮件地址的旧版用户名。
- 可识别身份的支付信息:我们从不存储银行账号、信用卡信息以及支付宝/微信支付账户。
用户需要做什么
迷雾通账户密钥通常无法让攻击者获取任何敏感信息。但是,攻击者可以随时登录任何现有账户,消耗用户的流量和设备数量限额。
只要您在攻击者之前更换账户密钥,您的账户就不会受到攻击者的影响。我们在 5.9.0 版本中设计了一项功能,可自动完成这一过程:
更换您的账户密钥
- 将迷雾通更新至 5.9.0 版本。 迷雾通会提示您更换账户密钥:
迷雾通提示您更换账户密钥。
2. 保存新密钥,确认后继续。 旧密钥将失效,您的其他设备也将无法继续使用。
您的新密钥。(图中显示的密钥仅为示例。)
- 在您的每台其他设备上,使用新密钥登录。 迷雾通会检测到旧密钥已被更换;请选择“我在其他设备上更换了”,然后输入新密钥。
迷雾通检测到旧密钥已失效。
使用第一台设备上显示的新密钥登录。
- 如果您有旧版用户名和密码,更换账户密钥后它们将失效。如果您在其他服务中也使用了该密码,请在那些服务中修改密码。
Plus 用户: 为补偿给您带来的不便,更换账户密钥后,您的账户将额外获赠 7 天 Plus 时长 。
如果有其他人更换了您的密钥
目前我们尚未发现任何恶意篡改账户的行为。但是,如果攻击者在您之前更换了您的密钥,您将被退出登录且无法重新登录。如果迷雾通显示“此密钥已被更换”,而您并没有自己更换密钥,请选择“不是我操作的”,然后:
- 免费用户: 退出登录并创建新账户。
- Plus 用户: 创建新账户,然后发送邮件至
[email protected],将剩余的 Plus 时长转移到新账户。邮件中请提供:- 您的旧账户密钥
- 您的新账户密钥
- Plus 套餐的付款凭证
事件经过
数据库凭据是如何泄露的?
我们发现,泄露的凭据于 2021 年被意外上传到了 GitHub 上的这个网站计费源代码文件 中。
GitHub 上公开的
racket/billing.rkt 中的数据库连接设置。
过去 5 年间,数据库凭据从未更改;但 2026 年 9 月 11 日的入侵是已知唯一一次对迷雾通数据库的未授权访问。
具体发生了什么?
日志显示,有两个 IP 地址对数据库进行了未授权访问。
其中一个客户端似乎是 Navicat (一款常见的数据库管理工具),它以交互方式查询了数据库,其中包括对旧版 secrets 表的一次完整读取。
另一个客户端自称为 pg_dump,试图导出整个数据库。两者都使用了数据库管理员凭据进行身份验证。我们不知道这两个地址是否由同一人操作。
随后,这次导出导致了中介服务器服务中断:
- 长时间运行的全库导出在出口服务器注册表上持有读锁。
- 几分钟后,中介服务器对该表启动了例行的
VACUUM FULL维护操作。该操作请求排他锁,并排在导出之后等待。 - 此后,中介服务器的读写操作都排在这个等待中的维护操作之后。
- 被阻塞的请求占满了中介服务器的上游连接容量。失败和重试急剧增加,产生了大量短时 HTTPS 连接。
- 主机的网络连接跟踪(conntrack)表被占满,内核开始丢弃数据包。
我们的团队首先注意到连接跟踪表已满,并扩大了该表的容量;这缓解了网络症状,但没有解决数据库锁死的问题。
服务中断前、中、后的中介服务器 RPC 延迟。
服务中断期间:
- 新建连接、重新连接以及其他依赖中介服务器的操作受到影响。
- 已建立的隧道继续转发流量。
- 由于流量额度无法补充,Plus 连接可能出现降速。
UTC 03:40 终止等待中的维护会话后,中介服务器的查询恢复执行;导出会话于 03:42 被终止。中介服务器在 03:44 前恢复正常。
攻击者是谁?
我们只知道攻击者从 2 个香港 IP 地址访问了数据库,一个属于阿里云,另一个属于 StarCloud。这些是云主机地址,其所在地并不代表攻击者的实际位置。本报告通篇使用“攻击者”一词,但我们并不知道涉及的是一人还是多人。
| 来源 IP | 客户端 | AS 号 | 注册网络 |
|---|---|---|---|
154.31.217.202 |
pg_dump |
AS18186 | StarCloudGlobal-HK |
47.242.228.124 |
Navicat | AS45102 | ALIBABA CLOUD-HK |
时间线
以下时间均为 2026 年 9 月 11 日的 UTC 时间。
| 时间 | 事件 | 执行方 |
|---|---|---|
| 01:28 | 首次记录到来自 Navicat 来源的未授权数据库身份验证;随后成功建立了主数据库会话。 | 攻击者 |
| 01:51 | 未授权的 pg_dump 导出会话建立连接。 |
攻击者 |
| 01:58 | 出口服务器表的维护操作被导出阻塞,中介服务器的查询开始积压。 | 迷雾通中介服务器 |
| 02:06 | 内核开始报告网络连接跟踪表已满。 | 迷雾通中介服务器 |
| 02:10 | Navicat 完成了对 secrets 表的直接查询。 |
攻击者 |
| 03:40 | 等待中的维护会话被终止;被阻塞的中介服务器查询恢复执行。 | 迷雾通团队 |
| 03:42 | 未授权的 pg_dump 导出会话被终止。 |
迷雾通团队 |
| 03:44 | 最新的响应采样显示中介服务器已恢复。 | 迷雾通中介服务器 |
| 03:57 | 数据库管理员密码被重置。 | 迷雾通团队 |
补救措施
遏制
- 清除了攻击者的访问权限。 数据库管理员凭据已于 UTC 03:57 被吊销。由于非管理员数据库凭据可通过管理员权限获取,我们也停用了所有非管理员数据库凭据。
- 吊销了已泄露的网桥注册密钥,使攻击者无法注入虚假网桥来监视用户流量。
- 暂时停用了删除用户功能,以防攻击者破坏用户账户。目前我们尚未发现任何恶意篡改账户的行为。待大多数用户更换账户密钥后,我们将重新启用该功能。
- 迷雾通 5.9.0 中的账户密钥更换功能(参见用户需要做什么)。
加固
- 账户密钥现以哈希形式存储,不再使用明文,因此即使数据库今后再次遭到入侵,也不会像这次一样泄露全部账户密钥。
- 数据库访问已通过 IP 白名单进行限制。
- 旧版用户名/密码登录方式正在逐步停用,因为许多用户设置的密码强度较弱,其哈希很容易被暴力破解。
经验教训
这是我们所知的首次针对迷雾通系统的入侵。以下三项失误导致了这次事件:
- 我们将主数据库管理员凭据发布到了公开的 GitHub 仓库中,并且 5 年来一直没有发现。
- 我们以明文形式存储账户密钥,而没有进行哈希处理。(我们当初这样选择,是因为账户密钥熵值高、无法猜测,这消除了使用密码哈希的理由之一)
- 我们没有按 IP 地址限制数据库访问,否则本可以阻止所有未授权 IP 地址的访问。
由于我们长期坚持尽可能少地收集数据(例如注册时不收集任何联系方式),并对所收集的数据尽量少做记录,数据库中不包含注册联系信息、浏览记录或支付卡信息。
对于此次数据泄露,以及更换账户密钥给所有用户带来的不便,我们深表歉意。我们希望通过对泄露内容和入侵经过保持最大程度的透明,让用户尽可能清楚地了解情况,同时也让我们自己更好地从过去的错误中吸取教训。我们将继续改进数据库管理实践和全系统的安全防御,让迷雾通成为更安全的 VPN。
– @nullchinchilla + @thisbefruit,迷雾通团队





