零时科技 || LI.FI 攻击事件分析
2024-07-29 14:31
零时科技
2024-07-29 14:31
订阅此专栏
收藏此文章


背景介绍


2024 年 7 月 16 日,我们监控到了一笔 Ethereum 上的攻击事件,https://etherscan.io/tx/0xd82fe84e63b1aa52e1ce540582ee0895ba4a71ec5e7a632a3faa1aff3e763873

被攻击的协议为LI.FI ProtocolLI.FI Protocol 是一个聚合协议。此次攻击中,攻击者共获利 2,276,295 USDT 折合 22.7 万 USD。 



攻击及事件分析


首先,攻击者查询了地址 0xabe45ea636df7ac90fb7d8d8c74a081b169f92ef 的 USDT 余额,和该地址对余额对于 LI.FI Protocol 可以花费的额度。接着,攻击者调用了 depositToGasZipERC20 这个函数



我们可以看到上述函数的具体代码实现,如下图:



我们可以看到,在函数 depositToGasZipERC20 中调用了 LibSwap.swap 函数,具体代码如下:



其中SwapData 的结构如下: 



我们可以看到,只要控制了 swap 函数的参数_swap,既可以利用 LI.FI Protocol 合约调用任意合约,传入任意参数。我们可以看到,攻击者传入的参数为:



根据 SwapData 的数据结构,我们可以看到,攻击者利用传入的参数调用了合约 0xdac17f958d2ee523a2206206994597c13d831ec7: callTo(USDT),传入的 inputData 为:



由于0x23b872dd 为 transferFrom 的 signature,根据该函数的参数解析的数据为:



相当于利用 LI.FI Protocol,从 0xabe45ea636df7ac90fb7d8d8c74a081b169f92ef 将 2276295880553 USDT 转给了 0x8b3cb6bf982798fba233bca56749e22eec42dcf3,至此,攻击者完成了攻击。 



总结


本次漏洞的成因是被攻击合约对攻击者传入参数校验不严格,导致攻击者可以通过构造特殊 inputData 来使受害者合约调用任意合约并传入任意参数。最终,攻击者利用特殊的参数,使得受害者合约通过 transferFrom 将授权给其合约的代币转入到攻击者控制的地址。建议项目方在设计代码运行逻辑时要多方验证,合约上线前审计时尽量选择多个审计公司交叉审计。




若需了解更多产品信息或有相关业务需求,可扫码关注公众号或移步至官网:


微信号noneage

官方网址https://noneage.com/





推荐阅读

REVIEW




END





点击阅读全文 立刻直达官网

     /www.noneage.com/    


【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。

零时科技
数据请求中
查看更多

推荐专栏

数据请求中
在 App 打开