比特幣交易所 比特幣交易所
Ctrl+D 比特幣交易所
ads

撿錢撿成千萬富翁:UniswapV2 Router02實現缺陷_SWAP

Author:

Time:1900/1/1 0:00:00

我們團隊在整理和復盤Sanshu Inu事件時,發現通縮代幣(Deflation Token)或FoT代幣(Fee-on-Transfer Tokens)是造成這次攻擊的罪魁禍首之一。

我們對通縮代幣可能造成的安全漏洞進行了進一步分析,發現UniswapV2在對Router01的升級修復版Router02的實現中引入了漏洞,使得其中的代幣可以被任意用戶取出。我們初步統計發現,有幾個地址持續從中獲利,僅其中一個地址就從中獲利1000+ETH,價值超過1600萬人民幣。

而且,該問題不僅局限于Uniswap,在所有采用類似UniswapV2 Router02的代碼的平臺都存在這個問題,其中包括以太坊上的SushiSwap,BSC鏈上的PancakeSwap等。為幫助相關項目方了解該問題,在聯系了相關項目方后,我們對該缺陷進行公開。

Uniswap是DeFi領域舉足輕重的去中心化交易所,對于每一對代幣,Uniswap設置了對應的Pair(流動性池,下稱Pair或池子)實現了自動做市機制。然而直接調用UniswapV2的Pair進行交互(如圖中的Choice 1)對普通用戶而言是有一定的難度的。因此UniswapV2為用戶進行了一層封裝,即用戶可以通過UniswapV2的Router實現代幣的交換(Swap)及流動性的增減(Add/Remove Liquidity)操作,而不必操心Router與Pair具體如何實現交互(如圖中的Choice 2)。

(要點1)Router在代替用戶與Pair進行代幣交換(Swap)和增減流動性(Add/Remove Liquidity)的時候,要么會直接將錢在用戶和Pair之間transfer,而不經過Router;或者Router會用變量amount記錄用戶和Pair轉進來的代幣數量,再分別地轉給對應的Pair或者用戶。也就是說,正常情況下,Router在一筆交易執行之后,是不會留存有任何Token的。

Bitfinex Alpha:比特幣價格上漲期間衍生品交易量保持在正常水平:3月21日消息,Bitfinex近期的一篇文章表示,在美國央行恢復金融穩定措施的推動下,比特幣價格大幅上漲。3月19日,在現貨購買大量涌入的推動下,比特幣的價格創下今年新高(28472 USDT),比特幣非零余額錢包地址數已飆升至近4500萬,新地址的指數移動平均線也呈持續上升趨勢。

在比特幣永續期貨市場中,資金費率也幾乎沒有變化,這表明在價格上漲期間衍生品交易量保持在正常水平,現貨購買正在支撐市場走勢。

以太坊供應量也在以越來越快的速度減少。如果對以太坊的需求繼續增長,這將進一步增加以太坊gas費,并最終進一步加快其通貨緊縮速度(這對以太坊投資者來說是一個看漲的情景)。[2023/3/21 13:16:47]

(要點2)問題出在Router02新增的減少流動性的函數實現。Router02在實現函數removeLiquidityETHSupportingFeeOnTransferTokens()的時候,并沒有記錄應當返還給用戶多少代幣,而是調用該種代幣的balanceOf(address(this))函數,從而將Router02當前持有的所有該種代幣都轉給用戶。代碼如圖所示。

正常情況下,這樣并不會產生任何問題,因為Router02所有的錢在該筆交易內,都是來源于用戶從Pair中取出的流動性,所以都是用戶的。但是,如果某種情況下導致了Router02中事先就存有了該種代幣呢?這個時候用戶就可以調用該問題函數實現不當獲利了。

經過我們的調查發現,現實中這種情況屢見不鮮。我們根據獲利數量初步分析發現,導致Router02中不正常存有代幣的情況有以下幾種:

比特幣全網未確認交易數量為6897筆:金色財經報道,據BTC.com數據顯示,目前比特幣全網未確認交易數量為6897筆,全網算力為231.64EH/s,24小時交易速率為3.22交易/s,目前全網難度為35.36T,預測下次難度下降6.81%至32.96T,距離調整還剩4天1小時。[2022/12/31 22:17:30]

Token的機制設置

部分Token為了給Token的使用者進行分紅或補償,會定期或不定期給Token的用戶發該種Token。如穩定幣Fei(TVL 1.66億美元),我們將在下文的實例介紹中詳細介紹該項目。????2.項目空投。

用戶誤轉。我們發現大量交易不小心將Token直接轉入Router02中,而不當獲利者(我們姑且這么稱呼)會在接下來的幾個塊內(甚至同一塊內)迅速利用Uniswap的該缺陷函數移走用戶資產,實現獲利。如交易0x1951efc5ea628503f02d5f233aee9bdeb9594ee9164947af49c99c202ce05f41中 一個地址向Router02轉了價值1000美元的FXF Token,而在緊隨其后的另一筆交易(0xbbcaf5069e21ee457fe4083c6ecc728d5a71443a377a0c700db6ed6a69fdbd5d)中這些Token就被另一個地址采用上述方法取走了。

由此,我們只需要監測Router02中的Token數量,如果某種Token的價值能夠覆蓋發起交易的交易費用,就可以實現獲利。具體交易實現如下

1.向對應Pair(必須是ETH和該種Token的池子)提供少量流動性,為接下來移除流動性做好準備。

監控Router02地址,獲取其每一個Token的Balance。當某個Token的balance總價值能夠覆蓋交易費用和相關成本時,發起下一步交易。

Web3初創公司Courtyard完成700萬美元種子輪融資,NEA領投:11月3日消息,為稀有運動鞋等收藏品制作NFT的Web3初創公司Countyyard宣布完成700萬美元種子輪融資,NEA領投,Y Combinator、OpenSea Ventures、VaynerFund、Brink's、Cherry Ventures和幾位天使投資人參投。

據悉,Courtyard是Y Combinator 2022年冬季孵化加速計劃項目之一,該公司提供的服務可以將一些貴重的實物收藏品鑄造成具有數字所有權的NFT,每個實物藏品都會經過認證、保險并存儲在保險庫中。目前Courtyard已經推出了一個運動鞋NFT市場,后續將會把業務拓展到豪車和藝術品領域。(businessinsider)[2022/11/3 12:11:47]

通過調用Router02合約的函數函數removeLiquidityETHSupportingFeeOnTransferTokens()移除少量該池子的流動性,這個時候Router02會根據balanceOf(address(this))將你應得的部分和Router02中所有的該種Token一起transfer給交易發起者。

研究過程中,我們發現其中兩筆交易中其調用者獲利了將近300個ETH,總價值約160萬美元。

Fei 項目介紹

這兩筆交易中涉及的Token為Fei(一種對標美元的穩定幣,即1 Fei == 1 USD)。其中Fei的Incentive機制是導致Router02中出現大量Fei代幣的原因。該機制可以為UniswapV2的 FEI/WETH交易池設置一個Incentive合約。當有人調用Fei進行轉賬的時候,Fei合約會根據sender是否注冊incentive合約決定在轉賬完成后是否會回調對應Incentive合約的Incentivize函數。該函數根據條件判斷后會調用Fei.mint,向recipient,也就是Fei的接收者額外mint出一筆錢,如圖。

Bitfly:Ethermine將于9月15日關閉ETH礦池,且不為PoW分叉幣提供專用礦池:8月19日消息,Ethermine礦池母公司Bitfly發布公告稱,以太坊的挖礦階段將于9月15日結束,此后將無法再使用GPU或ASIC在以太坊網絡上挖采ETH。一旦PoW挖礦階段結束,Ethermine以太坊礦池將切換到僅取款模式。礦機儀表板上將提供準確的倒數計時器,用戶可繼續挖以太坊直到倒計時歸零。這意味著所有Ethermine層服務器將被關閉,用戶將無法再將礦機連接到Ethermine以太坊池。經過仔細評估,Bitfly決定不為任何計劃中的PoW分叉幣提供專用礦池。不過Ethermine仍將繼續提供ETC、RVN、Ergo以及Beam礦池。

此前消息,以太坊主網合并暫定TTD預計在9月15日。[2022/8/19 12:35:15]

也就是說,這個incentive合約的功能就是,任何人在UniswapV2的 FEI/WETH交易池取走FEI的時候,除了會獲得UniswapV2的 FEI/WETH交易池 transfer的本金外,還會額外收到一筆獎勵。而Router02代替用戶進行removeLiquidityETH和removeLiquidityETHWithPermit操作的時候,就會由于轉手了Fei代幣,而被發放獎勵。

獲利實現分析

下面我們以交易0x46a8a8eb2fcf75e0a4874d0049d833eaa6432d4b28cb558dc631806be431618b為例,具體介紹獲利是怎么實現的。

紐約法院已凍結三箭資本在美剩余資產:7月13日消息,紐約法院已凍結三箭資本在美剩余資產,紐約南區法官馬丁格倫在周二的法庭聽證會上批準了這項緊急動議。格倫在書面決定中指出,只有指定的破產清算人有權轉讓、擔保或以其他方式處置位于美國領土管轄范圍內的債務人的任何資產。代表債權人的律師則表示,采取激進行動的一個主要原因是,三箭資本的兩位創始人目前下落不明。[2022/7/13 2:09:26]

在該交易發生之前,Fei在交易0x9f4e2995481fa10cba40ac013d06e2352db5323bd2deae81b89444be2e88a1be中通過調用了EthUniswapPCVController?合約的reweight(),其中調用了UniswapV2Router02的removeLiquidityETH函數,導致大量的Fei(約69萬個)截留在Router02中。

該用戶監測到該獲利機會,在隨后的幾個塊實現了該交易(部分執行截圖如下)。

從圖中的第2、3個紅框可以看到,用戶調用該特殊的移除流動性的函數后,Pair轉給Router02的錢僅約為2.6e16 wei(不到1美元),而Router02轉給用戶的錢卻約有6.9e23 wei,即純獲利Fei約69萬個。而產生差距如此巨大的原因就在于Router02中本來就有將近這么多錢(見第1個紅框)。(圖中可以看到Fei在transfer的時候調用了對應的Incentive函數,感興趣的朋友可以自行查看交易。圖源https://tx.blocksecteam.com/)

用戶在獲得這些大量的Fei Token之后在同一個交易內直接通過Uniswap將其轉成WETH(超過297個)后轉給獲利地址0x4d1d758f0966c6e6de873958e62788300c13f60e。

后續

Fei項目已經在2021年7月4號移除了該交易對的Incentive合約,即Fei項目不會再向Router02發放獎勵,交易0xfa6e50b964f57a7fd9451af694d18b851a30e58649d878d21b10c20f810723d1。

漏洞來源

Router02是UniswapV2中引入的第二版Router,為了解決Router01無法處理FoT代幣(Fee-on-Transfer Tokens)的問題(如圖,來源Uniswap官方文檔)。

FoT代幣會在transfer過程中收取手續費,導致調用transfer()、transferFrom()時,接收方實際獲得代幣數量小于發送方發出的代幣數量,致使Router01無法根據Pair傳給Router的數量原封不動地轉給用戶。所以Router02實現了removeLiquidityETHSupportingFeeOnTransferTokens()用于解決該問題,將該轉給用戶的,都轉給用戶。

但是該實現沒有對該函數的假設(即處理的FoT代幣)進行檢驗,而是粗暴地使用了balanceOf(address(this)),導致用戶(包括項目方)受害,大量財產暴露甚至散落在公眾場合,吸引了惡意用戶來不當獲利。

受害者分析

我們根據Router02出現代幣的主要幾種情況進行分析,可以看到受害者如下:

1.Token的機制設置導致Router02中存在部分Token:直接受害者是Uniswap的用戶,用戶在Uniswap交換的時候本來應該得到的Token部分被Router02截獲,導致用戶損失。而這進一步導致Token項目方設計的機制無法將利益分發給其用戶,使得其相關機制失效,導致項目可用性受損,因此間接受害者是項目方。2.用戶誤轉導致Router02中出現Token:受害者是相關用戶,不可否認用戶有其一定的責任,但是Uniswap由于缺乏必要的校驗,導致其將不屬于Uniswap的幣轉給第三方。

建議

defi項目之間的可組合性導致了defi領域的繁榮,也帶來大量安全風險。因此項目方在項目開發的過程中需要特別注意與其他項目之間的交互,是否會由于適配性等問題導致安全風險,比如與通縮代幣的交互等。

由于Uniswap的流動性大,且其分叉項目廣泛,該漏洞的影響的項目除了UniswapV2之外,還包括SushiSwap,BSC鏈上的PancakeSwap等。

非法獲利交易數量

根據我們初步統計,僅在以太坊上惡意地址,總共獲利就超出1000ETH。下面附上部分地址及相關不當獲利情況統計(以ETH計價,粗略統計,當前ETH價格約為2600美元(2021)。

上文提到的UniswapV2中采用balanceOf(address(this))實現的移除流動性的函數,除了removeLiquidityETHSupportingFeeOnTransferTokens(),還有另一種函數內部調用了前面所說函數的實現——removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(),即在特定情況下,這兩個函數的調用都可以實現不當得利。詳見UniswapV2Router02合約代碼。

各平臺合約地址及不當獲利交易舉例

Fei代幣地址:0x956F47F50A910163D8BF957Cf5846D573E7f87CA

Fei Incentive合約:0xfe5b6c2a87A976dCe20130c423C679f4d6044cD7

UniswapV2的 FEI/WETH交易池地址:0x94B0A3d511b6EcDb17eBF877278Ab030acb0A878

本文所用價格及TVL數據來源為coingecko及etherscan。

通縮代幣的介紹及可能給項目方帶來的安全風險詳見我們之前的攻擊報告——Sanshu Inu事件報告

References

?Router02:?https://etherscan.io/address/0x7a250d5630b4cf539739df2c5dacb4c659f2488d

?獲利地址:?https://etherscan.io/address/0x4d1d758f0966c6e6de873958e62788300c13f60e

?EthUniswapPCVController :?https://etherscan.io/address/0x7a165f8518a9ec7d5da15f4b77b1d7128b5d9188

?Uniswap官方文檔:?https://docs.uniswap.org/protocol/V2/reference/smart-contracts/router-01

Tags:ROUTETEROUTSWAPROUTE價格XHUNTERoutletschainSWAPTC幣

火幣下載
Coinbase敲鐘 Uniswap吹號_COIN

Coinbase IPO,加密貨幣交易所登陸傳統股票交易所,固然是加密貨幣行業的一個里程碑事件,卻也是相當魔幻現實主義的一幕。新錢和老錢在這一時空點上交匯.

1900/1/1 0:00:00
DAO模型是如何在傳統合作社基礎上建立的?_STA

Hepburn wholefoodles是在維多利亞的戴爾斯福德(Daylesford)的幾個朋友創辦的,他們希望不用去城里市場就能買到價格實惠的干貨和當地的新鮮食品.

1900/1/1 0:00:00
最實用DeFi工具匯總 你都知道哪些?_DEFI

實用的 DeFi 工具可以幫助你省下很多時間,并快速找到優質投資。本文梳理自 DeFi 研究員 The DeFi Edge 在個人社交媒體平臺上的觀點:實用的 DeFi 工具可以幫助你省下很多時.

1900/1/1 0:00:00
數字貨幣史上最嚴厲監管來襲?對不起 你可能有誤解_FAT

近日,彭博社一則“FATF將于6月21日發布一份說明,澄清參與國應如何對數字資產部門進行監督”的新聞在國內引起廣泛關注。甚至有國內媒體聲稱“史上最大規模的嚴厲監管即將到來”.

1900/1/1 0:00:00
金色早報 | 巴西央行行長:不同意對加密資產進行嚴格監管_CFT

頭條 ▌巴西央行行長:不同意對加密資產進行嚴格監管8月12日消息,巴西央行行長 Roberto Campos Neto 在參加一場加密主題會議上表示.

1900/1/1 0:00:00
DAO 工具篇:自下而上的薪資發放工具 Coordinape_ORD

DAO 作為一種建立在共識之上的人類協同方式,革新了組織治理和決策的模式,但隨著 DAO 應用變得廣泛,其不足之處也愈發明顯.

1900/1/1 0:00:00
ads