背景介绍
2025 年 6 ⽉ 25 ⽇,我们监控到 Ethereum 上针对 SiloFinance 的攻击事件:
https://etherscan.io/address/0xcbee4617abf667830fe3ee7dc8d6f46380829df9
攻击共造成 54.6k USD 的损失。
攻击及事件分析
⾸先,攻击者调⽤了合约的 openLeveragePostion ,该函数是⼀个⽤于开启杠杆头⼨的函数,它通过闪电贷(flashloan)机制来实现杠杆交易。随后在 onFlashLoan 回调中执⾏ _openLeverage 完成将闪电贷资⾦通过 _fillQuote 转换为抵押品等操作。
我们可以看到相关代码:
其中 _flashArgs.flashloadTarget 为攻击者设置的攻击合约,所以该函数调⽤了攻击和约的 flashloan 。
随后,攻击合约调⽤了 onFlashLoan ,我们可以看到相关代码如下:
由于 _txAction 在函数 openLeveragePostion 已经被设置成为了 LeverageAction.Open ,所以接下来会调⽤ _openLerverage 。
随后会调⽤ _fillQuote ,这个函数的作⽤是将 debt token 兑换为 collateral token ,问题就出在这⾥。我们看⼀下_fillQuote 的实现⽅式:
我们可以看到, contract addr 为 swapArgs.exchageProxy , input data 为 swapArgs.swapCallData 。这两个参数均为 SwapArgs 结构体中的成员,来⾃ onFlashLoan 的 _data ,可以被攻击者控制。
struct SwapArgs {
address exchangeProxy; //0x160287e2d3fdcde9e91317982fc1cc01c1f94085
address sellToken; //0x79c5c002410a67ac7a0cde2c2217c3f560859c7e
address buyToken; //0x79c5c002410a67ac7a0cde2c2217c3f560859c7e
address allowanceTarget;//0x79c5c002410a67ac7a0cde2c2217c3f560859c7e
bytes swapCallData; //0xd516418400000000000000000000000000000000000000000000000c249fdd327780000000000000000000000000000004377cfaf4b4a44bb84042218cdda4cebcf8fd6200000000000000000000000060baf994f44dd10c19c0c47cbfe6048a4ffe4860}
我们将 input data 也就是 swapCallData 解码后得到:
0xd5164184 // borrow(uint256,address,address)
0x00000000000000000000000c249fdd3277800000 //uint256 _assets
0x04377cfaf4b4a44bb84042218cdda4cebcf8fd62 //address _recviver
0x60baf994f44dd10c19c0c47cbfe6048a4ffe4860 //address _borrower
也就意味着攻击者调⽤了 borrow 函数。随后,攻击者通过 borrow 获得了 224 个 WETH 完成攻击。
总结
本次漏洞的成因是 Silo 合约的 flashloan callback 函数没有验证传入的数据,导致攻击者传入恶意数据,最终完成对 Silo 的攻击。建议项⽬⽅在设计经济模型和代码运⾏逻辑时要多⽅验证,合约上线前审计时尽量选择多个审计公司交叉审计。
若需了解更多产品信息或有相关业务需求,可扫码关注公众号或移步至官网:
微信号|noneage
官方网址|https://noneage.com/
推荐阅读
REVIEW
END
点击阅读全文 立刻直达官网
/www.noneage.com/
【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。