零时科技 || SiloFinance 攻击事件分析

我们监控到 Ethereum 上针对 SiloFinance 的攻击事件,攻击共造成 54.6k USD 的损失。

登链封面(事件).jpg

<!--StartFragment-->

背景介绍

2025年6⽉25⽇,我们监控到 Ethereum 上针对 SiloFinance 的攻击事件:

https\://etherscan.io/address/0xcbee4617abf667830fe3ee7dc8d6f46380829df9

攻击共造成 54.6k USD 的损失。

<!--EndFragment-->

<!--StartFragment-->

攻击及事件分析

⾸先,攻击者调⽤了合约的 openLeveragePostion ,该函数是⼀个⽤于开启杠杆头⼨的函数,它通过闪电贷(flashloan)机制来实现杠杆交易。随后在 onFlashLoan 回调中执⾏  _openLeverage 完成将闪电贷资⾦通过 _fillQuote 转换为抵押品等操作。

<!--EndFragment-->

1.png

<!--StartFragment-->

我们可以看到相关代码:

<!--EndFragment-->

2.png

<!--StartFragment-->

其中 _flashArgs.flashloadTarget 为攻击者设置的攻击合约,所以该函数调⽤了攻击和约的 flashloan 。

<!--EndFragment-->

3.png

<!--StartFragment-->

随后,攻击合约调⽤了 onFlashLoan ,我们可以看到相关代码如下:

<!--EndFragment-->

4.png

<!--StartFragment-->

由于 _txAction 在函数 openLeveragePostion 已经被设置成为了 LeverageAction.Open ,所以接下来会调⽤ _openLerverage 。

<!--EndFragment-->

5.png

<!--StartFragment-->

随后会调⽤ _fillQuote ,这个函数的作⽤是将 debt token 兑换为 collateral token ,问题就出在这⾥。我们看⼀下_fillQuote 的实现⽅式:

<!--EndFragment-->

6.png

<!--StartFragment-->

我们可以看到, contract addr 为 swapArgs.exchageProxy , input data 为 swapArgs.swapCallData 。这两个参数均为 SwapArgs 结构体中的成员,来⾃ onFlashLoan 的 _data ,可以被攻击者控制。

<!--EndFragment-->

struct SwapArgs {
    address exchangeProxy; //0x160287e2d3fdcde9e91317982fc1cc01c1f94085
    address sellToken; //0x79c5c002410a67ac7a0cde2c2217c3f560859c7e
    address buyToken; //0x79c5c002410a67ac7a0cde2c2217c3f560859c7e
    address allowanceTarget;//0x79c5c002410a67ac7a0cde2c2217c3f560859c7e
    bytes swapCallData; //0xd516418400000000000000000000000000000000000000000000000c249fdd327780000000000000000000000000000004377cfaf4b4a44bb84042218cdda4cebcf8fd6200000000000000000000000060baf994f44dd10c19c0c47cbfe6048a4ffe4860}

<!--StartFragment-->

我们将 input data 也就是 swapCallData 解码后得到:

<!--EndFragment-->

0xd5164184 // borrow(uint256,address,address)
0x00000000000000000000000c249fdd3277800000 //uint256 _assets
0x04377cfaf4b4a44bb84042218cdda4cebcf8fd62 //address _recviver
0x60baf994f44dd10c19c0c47cbfe6048a4ffe4860 //address _borrower

<!--StartFragment-->

也就意味着攻击者调⽤了 borrow 函数。随后,攻击者通过 borrow 获得了 224个WETH 完成攻击。

<!--EndFragment-->

7.png

<!--StartFragment-->

总结

本次漏洞的成因是 Silo 合约的 flashloan callback 函数没有验证传入的数据,导致攻击者传入恶意数据,最终完成对 Silo 的攻击。建议项⽬⽅在设计经济模型和代码运⾏逻辑时要多⽅验证,合约上线前审计时尽量选择多个审计公司交叉审计。

<!--EndFragment-->

noneage服务产品介绍.jpg

<!--StartFragment-->

官网:https\://noneage.com/

邮箱:support\@noneage.com

电话:15029229543

服务号.jpg

<!--EndFragment-->

  • 原创
  • 学分: 6
  • 分类: 安全
  • 标签:
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
零时科技
零时科技
0xbD0b...A354
专注区块链生态安全