{"author":{"address":"0xbD0b3505cc45d97DdB3e7FAa75ED0Fc41c61A354","user":"https://learnblockchain.cn/people/52"},"content":{"body":"![banner.jpg](https://img.learnblockchain.cn/attachments/2024/07/Mv5yviay66a7462d351cc.jpg)\r\n\r\n\u003c!--StartFragment--\u003e\r\n\r\n# **背景介绍**\r\n\r\n\r\n2024年7月16日，我们监控到了一笔Ethereum上的攻击事件，https\\://etherscan.io/tx/0xd82fe84e63b1aa52e1ce540582ee0895ba4a71ec5e7a632a3faa1aff3e763873\r\n\r\n被攻击的协议为**LI.FI Protocol**，LI.FI Protocol是一个聚合协议。此次攻击中，**攻击者共获利2,276,295 USDT折合227万USD**。\r\n\r\n\u003c!--EndFragment--\u003e\r\n\r\n\r\n\u003c!--StartFragment--\u003e\r\n\r\n# **攻击及事件分析**\r\n\r\n\r\n\r\n首先，攻击者查询了地址0xabe45ea636df7ac90fb7d8d8c74a081b169f92ef的USDT余额，和该地址对余额对于LI.FI Protocol可以花费的额度。接着，**攻击者调用了depositToGasZipERC20这个函数**，\r\n\r\n\u003c!--EndFragment--\u003e\r\n\r\n![1.png](https://img.learnblockchain.cn/attachments/2024/07/ahkIccO666a746695c975.png)\r\n\u003c!--StartFragment--\u003e\r\n\r\n我们可以看到上述函数的具体代码实现，如下图：\r\n\r\n\u003c!--EndFragment--\u003e\r\n\r\n![2.png](https://img.learnblockchain.cn/attachments/2024/07/zFv96J2466a7467fba00f.png)\r\n\r\n\u003c!--StartFragment--\u003e\r\n\r\n我们可以看到，在函数depositToGasZipERC20中调用了LibSwap.swap函数，具体代码如下：\r\n\r\n\r\n\u003c!--EndFragment--\u003e\r\n\r\n![3.png](https://img.learnblockchain.cn/attachments/2024/07/gsmXoLpY66a7468d4f61f.png)\r\n\r\n\u003c!--StartFragment--\u003e\r\n\r\n其中**SwapData的结构如下**：\r\n\r\n\u003c!--EndFragment--\u003e\r\n\r\n![4.png](https://img.learnblockchain.cn/attachments/2024/07/T8cHsq1666a7469953968.png)\r\n\u003c!--StartFragment--\u003e\r\n\r\n我们可以看到，只要控制了swap函数的参数\\_swap，既可以利用LI.FI Protocol合约调用任意合约，传入任意参数。我们可以看到，攻击者传入的参数为：\r\n\r\n\u003c!--EndFragment--\u003e\r\n\r\n![5.png](https://img.learnblockchain.cn/attachments/2024/07/ywwJb8Wr66a746a5ee732.png)\r\n\r\n\u003c!--StartFragment--\u003e\r\n\r\n根据SwapData的数据结构，我们可以看到，攻击者利用传入的参数调用了合约0xdac17f958d2ee523a2206206994597c13d831ec7: callTo（USDT），**传入的inputData为：**\r\n\r\n\u003c!--EndFragment--\u003e\r\n\r\n![6.png](https://img.learnblockchain.cn/attachments/2024/07/2rnajLCo66a746b2676aa.png)\r\n\r\n\u003c!--StartFragment--\u003e\r\n\r\n由于**0x23b872dd为transferFrom的signature**，根据该函数的参数解析的数据为：\r\n\r\n\u003c!--EndFragment--\u003e\r\n\r\n![7.png](https://img.learnblockchain.cn/attachments/2024/07/PWEwDctP66a746c037653.png)\r\n\r\n\u003c!--StartFragment--\u003e\r\n\r\n相当于利用LI.FI Protocol，从0xabe45ea636df7ac90fb7d8d8c74a081b169f92ef将2276295880553 USDT转给了0x8b3cb6bf982798fba233bca56749e22eec42dcf3，至此，攻击者完成了攻击。 \r\n\r\n\u003c!--EndFragment--\u003e\r\n\r\n\r\n# **总结**\r\n\u003c!--StartFragment--\u003e\r\n\r\n本次漏洞的成因是被攻击合约对攻击者传入参数校验不严格，导致攻击者可以通过构造特殊inputData来使受害者合约调用任意合约并传入任意参数。最终，**攻击者利用特殊的参数，使得受害者合约通过transferFrom将授权给其合约的代币转入到攻击者控制的地址**。建议项目方在设计代码运行逻辑时要多方验证，合约上线前审计时尽量选择多个审计公司交叉审计。\r\n\r\n\u003c!--EndFragment--\u003e","title":"零时科技 || LI.FI 攻击事件分析"},"history":null,"timestamp":1722238698,"version":1}