0x01:前言
援引官方消息,北京時間12月19日,Fantom鏈上復合收益平臺GrimFinance遭遇了閃電貸攻擊。知道創宇區塊鏈安全實驗室第一時間對本次事件深入跟蹤并進行分析。
0x02:事件詳情
交易細節如下圖所示:
瀏覽上圖的交易過程可知,攻擊合約利用閃電貸借取代幣WFTM和BTC,將借取的代幣與自己鑄造的代幣質押到SpiritSwap里增加流動性獲取lp代幣,而問題就出現在攻擊者通過depositFor()實現質押的過程中。
通過Tenderly調試該筆交易,攻擊者多次遞歸調用depositFor函數,利用該函數獲取大量代幣:
美國國家安全顧問:拜登將與七國集團討論人工智能問題:金色財經報道,美國國家安全顧問沙利文表示,拜登將與七國集團討論人工智能問題。[2023/5/18 15:09:55]
0x03:漏洞分析
depositFor()函數位于的第1115行:
function?depositFor(address?token,?uint?_amount,address?user?)?public?{
?uint256?_pool?=?balance();
?IERC20(token).safeTransferFrom(msg.sender,?address(this),?_amount);
Goerli測試網版BAYC地板價短時突破30 ETH:2月26日消息,據 OpenSea Testnets 數據顯示,Goerli 測試網版 BAYC BoredApeYachtClub - GOERLI - TEST 地板價短時突破 30 ETH,現報價 30 ETH,地板價 24 小時漲幅達 1525%。[2023/2/26 12:30:30]
?earn();
?uint256?_after?=?balance();
?_amount?=?_after.sub(_pool);?//?Additional?check?for?deflationary?tokens
?uint256?shares?=?0;
?if?(totalSupply()?==?0)?{
浙江元宇宙計劃:3年產業規模逾2000億,實施元宇宙5大重點任務和5大重點工程:金色財經報道,12月15日,浙江省發展和改革委員會等5部門聯合印發了《浙江省元宇宙產業發展行動計劃(2023-2025年)》(以下簡稱《行動計劃》),提出到2025年浙江省元宇宙產業鏈體系基本形成,產業綜合競爭力達到全國領先,帶動相關產業規模2000億元以上。根據《行動計劃》,到2025年浙江省要通過實施元宇宙5大重點任務和5大重點工程,技術創新、標準研制、應用培育、產業發展和生態構建取得顯著成效,實現3個“1050”:引育10個行業頭部企業,打造50家“專精特新”企業;推廣10個行業標桿產品,打造50個創新示范應用場景;建設10個產業平臺,打造50個賦能創新中心,不斷提升產業發展能級和競爭力。到2025年,全省元宇宙產業鏈體系基本形成,產業綜合競爭力達到全國領先,帶動相關產業規模2000億元以上。[2022/12/16 21:48:13]
??shares?=?_amount;
谷歌推出用于Web3開發的區塊鏈節點引擎,首先支持以太坊:金色財經報道,谷歌宣布推出用于Web3開發的區塊鏈節點引擎,這是一種完全托管的云服務,用戶不必雇用自己的團隊來維護或監控他們的節點,此外還具有簡化配置和安全開發的功能,以保護節點免受DDoS攻擊等。以太坊將成為區塊鏈節點引擎支持的第一個區塊鏈,使開發人員能夠提供具有安全區塊鏈訪問權限的完全托管的以太坊節點。谷歌表示,未來還將把該服務拓展至更多區塊鏈網絡。[2022/10/27 11:49:07]
?}?else?{
??shares?=?(_amount.mul(totalSupply())).div(_pool);
?}
?_mint(user,?shares);
}
去中心化存儲網絡Crust Network贏得第30輪波卡平行鏈拍賣:10月24日消息,去中心化存儲網絡 Crust Network 以鎖定近 7.2 萬枚 DOT 贏得第 30 輪波卡平行鏈拍賣。Crust Network 是建立在 IPFS 之上的去中心化存儲網絡,通過代幣來激勵節點存儲 IPFS 網絡上的數據。[2022/10/25 16:37:31]
該函數的safeTransferFrom()方法從IERC20(token)調用,調用完該方法后,余額balance也會隨之變動,最后通過_mint()方法向用戶添加質押憑證代幣。其中調用的變量token可控,導致攻擊者可以自己實現safeTransferFrom()方法,將該方法重入到depositFor()發起攻擊。
以實施了5次重入攻擊為例,開始_pool的值為0,在重入depositFor方法的前四次里,攻擊者一直傳入自己鑄造的代幣,_pool的值會一直保持為0,但在第五次,也就是最后一次傳入100個受認可的代幣時,_after的值會變成100,而_afer-_pool的差值_amount也就是100,最后由于重入了5次,導致合約會向攻擊者鑄造100*5的質押憑證代幣。
其后果就是攻擊者向該合約質押自己鑄造不受認可的代幣,同樣會增加質押總量,最后利用多出來的質押憑證實現套利。
0x04:修復方案
1.由于depositFor()方法里的token可控才是導致這次攻擊事件的原因,因此只需要在傳遞參數的時候讓token不可控就行:
function?depositFor(?uint?_amount,address?user?)?public
2.由于套利的原因是depositFor()方法里存在修改代幣數量的函數,因此還可以將修改代幣的方法單獨實現,這樣即使token變量可控,也無法成功套利:
function?depositFor(address?token,?uint?_amount,address?user?)?public?{
?IERC20(token).safeTransferFrom(msg.sender,?address(this),?_amount);
}
3.鎖定交易token:
function?setLPToken(address?lp)?public?onlyOwner?{
lpToken?=?lp;
}
function?depositFor(uint?_amount,address?user?)?public?{
uint256?_pool?=?balance();
IERC20(lpToken).safeTransferFrom(msg.sender,?address(this),?_amount);
earn();
......
}
0x05:總結
經過完整分析,知道創宇區塊鏈安全實驗室明確了該次攻擊事件的源頭并非網傳的閃電貸攻擊,攻擊者利用GrimBoostVault合約的depositFor方法參數可控,實施了重入攻擊,將自己的鑄造的無價值代幣兌換成了質押憑證,最后通過withdrawAll方法實現套利,而閃電貸?攻擊者只是利用閃電貸擴大了套利值。
對于合約代碼而言安全性是十分重要的,每一個未經驗證的傳入參數都可能導致巨大的經濟損失,開發者在編寫重要操作方法時,須記住零信任原則,謹慎對待每一個傳入參數。
來源:金色財經
一:項目名字:AgoricJavaScript智能合約 二:項目介紹: 關于Agoric Agoric是一家開源開發公司,推出了可互操作的權益證明鏈和經濟.
1900/1/1 0:00:00“音樂NFT正憑借其不可比擬的優勢顛覆傳統的音樂發行方式和經濟分配形式,這將是音樂家、聽眾和發行商之間的一場革命.
1900/1/1 0:00:0012月22日下午,中央網信辦信息化發展局、中央宣傳部版權管理局、國務院辦公廳電子政務辦公室、最高人民法院信息中心、最高人民檢察院檢察技術信息研究中心、教育部科學技術與信息化司、工業和信息化部信息.
1900/1/1 0:00:00作者:VitalikButerin翻譯:Blockunicorn推土機解釋:到處推倒或否決別人.
1900/1/1 0:00:00數字資產管理公司灰度于上月發布名為《TheMetaverse,Web3.0VirtualCloudEconomies》的元宇宙研究報告,并預測元宇宙可能在明年成為一個萬億美元的產業.
1900/1/1 0:00:00目前,數字人民幣已經形成覆蓋深圳、蘇州、雄安、成都、上海、海南、長沙、西安、青島、大連和2022北京冬奧會場景的“10+1”試點格局.
1900/1/1 0:00:00