以太坊交易所 以太坊交易所
Ctrl+D 以太坊交易所
ads

技術拆解YFValue合約漏洞,一行代碼如何鎖定上億美元?_區塊鏈:HyperStake

Author:

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

編者按:本文來自慢霧科技,Odaily星球日報授權轉載。前言

據鏈聞消息,DeFi項目YFValue發布公告稱,團隊于昨日在YFV質押池中發現一個漏洞,惡意參與者借此漏洞對質押中的YFV計時器單獨重置。目前已有一個惡意參與者正試圖借此勒索團隊。慢霧安全團隊對此進行了深入分析,以下是相關技術細節。細節分析

以上是YFValue的官方說明(來源:https://medium.com/),從聲明中我們可以得知是YFV抵押池出現了問題,惡意的用戶可重置YFV抵押者的計時器,對YFV的抵押者造成不便,但這并不會導致資金損失。通過登陸YFValue的官方網站,(https://yfv.finance/staking),可以發現在YFValue的體系中,用戶可通過質押相關的代幣獲取對應的獎勵,目前YFValue支持的質押代幣池有以下幾個:

Bitfinex首席技術官:未來推出“與P2P保證金交易及借貸”相關的新產品:Bitfinex日前宣布開始提供staking服務,起初支持的幣種為EOS、V-Systems(VSYS)和Cosmos(ATOM)。

Bitfinex首席技術官Paolo Ardoino補充表示,該交易所未來將支持更多代幣的staking,其中Tezos(XTZ)staking計劃在5月推出。此外,Bitfinex將在不久的將來推出“與P2P保證金交易及借貸”相關的新產品以及衍生品。(Cointelegraph)[2020/4/7]

可以看到,目前由于漏洞的原因,YFV的抵押池已經在UI界面關閉了抵押功能,但是合約上目前還沒關閉代幣抵押的功能,我們需要跟蹤代碼來分析具體的細節點。根據官網提供的Github地址,我們溯源到了相關的代碼倉庫(https://github.com/yfv-finance/audit),關于YFV抵押的相關邏輯在YFV_Stake.sol合約中,合約中關于抵押的函數有2個,分別是stake函數和stakeOnBehalf函數,以下是具體的代碼:

現場 | 蔡亮:我國區塊鏈研究集中在聯盟鏈、區塊鏈監管技術與標準兩方面:金色財經現場報道,在2019網易未來大會“原點·共生”分論壇區塊鏈+實體經濟論壇上,浙江大學區塊鏈研究中心常務副主任、浙江大學軟件學院副院長蔡亮發言表示:區塊技術的核心思想:區塊鏈系統不依賴中心化機構、參與方相互寫作、共同完成信息記錄;利用算法和程序確保信息記錄的一致性;任何一方均無法篡改數據。

全球區塊鏈技術的研究出現分歧,美國等西方國家區塊鏈的研究熱點集中在公有鏈技術,以及基于公有鏈的金融創新。我們國家區塊鏈的研究熱點集中在聯盟鏈等關鍵技術及應用、區塊鏈監管技術與標準兩方面。[2019/11/23]

通過代碼不難發現,無論是stake函數還是stakeOnBehalf函數,邏輯基本是一樣的,首先是校驗了抵押金額不能為0,接著分別調用上層的tokenStake和tokenStakeOnBehalf函數。緊接著更新用戶的抵押時間。只不過stakeOnBehalf函數可以用于為他人抵押。tokenStake和tokenStakeOnBehalf的代碼如下:

動態 | 天津市促進大數據發展應用條例支持壯大區塊鏈等新一代信息技術產業:2018年12月14日天津市第十七屆人民代表大會常務委員會第七次會議通過的《天津市促進大數據發展應用條例》第四章中第三十二條提到,天津市和區人民政府及其有關部門應當推動大數據在服務業廣泛應用,支持壯大云計算、移動互聯網、物聯網、區塊鏈等新一代信息技術產業,積極發展電子商務、數據服務等新興業態,加快發展科技服務、創意設計等現代服務業。[2018/12/17]

可以看到這里只是簡單的把對應的token用transferFrom的方式轉入到合約中,沒有什么特別的邏輯點。到這里整個抵押流程就很清晰了,接下來是收益的過程。計算用戶收益的是stakeReward函數,領取收益的為withdraw函數,代碼分別如下:

殼牌:建立大宗商品貿易平臺,發掘區塊鏈技術潛力:據第一財經報道,中國最大的液化天然氣(LNG)供給商殼牌能源已經參與投資了多家公司,共同建立了大宗商品貿易平臺,以期發掘區塊鏈技術在此方面的應用前景。[2018/3/15]

通過分析計算收益和領取收益的代碼,發現邏輯也很簡單,stake函數首先是通過updateReward修飾器更新了用戶的獎勵,然后使用getReward函數計算了用戶的獎勵,并把抵押時間設置成當前區塊時間。最后,用戶在提取獎勵的時候,withdraw函數會首先計算當前的區塊時間,再與unfrozenStakeTime函數中計算出的時間進行對比,只有當前區塊時間大于unfrozenStakeTime計算出的時間,才允許提現。unfrozenStakeTime的代碼如下:

從代碼中得知,unfrozenStakeTime是使用用戶的上次抵押時間加上FROZEN_STAKING_TIME常量得出鎖定時間,只要超過時間,就能通過withdraw函數提現收益。整個抵押和領取收益的簡化流程如下:

分析了一大堆,回到我們最初的問題,惡意的用戶是怎么鎖定其他用戶的資產的呢?回到用戶抵押的邏輯,可以發現抵押邏輯中的stakeOnBehalf函數本意是幫助進行抵押,但是這里有個問題,如果這個用戶先前已經有抵押了呢?那通過對已經抵押的用戶再次進行抵押,比方說抵押1個YFV,是不是就能以極低的成本重置已抵押的用戶的計時器,導致用戶在withdraw時無法成功調用。更進一步,假設YFV抵押用戶已經成功調用了stakeReward函數,在快要達到unfrozenStakeTime所規定的時間時,惡意的用戶可以通過stakeOnBehalf函數給這個用戶抵押少量資產,即可再次對抵押獎勵進行鎖定,理論上這樣往復循環,即可使用戶無法取出自己的資產,但這個問題并不會導致資金損失。攻擊流程如下:

前車之鑒

這是本月出現的第二個沒有經過審計的DeFi項目所暴露出的風險,根據YFValue的官方聲明(https://medium.com/),項目代碼是由富有經驗的開發者進行開發的,同時借鑒了其他成功的項目的代碼,但是仍無可避免的出現了風險。術業有專攻,安全審計一方面需要項目方的正向思維,另一方面,還是需要專業的安全團隊的逆向思維,從專業的黑客角度進行模擬對抗,發現問題。修復方案

通過分析代碼和漏洞細節,針對本次漏洞,修復方案也很簡單,只要在抵押的時候檢查用戶的抵押狀態是否為已經抵押,如果已經抵押,則不允許再次抵押。或者對每次的抵押進行單獨的處理,不能對先前的抵押狀態產生影響。

Tags:STASTAKSTAKE區塊鏈TradeStarsPoolStakeHyperStake區塊鏈是什么概念

以太坊交易所
今天的GAS有,誰救救我的LP token_ATM:ATMB

之前很佛系地放了一些錢在YPool里面挖CRV。因為近期遍地財富密碼,我看了看那收益微薄的CURVE,也挖出了幾百個CRV,大概夠手續費了吧.

1900/1/1 0:00:00
一文了解DeFi親密伙伴、DAO龍頭Aragon_ARA:GON

我們已經寫過很多DeFi不同版塊的內容了,基本上DeFi大類覆蓋的差不多了,今天填上DeFi重要的一個拼圖——DAO.

1900/1/1 0:00:00
Sushiswap大廚“甩鍋” FTX創始人,SUSHI瞬間翻倍拉升_USH:XSUSHI

編者按:本文來自巴比特資訊,作者:Kyle,星球日報經授權發布。Uniswap分叉項目Sushiswap的匿名創始人ChefNomi今日突然宣布將自己的項目控制權交給加密交易所FTX的CEOSa.

1900/1/1 0:00:00
一文了解去中心化自治組織(DAO)?_WEB:DAO

編者按:本文來自加密谷Live,作者:HorizenOfficial,翻譯:Olivia,Odaily星球日報經授權轉載。Horizen的長期目標是將其組織結構轉向DAO.

1900/1/1 0:00:00
BTC周報 | 比特幣振幅縮小,資金加速流出;全球最大加密公司DCG將1億美元投入礦業(8.24-8.30)_比特幣:Battle Sports Coin

比特幣凈流出資金3.08億美元;大額轉賬下跌7.5%;比特幣全網算力回升4%;火幣礦池連續兩周排位站上第四;富達:2025年比特幣稀缺性將超過黃金;富達旗下經紀交易商計劃推出新的比特幣基金.

1900/1/1 0:00:00
ChainsMap周報:幣價暴跌,鏈上數據大幅提升;火幣冷錢包轉出1萬BTC_HAI:dogechain幣價格

北京鏈安,聚焦區塊鏈安全與數據服務,以下是基于北京鏈安ChainsMap鏈上數據監測系統,就上周數據發布的比特幣鏈上數據周報.

1900/1/1 0:00:00
ads