freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

零时科技 || LI.FI 攻击事件分析
2024-07-29 15:43:42

背景介绍

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

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

攻击及事件分析

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

1722238772_66a7473472cac201b59ae.png!small?1722238773255

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

1722238785_66a74741863dc190ed36f.png!small?1722238786256

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

1722238808_66a74758b64d65605876c.png!small?1722238809165

其中SwapData的结构如下

1722238825_66a747693ea6ab09f7c6a.png!small?1722238825771

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

1722238835_66a747736614756d9b04a.png!small?1722238836151

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

1722238848_66a74780ea2c5f18f50dd.png!small?1722238850773

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

1722238861_66a7478d9ad6e0fff1fb8.png!small?1722238863516

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

总结

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

# 黑客攻击 # 安全事件
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录