注意安全风险

作者:Beosin

原用标题:损失约 1000 万美元,Beosin Trace 对 LI.FI 事件进行追踪分析

封面:Photo by Nicolas Arnold on Unsplash

2024 年 7 月 16 日,据 Beosin Alert 监控预警发现跨链协议 LI.FI 遭受攻击,攻击者利用项目合约中存在的 call 注入漏洞,盗取授权给合约的用户资产。Beosin 对本次事件第一时间进行了分析。

详细攻击步骤:

攻击者地址:

0x8B3Cb6Bf982798fba233Bca56749e22EEc42DcF3

被攻击合约:

0x1231DEB6f5749EF6cE6943a275A1D3E7486F4EaE

(1) 攻击者部署合约 0x588E7e8E522eD4Dd8DaD263bD72208B099250114,以此来充当伪造的资产合约,为后续攻击做下准备。

(2) 发动攻击,直接调用 LI.FI 主合约的 depositToGasZipERC20 函数。因为 LI.FI 是 Diamond 模式,它会 delegatecall 到 GasZipFacet 合约上的 depositToGasZipERC20 函数。

(3) 在 GasZipFacet 合约上的 depositToGasZipERC20 函数中,call 调用的地址和参数均是可以被攻击者指定,所有攻击者指定了 callTo 地址为 USDT 和 USDC 等资产,而 call 的 data 被指定为调用 transferFrom 函数,此次就可以将授权给合约账户的资产转移出去。

漏洞原因:

LI.FI 项目合约存在一个 depositToGasZipERC20 函数,可将指定代币兑换为平台币并存入 GasZip 合约,但是在兑换逻辑处的代码未对 call 调用的数据进行限制,导致攻击者可利用此函数进行 call 注入攻击,提取走给合约授权用户的资产。

本次事件除了 call 注入的合约漏洞外,还有一点值得注意,那就是 Diamond 模式下,Facet 合约的配置问题。进一步分析发现,GasZipFacet 合约是在 5 天前部署,并在十多个小时前,由项目的多签管理员在 LI.FI 主合约进行注册的。

所以,通过这次事件可以发现,对于 Diamond 这类可升级模式,新增功能合约的安全性也需要得到高度重视。

Beosin Trace 对被盗资金进行追踪发现,损失金额包括 633.59 万 USDT、319.19 万 USDC、16.95 万 DAI,约 1000 万美元。攻击发生在 ETH 以及 Arbitrum 这两条链上,目前大部分资金转为 ETH 暂无新的动向,Beosin 已将黑客相关地址加入黑地址库,后续将持续保持追踪关注。

7 月 16 日,LI.FI 发文称又发现了 4 个安全漏洞,所有与 LI.FI 协议交互的用户资金现在都处于危险之中,敦促所有用户立即撤销权限。

以下是目前 Beosin 整理的一部分被盗用户信息,请用户查阅账户安全性,Revoke.cash 已经发布了漏洞检查工具,用户可以快速检查自己(的地址)是否受到影响。目前已知主要受影响的是以太坊网络,其他链上的部分合约也存在类似问题。

免责声明:作为区块链信息平台,本站所发布文章仅代表作者及嘉宾个人观点,与 Web3Caff 立场无关。文章内的信息仅供参考,均不构成任何投资建议及要约,并请您遵守所在国家或地区的相关法律法规。