北京时间 9 月 25 日晚上,推特上陆续有人发现不对劲:自己钱包里的 NFT 正在以 0 ETH 的价格「成交」卖出,一笔接一笔。NFT 交易员 Cirrus 盯到了源头,发帖报警说他眼看着一个钱包从几百个不同地址里扫走了 3,832 个 NFT,建议大家立刻撤销 NFT 授权。因为转账走的还是 Magic Eden 的旧市场路径,最先传开的说法是 Magic Eden 合约被利用。
几分钟后剧情反转。0xQuit 认领了这批动作:这是白帽救援,搬进 0x71cF3f5724bD2B72Ef6464992aCd26216DE7fe33 这个安全屋钱包的资产都会在风险解除后归还。
两个说法都是真的。这正是这件事值得搞清楚的原因。
比市场活得久的合约
出事的合约叫 Payment Processor V2,游戏公司 Limit Break(DigiDaigaku 背后那家)开发的 NFT 市场结算层。Magic Eden 2024 年初接入它做 EVM 市场结算,2024 年 10 月停用,2026 年 3 月干脆关掉了整个 EVM 市场。
问题出在哪。你在一个用 operator 结算的市场挂单时,实际上是给它的结算合约开了 setApprovalForAll 授权。挂单存在市场的数据库里,授权存在链上你的钱包里。市场关门、前端下线、挂单消失,动到的都只是挂单。授权一个字节都没变。
按 Blockaid 的定性,这次漏洞让这些沉睡的 operator 授权重新变得可执行:攻击者可以用 V2 合约冒充 NFT 持有者,以零价格把过审资产买走。堵住之前,攻击者三笔交易实际盗走了约 170 万美元的 NFT。最扎心的细节是:取消挂单、作废 master nonce,都移除不了这个权限。只有显式撤销。
这就是我们在代币授权安全里反复讲的那条原则的活案例:攻击面不是你看得见的那个 App,是你签过的授权。
救援为什么长得像攻击
Limit Break 得知漏洞后立刻暂停了 Payment Processor V3,ApeChain 上部分授权给 V3 的资产也有同样问题。但 V2 没有暂停函数。没有补丁,没有急停开关,没有客服工单。保护那些 NFT 的唯一办法,是用攻击者同款的手法抢在他前面把资产搬走。
0xQuit 的团队干的就是这个。当天总共搬走了 23,155 个 NFT、价值超过 570 万美元。另一条关联漏洞路径能偷 WETH,660 枚 WETH(按当日 ETH 价格约 180 万美元)处于风险中、未能收回。
我们自己上了链核对。光 Etherscan 转账记录前六页,安全屋钱包 0x71cF…fe33 就吃进了 6,000 多笔 NFT 转入,覆盖至少 85 个合集、来自 1,300 多个不同的源钱包,从 UTC 07:51 开始。规模对得上:这不是针对几个大户的精准打击,是把所有还挂着幽灵授权的钱包整体撤离。
如果你的 NFT 那天在这个钱包里,资产是承诺归还的,跟着 0xQuit 的推文等流程就行。同时高度警惕任何私信你「加急退还」链接的人,事后钓鱼是每次大事件的第二波收割,这个套路我们在钱包被盗后怎么办里写过。
谁需要立刻动手
Magic Eden 的官方口径(经 Crypto Briefing 报道):2024 年 10 月停用 V2,2026 年一季度关闭 EVM 市场,现有挂单不受影响;2024 年 2 月到 10 月间在 EVM 市场挂过单的用户可能仍在风险中,请撤销 approved-for-all 授权。
如果你在那段时间用过它的以太坊市场,或者用过任何 2024 年前后已经关门的 NFT 市场,现在就做一件事:
打开 revoke.cash 或同类授权扫描工具,连上当年交易用的那个钱包,找出指向已停用市场结算合约的 setApprovalForAll 记录,逐条撤销。每个连过 NFT 市场的钱包都查一遍。授权不关心你早就不交易了、市场早就不存在了、你早把那个钱包当退休账户了。
9 月 25 日这课的扎心之处在于,「我早不用那个市场了」不是一种安全状态。在链上,你还在用。一个前端已死、授权还活着的合约,不是一个死掉的产品,是一扇贴着你签名、没人看守的门,就等谁先找到那个 bug。
常见问题
Magic Eden 被黑客攻击了吗?
它还在运行的系统没有。Magic Eden 官方说法是 2024 年 10 月已停用出事的 Payment Processor V2,2026 年一季度关闭了 EVM 市场,现有挂单不受影响。被利用的是一层旧结算合约,它带着用户钱包里的授权活了快两年。
我把挂单取消了还会中招吗?
会,因为风险从来不在挂单上,而在你使用市场时给的 setApprovalForAll 授权。Blockaid 确认漏洞让旧的 operator 授权可以执行零价格转账,取消挂单和作废 master nonce 都不能移除这个权限,只有显式撤销(revoke)才有用。
现在应该做什么?
打开 revoke.cash 之类的授权扫描工具,连上你 2024 年交易用的钱包,找到指向已停用市场结算合约的 approved-for-all 记录,全部撤销。顺手把其他早就不用了的死项目授权一起清了,这次事件说明「项目凉了」不等于「授权没了」。