本日凌晨 DeFi 協議 Pickle Finance 前一天才剛上線的 DAI PicleJar 聚合器就遭到駭客攻擊,估計損失大約 2,000 萬美元,該平台治理代幣在消息傳出後已暴跌 60%。這其中駭客到底做了什麼?本文由專欄作者 慢霧科技 SlowMist 撰稿,不代表動區立場。
(前情提要:「酸黃瓜罐子」被偷了! Pickle才剛上線DAI PickleJar,不到一天被駭近 2 千萬美元)
(知識補充:DeFi 乾貨|一文解析「酸黃瓜 PICKLE」的價值捕獲能力)
2020 年 11 月 22 日,以太坊 DeFi 項目 Pickle Finance 遭受攻擊,損失約 2,000 萬 DAI。筆者第一時間跟進相關事件並進行分析,以下為分析簡略過程。
攻擊流程簡析
1、攻擊者找到合約漏洞
項目的 Controller 合約中的 swapExactJarForJar 函數允許傳入兩個任意的 jar 合約地址,進行代幣的兌換。
其中的 _fromJar、_toJar、_fromJarAmount、_toJarMinAmount 都是用戶可以控制的變量,攻擊者利用這個特性,將 _fromJar 和_toJar 都填上自己的地址,_fromJarAmount 是攻擊者設定的要抽取合約的 DAI 的數量,約 2,000 萬 DAI。
2、攻擊者指定兌換的資產
使用 swapExactJarForJar 函數進行兌換過程中,合約會通過傳入的 _fromJar 合約和 _toJar 合約的 token() 函數獲取對應的 token 是什麼,用於指定兌換的資產。
而由於_fromJar 合約和_toJar 合約都是攻擊者傳入的,導致使用 token() 函數獲取的值也是可控的,這裡從 _fromJar 合約和 _toJar 合約獲取到的 token 是 DAI。
3、此時發生兌換
Controller 合約使用 transferFrom 函數從 _fromJar 轉入一定量的 ptoken,但是由於 fromJar 合約是攻擊者控制的地址,所以這裡轉入的 ptoken 是攻擊者的假幣。
同時,因為合約從 _fromJar 合約中獲取的 token 是 DAI,然後合約會判斷合約裡的資金是否足夠用於兌換;如果不夠,會從策略池中贖回一定量的代幣,然後轉到 Controller 合約中。
在本次的攻擊中,合約中的 DAI 不足以用於兌換,此時合約會從策略池中提出不足的份額,湊夠攻擊者設定的 2,000 萬 DAI。
4、兌換繼續
Controller 合約在從策略池裡提出 DAI 湊夠攻擊者設定的 2,000 萬 DAI 後,會調用 _fromJar 的 withdraw 函數,將攻擊者在第三步轉入的假 ptoken burn 掉,然後合約判斷當前合約中 _toJar 合約指定的 token 的餘額是多少。
由於 _toJar 合約指定的 token 是 DAI,Controller 合約會判斷合約中剩餘 DAI 的數量,此時由於第三步 Controller 合約已湊齊 2,000 萬 DAI,所以 DAI 的餘額是 2,000 萬。這時 Controller 合約調用 _toJar 合約的 deposit 函數將 2,000 萬 DAI 轉入攻擊者控制的 _toJar 合約中。到此,攻擊者完成獲利。
延伸閱讀:酸黃瓜挖礦|V神讚賞後單日飛漲1200% ,解析Pickle「維持穩定幣錨定」的微創新
總結
此次攻擊中,攻擊者通過調用 Controller 合約中的 swapExactJarForJar 函數時,偽造 _fromJar 和 _toJar 的合約地址,通過轉入假幣而換取合約中的真 DAI,完成了一次攻擊的過程。
📍相關報導📍
台灣|全球筆電代工一哥「仁寶」疑中勒索病毒,贖金錢包今存入約 1500 萬台幣的比特幣
穩定幣救援委內瑞拉|美國政府「透過USDC發送抗疫資金」,成功繞過馬杜洛政權
UNI挖礦結束,TVL暴跌40%、11億鎂!Uniswap「續挖」投票會過嗎?或資金將流向遠方?
讓動區 Telegram 新聞頻道再次強大!!立即加入獲得第一手區塊鏈、加密貨幣新聞報導。
LINE 與 Messenger 不定期為大家服務