星球日報訊12月19日,Fantom鏈上Grim Finance項目遭受攻擊。慢霧安全團隊分析稱:攻擊者通過閃電貸借出WFTM與BTC代幣,並在SpiritSwap中添加流動性獲得SPIRIT-LP流動性憑證。隨後攻擊者通過Grim Finance的GrimBoostVault合約中的depositFor函數進行流動性抵押操作,而depositFor允許用戶指定轉入的token並通過safeTransferFrom將用戶指定的代幣轉入GrimBoostVault中,depositFor根據用戶轉賬前後本合約與策略池預期接收代幣(預期接收want代幣,本次攻擊中應為SPIRIT-LP)的差值為用戶鑄造抵押憑證。但由於depositFor函數並未檢查用戶指定轉入的token的合法性,攻擊者在調用depositFor函數時傳入了由攻擊者惡意創建的代幣合約地址。當GrimBoostVault通過safeTransferFrom函數調用惡意合約的transferFrom函數時,惡意合約再次重入調用了depositFor函數。攻擊者進行多次重入並在最後一次轉入真正的SPIRIT-LP流動性憑證進行抵押,此操作確保了在重入前後GrimBoostVault預期接收代幣的差值存在。隨後depositFor函數根據此差值計算並為攻擊者鑄造對應的抵押憑證。由於攻擊者對GrimBoostVault合約重入了多次,因此GrimBoostVault合約為攻擊者鑄造了遠多於預期的抵押憑證。攻擊者使用此憑證在GrimBoostVault合約中取出了遠多於之前抵押的SPIRIT-LP流動性憑證。隨後攻擊者使用此SPIRIT-LP流動性憑證移除流動性獲得WFTM與BTC代幣並歸還閃電貸完成獲利。慢霧建議對於用戶傳入的參數應檢查其是否符合預期,對於函數中的外部調用應控制好外部調用帶來的重入攻擊等風險。