ERC721
NFT合約提供了兩種NFT轉移選項: transferFrom
和safeTransferFrom
。您可能想知道safeTransferFrom
是否比transferFrom
更安全?答案是肯定和否定。讓我們來分解一下:
safeTransferFrom
的安全性:此方法包括一項檢查,以確保接收者能夠正確處理 ERC721 NFT。這意味著,如果接收者是缺乏必要的 NFT 處理功能的合約,則 NFT 不太可能“陷入困境”。安全警告:雖然
safeTransferFrom
為 NFT 本身提供了保障,但它並不能保證合約的安全。事實上,它可能會引入重入攻擊的漏洞。這是因為如果接收者是另一個合約,它會觸發接收者合約中的函數。
讓我們深入研究一個現實世界的例子。 2024 年 1 月 25 日,攻擊者利用NBLGAME
合約的reentrancy
漏洞。被利用資金的估計總價值約為18萬美元。
概述
攻擊者: https ://optimistic.etherscan.io/address/0x1fd0a6a5e232eeba8020a40535ad07013ec4ef12 攻擊合約: https://optimistic.etherscan.io/address/0xe4d41bdd6459198b33cc795ff280cee02d91087b漏洞合約:https: //optimistic.etherscan .io/address/0x5499178919c79086fd580d6c5f332a4253244d91 攻擊發送: https://optimistic.etherscan.io/tx/0xf4fc3b638f1a377cf22b729199a9aeb27fc62fe2983a65c4d14b99ee5c5b2328
漏洞利用分析
被利用的漏洞源於withdrawNft
函數中的重入漏洞,因為它在返回NFT時使用了safeTransferFrom
。
第二次提現成功取回質押的NBL代幣。隨後,第一次提現也從之前存儲的amount
中扣除了 NBL 代幣,由於重入,該金額仍然完好無損。漏洞利用成功,攻擊者收到了雙倍的質押代幣。
結論
在使用ERC721
NFT 智能合約時,請始終注意safeTransferFrom
函數將觸發接收方的onERC721Received
,因此它們可能會形成重入漏洞。以下是降低這種風險的兩種有效方法:
檢查-效果-交互模式:此模式強調在進行任何外部調用之前更新合約的狀態變量。這可以防止攻擊者在外部調用期間操縱合約的狀態。
ReentrancyGuard :考慮在所有公共/外部函數中使用
ReentrancyGuard
機制。這添加了一個修飾符,可以防止在初始調用完成之前重新輸入函數。
為了獲得最大的安全性,建議儘可能在合同中應用這兩種方法。雖然ReentrancyGuard
會產生少量的 Gas 成本,但它提供了針對重入攻擊的額外保護層。
感謝您閱讀 Verichains!免費訂閱以接收新帖子並支持我的工作。