20250528 - Usual 攻击事件: 价差兑换与请君入瓮
背景信息
項目背景
VaultRouter 合約有用特權身份,可以通過 Usd0PP 合約將 USD0++ 以 1:1 的比例兌換成 USD0,隨后通過 UniV3 將 USD0 swap 成 sUSDS,并 deposit 成 usUSDS 發送給用戶。
攻擊概述
在本次 Usual 攻擊事件中,攻擊者首先創建了惡意的 [USD0, sUSDS] 池子,然后利用 VaultRouter 合約的特權身份,將 1899838 USD0++ 以 1:1 的比例兌換成 USD0,并且在惡意池子中將 USD0 兌換為 sUSDS。隨后攻擊者通過移除流動性的方式獲取所有的 USD0。最后通過 USD0USD0++ 市場將 1899838 USD0 兌換成 1943686 USD0++,兌換比例為 1 : 1.02,獲利 43847 USD0++。
漏洞成因
- VaultRouter 合約可以將 USD0++ 以 1:1 的比例兌換成 USD0,與市場價 1 : 1.02 存在價差。
- VaultRouter 和 Augustus 合約均沒有對傳入的 swapData 進行檢查,使得攻擊者可以操控 USD0 swap sUSDS 這一步驟在全部流動性均為自己添加的、且價格失衡的惡意池子中進行。
相關鏈接
Alert:https://x.com/BlockSecTeam/status/1927607817378177316
攻擊交易:https://app.blocksec.com/explorer/tx/eth/0x585d8be6a0b07ca2f94cfa1d7542f1a62b0d3af5fab7823cbcf69fb243f271f8
漏洞合約:
VaultRouter:https://etherscan.io/address/0xe033cb1bb400c0983fa60ce62f8ecdf6a16fce09#code
VaultRouter:https://etherscan.io/address/0xe033cb1bb400c0983fa60ce62f8ecdf6a16fce09#code
Trace 分析
Trace 概覽
- 創建惡意的 [USD0, sUSDS] 池子,并向其添加了 10 wei 的 sUSDS
- 執行閃電貸
- 將獲利資金兌換成 ETH
FlashLoan 分析
攻擊者在閃電貸內執行了本次攻擊,具體做了以下操作:
- VaultRouter.deposit()
- 移除 2.1 中創建的池子流動性
- USD0USD0++.exchange() USD0 -> USD0++
- USD0USD0++.exchange() USD0++ -> USD0
- Uniswap V3: Router.exactInput() USD0 -> ETH
- 歸還閃電貸
VaultRouter.deposit()
- 首先通過 Usd0PP.unwrapWithCap() 函數將 USD0++ 按照 1:1 的比例換成 USD0
- VaultRouter 在攻擊者創建的惡意池子中將 1899838 USD0 兌換成 5wei sUSDS
- 將兌換得到的 5wei sUSDS 通過 deposit() 質押成 usUSDS 并發送給攻擊合約(不重要)
移除流動性
攻擊者將 VaultRouter 在 2.2.1 中 swap 進去的 1899838 USD0 通過移除流動性的方式取出
exchange USD0 -> USD0++
攻擊者通過 USD0USD0++.exchange() 將 1899838 USD0 兌換成 1943686 USD0++,兌換比例為 1 : 1.02,獲利 43847 USD0++
exchange USD0++ -> USD0
攻擊者隨后又將獲利部分的 43847 USD0++ 兌換成 42973 USD0
exactInput() USD0 -> ETH
42973 USD0 兌換成了 15 WETH
歸還閃電貸
代碼分析
Usd0PP 合約允許 VaultRouter 將 USD0++ 以 1:1 的比例兌換成 USD0
VaultRouter 沒有對 augustus 使用的參數 data 進行檢查和限制,這使得攻擊者可以傳入自己構造的惡意池子(相同幣種不同費率),從而在 USD0 -> sUSDS 兌換完成后可以通過移除流動性的方法取回所有 USD0。
總結
以上是生活随笔為你收集整理的20250528 - Usual 攻击事件: 价差兑换与请君入瓮的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java 生成随机字符串的六种方法
- 下一篇: 阿纳多卢号航空母舰!