20250528 - Usual 攻击事件: 价差兑换与请君入瓮
背景信息
項(xiàng)目背景
VaultRouter 合約有用特權(quán)身份,可以通過(guò) Usd0PP 合約將 USD0++ 以 1:1 的比例兌換成 USD0,隨后通過(guò) UniV3 將 USD0 swap 成 sUSDS,并 deposit 成 usUSDS 發(fā)送給用戶(hù)。
攻擊概述
在本次 Usual 攻擊事件中,攻擊者首先創(chuàng)建了惡意的 [USD0, sUSDS] 池子,然后利用 VaultRouter 合約的特權(quán)身份,將 1899838 USD0++ 以 1:1 的比例兌換成 USD0,并且在惡意池子中將 USD0 兌換為 sUSDS。隨后攻擊者通過(guò)移除流動(dòng)性的方式獲取所有的 USD0。最后通過(guò) USD0USD0++ 市場(chǎng)將 1899838 USD0 兌換成 1943686 USD0++,兌換比例為 1 : 1.02,獲利 43847 USD0++。
漏洞成因
- VaultRouter 合約可以將 USD0++ 以 1:1 的比例兌換成 USD0,與市場(chǎng)價(jià) 1 : 1.02 存在價(jià)差。
- VaultRouter 和 Augustus 合約均沒(méi)有對(duì)傳入的 swapData 進(jìn)行檢查,使得攻擊者可以操控 USD0 swap sUSDS 這一步驟在全部流動(dòng)性均為自己添加的、且價(jià)格失衡的惡意池子中進(jìn)行。
相關(guān)鏈接
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 概覽
- 創(chuàng)建惡意的 [USD0, sUSDS] 池子,并向其添加了 10 wei 的 sUSDS
- 執(zhí)行閃電貸
- 將獲利資金兌換成 ETH
FlashLoan 分析
攻擊者在閃電貸內(nèi)執(zhí)行了本次攻擊,具體做了以下操作:
- VaultRouter.deposit()
- 移除 2.1 中創(chuàng)建的池子流動(dòng)性
- USD0USD0++.exchange() USD0 -> USD0++
- USD0USD0++.exchange() USD0++ -> USD0
- Uniswap V3: Router.exactInput() USD0 -> ETH
- 歸還閃電貸
VaultRouter.deposit()
- 首先通過(guò) Usd0PP.unwrapWithCap() 函數(shù)將 USD0++ 按照 1:1 的比例換成 USD0
- VaultRouter 在攻擊者創(chuàng)建的惡意池子中將 1899838 USD0 兌換成 5wei sUSDS
- 將兌換得到的 5wei sUSDS 通過(guò) deposit() 質(zhì)押成 usUSDS 并發(fā)送給攻擊合約(不重要)
移除流動(dòng)性
攻擊者將 VaultRouter 在 2.2.1 中 swap 進(jìn)去的 1899838 USD0 通過(guò)移除流動(dòng)性的方式取出
exchange USD0 -> USD0++
攻擊者通過(guò) 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 沒(méi)有對(duì) augustus 使用的參數(shù) data 進(jìn)行檢查和限制,這使得攻擊者可以傳入自己構(gòu)造的惡意池子(相同幣種不同費(fèi)率),從而在 USD0 -> sUSDS 兌換完成后可以通過(guò)移除流動(dòng)性的方法取回所有 USD0。
總結(jié)
以上是生活随笔為你收集整理的20250528 - Usual 攻击事件: 价差兑换与请君入瓮的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Java 生成随机字符串的六种方法
- 下一篇: CentOS 7 系统调优深度指南