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已经发布了漏洞检查工具,用户可以快速检查自己(的地址)是否受到影响。目前已知主要受影响的是以太坊网络,其他链上的部分合约也存在类似问题。
Beosin作为全球最早一批从事形式化验证的区块链安全公司,主打”安全+合规“全生态业务,在全球10多个国家和地区设立了分部,业务涵盖项目上线前的代码安全审计、项目运行时的安全风险监控与阻断、被盗追回、虚拟资产反洗钱(AML)以及符合各地监管要求的合规评估等“一站式”区块链合规产品+安全服务。欢迎点击公众号留言框,与我们联系。