根據NUMEN鏈上監控顯示,Feb-01-2023 06:29:18 PM +UTC,Polygon鏈上BonqDAO遭到價格操控攻擊,損失113,813,998枚WALBT和100,000,000枚BEUR,價值約8800萬美元。
攻擊者地址0xcAcf2D28B2A5309e099f0C6e8C60Ec3dDf656642
攻擊者合約0xED596991ac5F1Aa1858Da66c67f7CFA76e54B5f1
攻擊交易 0x31957ecc43774d19f54d9968e95c69c882468b46860f921668f2c55fadd51b19;
0xa02d0c3d16d6ee0e0b6a42c3cc91997c2b40c87d777136dedebe8ee0f47f32b1
攻擊者首先通過少量代幣測試withdrawAllTokens功能正常使用,隨後給攻擊合約轉入少量TRB和WALBT,爲後續攻擊做准備。
攻擊者通過給TellorFlex合約添加質押存款,獲得了更新價格的條件,這裏價格更新爲price=5000000000000000000000000000.
之後攻擊者通過調用borrow方法借款,由於借款獲取價格是通過TellorFlex.getCurrentValue獲取,由於攻擊者已將該價格修改,所以這裏獲取的價格極高,導致攻擊者的大額借款可以成功借出。
關鍵問題是在
https://polygonscan.com/address/0x8f55d884cad66b79e1a131f6bcb0e66f4fd84d5b#code
合約的submitvalue
攻擊者在上一步depositStake已經完成了資產抵押(抵押了10個TRB),所以在這一步可以給預言機發送報價。質押的越多更新報價的間隔會縮短。
然後再看價格的查詢:
https://polygonscan.com/address/0xa1620af6138d2754f7250299dc9024563bd1a5d6#code
https://polygonscan.com/address/0x8f55d884cad66b79e1a131f6bcb0e66f4fd84d5b#code
跟進到getDataBefore
然後再看getIndexForDataBefore,getTimestampbyQueryIdanIndex,retrieveData
querrId是個常量,先從時間戳找到index,因爲根據時間戳記錄了很多報價,然後通過querryId獲得價格,返回值正是前面submitvalue的第二個參數:
hex:0x00000000000000000000000000000000000000001027e72f1f12813088000000
10進制:5000000000000000000000000000。
故此由於TellorFlex合約可以進行報價,報價的條件是只要用戶質押就能報價,所以用戶通過抵押10000000000000000000.獲取了12h報價一次的機會。隨後通過TellorFlex.submitValue函數進行了報價。
EXP
EXP源碼鏈接:
https://github.com/numencyber/SmartContractHack_PoC/blob/main/BonqDAO_exp.sol
NUMEN實驗室提醒項目方,代幣價格需要進行嚴格把控,多種喂價匯總在一塊時,需要考慮價格計算的合理程度及喂價是否存在被控制的風險,合約上线前需要進行多家安全審計,保障合約風險盡可能被消除在鏈下,NUMEN專注於爲web3生態安全保駕護航。
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。
標題:BonqDAO價格操縱攻擊詳細分析附PoC
地址:https://www.torrentbusiness.com/article/22523.html
標籤: