作者:Dr. Wu Chiachih(Amber Group區塊鏈安全專家)
2020 年夏天, SushiSwap 創始人Chef Nomi [1] 所發布的MasterChef 智能合約 [2] 可能是最早一波DeFi 狂潮中被重新部署最多次的合約。很多的DeFi項目會略為修改MasterChef 合約來實現他們流動性挖礦的功能。然而,過去一年多的時間內,有幾個項目在修改Nomi 主廚「食譜」的過程中犯了錯誤,造成無法挽救的損失 [3] [4] [5]。 2021 年10 月6 日,我們也發現了一個失誤的項目,所幸在還沒造成損失之前,該項目就成功修復了漏洞,並且完成升級。
0x00:恐龍蛋
這次事件的主角Dinosaur Eggs項目的「流動性資金礦池」(Liquidity Pool)智能合約 [6] 也是一個「加強版」的MasterChef 合約,其主要修改的部分是新增了「addtionalRate」功能。這個功能是為了讓特定的NFT 持有者在存入「流動性提供者代幣」(LP代幣)時可以獲得額外的獎勵,最高可達10%,條件是存入LP代幣之前必須「銷毀」特定的NFT 資產。
從上面的程式碼片段327-328 行可以看到(_amount*user.addtionalRate) 會被加到user.addtionalAmount 裡頭,而這個addtionalAmount 會在計算獎勵時被加入計算。
0x01: 漏洞細節
漏洞出現在從MasterChef 繼承而來的緊急逃生出口— emergencyWithdraw() 函數。這個函數是用來讓user 可以在緊急情況把所有存入的LP tokens 一次取出來,不考慮獎勵計算。然而,前面提到的user.addtionalAmount 在這個函數里沒有被reset,也就是說下一次的harvest() call 會出現user 沒有存入任何LP tokens 的狀態下仍然可以領取獎勵的情況。
從harvest() 函數的第342 行可以看到pendingAmount 的計算是 [(user.amount+user.additionalAmount)*pool.accRewardPerShare – user.rewardDebt]。由於之前的emergencyWithdraw() 已經reset 了user.amount 以及user.rewardDebt,pendingAmount 就變成了(user.addtionalAmount*pool.accRewardPerShare)。因此,攻擊者可以在沒有任何LP tokens 存入的狀態下,不停的來回利用harvest() 跟emergencyWithdraw() 把所有的reward tokens 取出。
0x02: 漏洞利用
上面的攻擊合約程式碼驗證了上述的想法,在prepare() 函數里,我們刻意鑄造了一個NFT(第36 行)並且通過第40 行的additionalNft() 函數啟動了前面提到的addtionalRate 機制,隨後我們deposit() 了一部分LP tokens 到LiquidityPool。為了獲得額外的獎勵,我們在trigger() 函數里利用迴圈多次調用emergencyWithdraw() 與harvest() 函數(第48-51 行)。
從上面的eth-brownie 截圖可以看到,我們只用了30 個LP tokens (DsgLP) 就能獲取上千的reward tokens (DSG)。在同樣的情況如果只是單純的harvest() 沒有刻意emergencyWithdraw(),只有不到一個的DSG 獎勵。假設攻擊者利用閃電貸款生成大量LP tokens,還能更進一步擴大獲利。
0x04: 後續發展
在我們向DSG 團隊通報這個漏洞之後,他們很快的確認問題並且展開了修補工作。新版的LiquidityPool 合約部署上線後,DSG 團隊通知了用戶將資產從舊版取出後遷移到新版,同時也將舊版的流動性挖礦暫停。幸運的是,在完成遷移之前,並沒有真正的攻擊發生,DSG 團隊也根據漏洞賞金計畫給了我們$10k 等值的DSG tokens 獎勵 [7]。這部分獎金隨後被用來捐助開放文化基金會,支持開源軟體發展 [8]。
作者簡介:Amber Group區塊鏈安全專家吳家志博士(Dr. Wu Chiachih),目前主導集團的區塊鏈安全研究和鏈上風險管理平台開發。吳博士曾於英特爾和中國網絡公司奇虎360 擔任高級安全研究員,隨後共同創立了知名區塊鏈安全公司Peckshield。
領先全球的加密貨幣金融服務提供商Amber Group ,在全球24/7 全天候運營,業務遍及香港,台北,首爾和溫哥華。成立於2017 年的Amber Group 為800 多家機構客戶提供服務,在100 多個電子交易所中累計交易超過5000 億美元,管理資產超過20 億美元。作為一家綜合的加密貨幣金融服務提供商,幫助客戶獲得流動性,賺取收益並管理各種加密貨幣資產的風險。目標通過提供投資靈活性和最大化回報來優化長期價值。
【了解更多Amber Group】
Amber Group 官網
Facebook
YouTube
推特
中等的
電報
線
這篇文章Amber Group 安全專家解析:Dinosaur Eggs 流動性資金礦池漏洞最早出現於區塊客。
資訊來源:由0x資訊編譯自BLOCKCAST。版權歸作者Amber Group所有,未經許可,不得轉載