zombie
> > > >
> > > >

帶你了解 Dinosaur Eggs 的 LiquidityPool 漏洞解析

2021/11/18 18:08
帶你了解 Dinosaur Eggs 的 LiquidityPool 漏洞解析

2020年夏天, SushiSwap 創始人 Chef Nomi (@NomiChef) 所發布的 MasterChef 智能合約可能是最早的一波 DeFi 狂潮中被重新部署最多次的一個合約。很多的 DeFi 項目會略為修改 MasterChef 合約來實現他們流動性挖礦的功能。然而,過去一年多的時間內,有幾個項目在修改 Nomi 主廚的食譜過程中犯了錯誤,造成無法挽救的損失。2021 年 10 月 6 日,我們也發現了一個失誤的項目,所幸在還沒造成損失之前成功修復了漏洞並且完成升級。

0x00: Dinosaur Eggs

這次事件的主角 Dinosaur Eggs 項目的 LiquidityPool 智能合約也是一個「加強版」的 MasterChef 合約,其主要修改的部分是新增了 「addtionalRate」功能。這個功能是為了讓特定的 NFT 持有者在存入 LP tokens 時可以獲得額外的獎勵,最高可達 10%,條件是存入 LP tokens 之前必須「燒掉」特定的 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 獎勵。這部分獎金隨後被用來捐助開放文化基金會,支持開源軟體發展。

關於Amber Group

Amber Group 是一家領先全球的加密金融服務提供商,全球 24 小時全天候營運,業務遍及香港、首爾、溫哥華及全球各大主要城市。成立於 2017 年的 Amber Group 為 800 多家知名大型機構客戶提供服務,在 100 多個電子交易所中累計交易總額已超過 8,000 億美元,資產管理規模超過 40 億美元。作為一家綜合的加密金融服務提供商,Amber Group 幫助客戶獲得流動性,賺取收益並管理各種加密資產的風險,透過提供投資靈活性和最大化回報來優化長期價值。

如欲瞭解更多,請參訪官方網站

join Zombit

加入桑幣的社群平台,跟我們一起討論加密貨幣新資訊!

Amber Group

Amber Group

桑幣熱門榜

zombie

桑幣正在徵文中,我們想要讓好的東西讓更多人看見!
只要是跟金融科技、區塊鏈及加密貨幣相關的文章,都非常歡迎向我們投稿
投稿信箱:[email protected]

為提供您更多優質的服務與內容,本網站使用 cookies 分析技術。若您繼續閱覽本網站內容,即表示您同意我們使用 cookies,關於更多相關隱私權政策資訊,請閱讀我們的隱私權及安全政策宣示