2022年2月19日,专注于跨链基础设施的Multichain发布了关于1月10日出现的漏洞事后分析,并准备启动用户补偿方案。全文主要内容如下。
2022 年 1 月 10 日,Multichain收到安全公司 Dedaub 发出的有关Multichain流动性池合约和路由器合约的两个严重漏洞警报,后被证实8种代币(WETH、WBNB、MATIC、AVAX、MFI、WSPP、TLOS、IOTEX)受到了漏洞的影响。流动性池漏洞一经报告,Multichain团队便立即将受影响的代币流动性升级部署到新合约,使漏洞迅速得到修复。 但是,对于尚未取消对受影响的路由合约授权的用户来说,风险仍然存在。 重要的是,取消授权必须是用户自己本人处理,因此,Multichain在 1 月 18 日对该漏洞进行了官方公告,并敦促用户按照指示立即采取行动。
事件影响
数据统计截至:UTC时间 2 月 18 日 24:00。
- 总共有7962个用户地址受到影响,4861个地址已取消授权,其余3101个地址尚未采取行动进行取消。
- 总共有 1,889.6612枚 WETH 和 833.4191枚 AVAX 被盗,其中 912.7984 枚WETH 和 125枚 AVAX 在 Multichain 和白帽的共同努力下追回。
Daily hack sum, by @Dune Analytics
1月18日,Multichain团队在所有渠道通知受影响的用户,经过一个月的努力,到目前为止已经有超过 61% 的用户已经成功取消授权。 根据 Dune Analytics 监测数据,攻击行为主要发生在漏洞发布后的第一周,1月25 日之后,黑客交易和金额开始大幅下降。在过去两周内虽然也发生了攻击,但涉及到金额都比较小。
补偿计划
在Multichain和白帽黑客的共同努力下,目前近50%的金额已被追回 (912.7984 枚WETH 和 125 枚AVAX)。尽管Multichain尽了最大的努力挽救损失,还是有976.8628 枚WETH 被盗。
为补偿用户损失,Multichain发起了一项补偿 100% 用户损失提案(包括矿工费),资金将归还给以下两类用户:
(1)已取消授权的用户
(2)在Multichain help desk(https://multichain.zendesk.com/hc/en-us/requests/new)提交ticket的用户。
Multichain团队表示,距1月18号官方披露漏洞消息并敦促用户取消授权已经过去一个月的时间。Multichain团队在这一个月内,做了最大的努力采取所有可行方式来通知受影响用户。补偿方案一经对外,难以避免黑客的恶意攻击。因此,Multichain团队对自2 月 18 日 24:00 (UTC时间)之后发生的任何损失,不再进行补偿。不过,Multichain表示会继续尽最大努力从攻击中尽可能多地追回被盗资金,并将持续更新消息。2月18日 24:00 (UTC 时间)后追回的资金也将全部退还给用户(减去矿工费)。
此外,Multichain再次强烈敦促曾经授权受影响的代币合约的用户在将任何代币发送到他们的钱包之前一定要取消授权。用户可以通过 Multichain UI 进行状态检查和取消授权。如果不清楚如何操作,可以按照Multichain给出的说明进行操作。同时提醒用户如果遇到任何问题,可以在Multichain help desk提交ticket,或通过官方Telegram进行联系,Multichain团队将会提供帮助。
Multichain UI: https://app.multichain.org/#/approvals
操作说明:https://medium.com/multichainorg/action-required-critical-vulnerability-for-six-tokens-6b3cbd22bfc0
Multichain help desk:https://multichain.zendesk.com/hc/en-us/requests/new
Telegram: https://t.me/anyswap
漏洞赏金支付
安全公司Dedaub 在发现漏洞时,立即与Multichain联系,并帮助Multichain进行对抗攻击。对于Dedaub披露的两个漏洞,Multichain团队将按照最高赏金分别奖励 100 万美元,总计奖励Dedaub 200万美元漏洞赏金。Multichain认为Dedaub为可持续的加密生态系统做出了巨大贡献,非常感谢 Dedaub 为Multichain安全所做的一切。Multichain表示日后将继续提供丰厚的奖励,以鼓励更多的人对漏洞的研究和及时披露。
事件回顾
1 月 10 日:
在接到Dedaub的报告后,Multichain立即成立了联合小组,讨论并采取了一系列措施保护资金安全。
- Multichain检查了所有代币合约(1500+),发现6种代币(WETH、WBNB、MATIC、AVAX、MFI、WSPP)可能存在风险,涉及到其流动性池的漏洞已在 24 小时内修复。
- 暂停使用6种代币的路由器合约。
- 与合作伙伴共同开展全面检查,排查受影响的用户地址。
- 建立实时监控系统。
- 开发网页前端,设置取消授权入口(https://app.multichain.org/#/approvals)。
- 创建资产保全合约。
- 通知用户取消授权。
1 月 18 日:
Multichain发布官方公告,敦促受影响的用户取消授权,并不断向所有用户更新事件最新情况。以此同时,Multichain与所有可能的渠道联系(包括Opensea、MetaMask、Polygon Bridge、Dapps 等)以呼吁用户立即采取行动保障资金安全,从而最大限度地提高取消授权的用户比例。第一个黑客攻击发生在提示公告发布后的16 小时,Multichain和安全公司 Dedaub通过运行Whitehat bots立即展开对抗以挽救用户损失。
1 月 19 日:
为防止用户遭受损失,Multichain开始向所有受影响的 AVAX、MATIC、WBNB 地址发送链上交易,提示用户尽快取消授权。
此外,Multichain与 Etherscan 浏览器进行联系,为攻击者和受影响的 WETH 地址设置警告提示栏。
1 月 20 日:
经过协商,一名黑客同意返还 259+63 ETH。
1 月 22 日:
安全公司 BlockSec 协助Multichain开展白帽救援行动。
1 月 24 日:
Multichain为 Dapps 开发了一个授权-取消 API,通过集成API, 该Dapps上的用户可以直接取消授权。SpookySwap、SushiSwap、SpiritSwap、AVAX bridge、AAVE 等都已完成集成。
1月25日:
一名社区成员(twitter handle @0xlosha)加入了白帽救援并成功保护125 个 AVAX。
Multichain 发现一个影响另外2种代币(TLOS、IOTEX)的漏洞,并及时采取措施解决,该漏洞在24小时内成功修复,没有造成任何损失。
1 月 29 日:
Multichain协助 WSPP 持有者解决了一个发生于1 月 26 日的资金被盗事件。
2 月 14 日:
在社区成员的帮助下,Multichain 与Tether取得联系,其冻结了一名黑客以太坊地址中的USDT,价值超过 715,000 美元。
2 月 17 日:
所有受影响的代币已升级到 V6 合约并支持原生币跨链,无需用户授权代币。
接下来,Multichain将继续与社区尽最大努力追踪黑客并保护用户资金安全。
技术分析
在接到安全公司提供的漏洞预警后,Multichain团队开发人员迅速核查、重现、验证了该漏洞的存在,并彻底排查所有可能涉及到的合约,最终确认此次漏洞涉及2个合约AnyswapERC20 (V5及之前版本), AnyswapRouter(V5及之前版本),具体涉及到的合约内漏洞方法有:
①AnyswapERC20:
- depositWithPermit
②AnyswapRouter: - anySwapOutUnderlyingWithPermit
- anySwapOutExactTokensForTokensUnderlyingWithPermit
- anySwapOutExactTokensForNativeUnderlyingWithPermit
(1)产生原因
该漏洞是在Anyswap合约与underlying token合约的共同作用下产生,主要原因是,对于部分underlying token合约,不存在permit方法实现,且存在有fallback函数,当调用它的permit方法时会执行通过,从而后续与资金相关的操作得到执行,影响资金安全。
AnyswapERC20合约的主要用途是资金流动性池,在收到漏洞预警的第一时间,团队立即修复并部署了V6版本安全合约,同时向MPC网络发出告警请求,将资金充值到安全流动性池内。至此,该部分资金安全。
AnyswapRouter合约主要用于链间资产路由,此漏洞主要影响的资产是对于该合约已授权的用户资产,而资产取消授权需要用户本人来处理。团队立即在应用首页开放漏洞资产强制取消授权页,并尽可能通知用户来取消授权,同时设置了资产保全合约,并密切监测该部分资金的异动。
下面以具体攻击示例,展示此次漏洞,最终的效果是:将曾经给风险资产token为AnyswapRouter授权过的用户资金,转入攻击合约。
(2)如何攻击
攻击者部署攻击合约并设置攻击合约的underlying参数为风险资产token地址,调用AnyswapRouter合约的anySwapOutUnderlyingWithPermit方法,from为给上述token为AnyswapRouter授权过的用户地址,token为攻击合约地址,amount为上述用户资金余额,其他参数任意。
进一步安全保障措施
进一步的安全审计。Multichain将对合约、跨链桥和 MPC 进行进一步的安全审计。Multichain团队将继续努力对整个跨链桥架构安全进行增强,并密切监控所有新合约。
MULTI安全基金。Multichain 将发起安全基金的治理提案。当Multichain由于自身系统和服务可能存在的漏洞造成资产损失时,安全基金可以作为一种必要和可能的救助措施。该基金的设立和使用情况后续会进行公布。
漏洞赏金计划。Multichain鼓励社区继续审查Multichain的代码和安全性。Multichain将与 Immunefi 合作开展漏洞赏金计划,该计划旨在认可独立安全研究人员和团队的价值。Multichain将为发现和提交漏洞提供 500 至 1,000,000 美元的奖励。更多详情见https://docs.multichain.org/security/bug-bounty。
对外公开免费的REVOKE-APPROVAL API。Multichain为此事件开发的授权-取消 API 已被证明是有效的。集成此 API 的协议和应用程序可以检测并提醒受影响的用户地址采取相应措施。Multichain正在对其进行更新,并将为所有项目提供免费的公共API。