在本系列文章中(当前系列第三篇),我们将探讨一些常见的NFT攻击向量,以及如何防范这些风险,确保数字资产的安全和保护。
当提到NFT(非同质化代币)时,人们往往会想到数字资产的独特性和不可替代性。然而,随着NFT市场的迅速增长,也引发了一系列关于NFT攻击向量的关注。在本系列文章中(当前系列第三篇),我们将探讨一些常见的NFT攻击向量,以及如何防范这些风险,确保数字资产的安全和保护。在这里阅读有关 NFT 的更多信息。
许多情况下,平台存在未预料到的漏洞或问题,这些问题可能并未得到充分记录或理解,甚至连平台本身也不清楚。这些漏洞导致了意外的行为,给平台用户带来了负面体验,或者可能导致灾难性的损失。
我们来看一个例子,NFT收藏家Carson Turner指责一个买家利用OpenSea中的一个错误,获取了一个他们并不打算出售的NFT。
问题:如果一个人将在OpenSea上列出销售的NFT从他们的钱包中转移出去,然后再转回来,尽管仍然对买家可见,但似乎不再出售。一些人错误地认为他们可以利用这个“黑客技巧”将NFT撤下市场,以避免取消销售所带来的“Gas费”。
这个“漏洞”导致了Turner的Bored Ape #2643 NFT被购买,尽管他认为它已经不再出售,最终他花了10个ETH(约38,000美元)来重新获得这个特定NFT的所有权。
NFT项目支付名人代言费,从而帮助大幅提高价格,因为需求激增。然而,根据他们的协议,这些名人可能实际上并没有参与到项目中,并将在一定时间后撤销他们的代言。
无限授权是一种功能,允许用户授予平台和智能合约无限制地代表其花费 token/ coin的权限。通常情况下,在诸如Uniswap之类的特定AMM上进行交换时,用户需要批准智能合约/平台代表他们转移这些代币。
当给予这些平台/智能合约无限制的批准时,用户将面临两个主要风险:恶意项目和漏洞利用。这种风险赋予了黑客使用已批准的代币进行许多有利可图目的的权利。
OpenZeppelin的文档中不建议使用transferFrom()函数,而是在可能的情况下使用safeTransferFrom()。使用safeTransferFrom()函数可以防止nft丢失,尽管调用者必须理解这会添加一个可能会创建重入性漏洞的外部调用。
mint()函数中,_mint()被不推荐使用,而是推荐使用_safeMint(),这可以确保接收者是一个EOA(外部拥有账户)或实现了IERC721Receiver接口。OpenZeppelin和solmate都有这个函数的版本,以防止NFT被铸造到无法将其转回的合约中丢失。
有时由于合约中的一些逻辑缺陷,用户可以多次重新抵押来在NFT抵押合约中获得更多奖励。这主要是因为当您重新抵押代币时,合约没有更新状态,导致无限重新抵押。
<https://twitter.com/bbbb/status/1542383132548145154>
与其他去中心化应用程序一样,基于智能合约的市场容易受到代码漏洞的影响。这些漏洞可能会使市场存放在托管中的NFT处于风险之中,或者发起意外的上市、转移或购买。幸运的是,已确认的市场代码漏洞案例仍然很少。代码漏洞不一定涉及NFT本身,而是涉及管理其关联协议或平台运作的底层智能合约。尽管如此,还是有一些NFT项目本身涉及到有缺陷的代码的情况。这些缺陷可能会影响铸造的NFT的数量和性质,并且 - 取决于漏洞的性质 - 可能导致受影响资产的底价出现更广泛的波动。
<https://blog.mycrypto.com/nft-smart-contract-bugs-exploits>
这是该NFT攻击向量系统文章第三篇,尽情期待!
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!