作者: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

這次事件的主角 Dinosaur Eggs 項目的「流動性資金池」(Liquidity Pool)智能合約 [6] 也是一個「加強版」的 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 獎勵 [7]。這部分獎金隨後被用來捐助開放文化基金會,支持開源軟體發展 [8]


作者簡介:Amber Group 區塊鏈安全專家吳家志博士(Dr. Wu Chiachih),目前主導集團的區塊鏈安全研究和鏈上風險管理平台開發。吳博士曾於英特爾和中國網絡公司奇虎 360 擔任高級安全研究員,隨後共同創立了知名區塊鏈安全公司 Peckshield。

領先全球的加密金融服務提供商 Amber Group ,在全球 24/7 全天候運營,業務遍及香港,台北,首爾和溫哥華。 成立於 2017 年的 Amber Group 為 800 多家機構客戶提供服務,在 100 多個電子交易所中累計交易超過 8000 億美元,管理資產超過 40 億美元。作為一家綜合的加密金融服務提供商,幫助客戶獲得流動性,賺取收益並管理各種加密資產的風險。 目標通過提供投資靈活性和最大化回報來優化長期價值。

【了解更多 Amber Group】

Amber Group 官網
Facebook
YouTube
Twitter
Medium
Telegram
Line


熱門市場動態與新聞傳送門:

區塊客致力於發掘和整理各種與區塊鏈技術有關的內容,只要與區塊鏈或區塊客網站有關的合作和/或建議,我們都非常歡迎。請您發電郵至 [email protected] 與我們聯繫。

Amber Group

Amber Group  

我們是 Amber Group,一家領先全球的加密金融服務提供商,在全球,24/7 全天候運營,業務遍及香港,台北,首爾和溫哥華。 成立於 2017 年的 Amber Group 為 800 多家機構客戶提供服務,在 100 多個電子交易所中累計交易超過 8000 億美元,管理資產超過 40 億美元。作為一家綜合的加密金融服務提供商,我們幫助客戶獲得流動性,賺取收益並管理各種加密資產的風險。 我們的目標是通過提供投資靈活性和最大化回報來優化長期價值。