NFT 合约在审计过程中常会出现哪些问题?

fffmCQ.jpg

从上半年发生的 NFT 合约安全事件来看,审计过程中经常出现的漏洞在实际中也会被黑客利用。

原文标题:《研报解读 ( 二 ) | 黑客不会「隐入尘烟」,你的 NFT 合约安全如何保证?》

撰文: 成都链安

在我们发布的《2022 年上半年 Web 3 安全态势深度研报》中,我们已经从各个维度展示和分析了区块链安全领域的总体态势。今天,我们将针对 NFT 合约安全展开分析,看看在 NFT 合约在审计过程中都会出现哪些常见问题呢?

1 上半年 NFT 领域安全事件的总损失有多少?

据成都链安鹰眼区块链安全态势感知平台监控显示,2022 年上半年,共监测到 NFT 领域主要安全事件 10 起,统计到的损失约为 6490 万美元,主要攻击方式为合约漏洞利用、私钥泄露、钓鱼等。而上半年 Discord 钓鱼事件频发,几乎每天都有 Discord 服务器受到攻击,个人用户因点击钓鱼链接而遭受损失的情况频繁发生。

NFT 合约在审计过程中常会出现哪些问题?

2 上半年 NFT 典型安全事件?

TreasureDAO 事件

2022 年 3 月 3 日,TreasureDAO 交易平台遭到黑客攻击,造成 100 多个 NFT 被盗。

扩展阅读:怪事?盗了又归还?TreasureDAO 安全事件分析

漏洞原因:逻辑漏洞

该漏洞存在于 TreasureMarketplaceBuyer 合约中,该合约的 buyItem 函数在传入_quantity 参数后,并没有做代币类型判断,直接将_quantity 与_pricePerItem 相乘计算出了 totalPrice,因此 safeTransferFrom 函数可以在 ERC-20 代币支付数额只有 0 的情况下,调用 TreasureMarketplace 合约的 buyItem 函数来进行代币购买。

本次安全事件主要原因是 ERC-1155 代币和 ERC-721 代币混用导致的逻辑混乱,ERC-721 代币并没有数量的概念,但是合约却使用了数量来计算代币购买价格,且最后在代币转账的实现中也未进行逻辑分离。

APE Coin 空投事件

2022 年 3 月 17 日,黑客通过闪电贷拿到了超过 6 万的 APE Coin 空投。

漏洞原因:逻辑漏洞

该漏洞存在于 AirdropGrapesToken 空投合约中,由于其使用 alpha.balanceOf() 和 beta.balanceOf() 判定调用者对 BAYC/MAYC NFT 的所有权。而这种方式仅能获取到用户对该 NFT 所有权的瞬时状态,但该瞬时状态可以通过闪电贷借入进行操控。攻击者利用该漏洞,以闪电贷借出 BAYC NFT 并获取对应的空投。

Revest Finance 事件

2022 年 3 月 27 日,Revest Finance 项目遭遇黑客攻击,损失余额 12 万美元。

扩展阅读:老调重弹,ERC1155 的重入攻击又「现身」,Revest Finance 被攻击事件简析

漏洞原因:ERC-1155 重入

该漏洞存在于 Revest 合约中,当用户采用 depositAdditionalToFNFT() 追加 FNFT 的抵押资产时,合约需要将先把之前的 FNFT 销毁,之后再铸造新的 FNFT。但是在铸造时,由于 min() 函数中未判断需铸造的 FNFT 是否已经存在,并且状态变量 fnftId 自增在_mint() 函数后。而_min() 中存在 ERC-1155 中的隐藏外部调用_doSafeTransferAcceptanceCheck(),造成了重入漏洞。

NBA 薅羊毛事件

2022 年 4 月 21 日,NBA 项目方遭遇黑客攻击。

漏洞原因:签名冒用和复用

该漏洞存在于 The_Association_Sales 合约中,项目当在采用签名校验的方式验证白名单时,主要存在两个安全问题:签名冒用和签名复用。其中签名复用问题是由于项目方并未在合约中存储已经使用过的签名,造成签名可以被攻击者重复多次使用;签名冒用的问题是由于 vData memory 参数 info 在传参时未进行 msg.sender 校验导致签名可冒用。

Akutar 事件

2022 年 4 月 23 日,NFT 项目方 Akutar 的 AkuAuction 合约由于智能合约本身漏洞,导致 11539ETH(价值约 3400 万美元)被锁死在合约中。

扩展阅读:NFT 项目惊现低级漏洞,合约未审计导致 3400 万美元资产被锁死 ——Akutar 事件分析

漏洞原因:逻辑漏洞

该合约存在两个逻辑漏洞,第一是退款函数 processRefunds 使用 call 函数进行退款操作,并且把退款结果作为 require 判定条件,如果攻击者在 fallback 中进行恶意 revert 会导致整个合约的退款操作无法继续进行。第二个漏洞是造成此次事件的根本原因,即退款函数中存在的两个判断条件,由于没有考虑到一个用户可以投标多个 NFT 的情况,使得项目方后续的退款操作永远无法执行。

XCarnival 事件

2022 年 6 月 24 日,NFT 借贷协议 XCarnival 遭到攻击,黑客获利 3087 枚以太坊(约 380 万美元)。

扩展阅读:NFT 借贷平台需警惕,XCarnival 被攻击事件给我们哪些启示?

漏洞原因:逻辑漏洞

该漏洞存在于 XNFT 合约中,该合约中的 pledgeAndBorrow 函数在质押 NFT 时并未未检查攻击者传入的 xToken 地址是否为项目方白名单中的地址;并且在借贷时,并未对抵押记录的状态进行检测,导致攻击者反复使用无效的抵押记录进行借贷。

NFT 合约在审计过程中常会出现哪些问题?

3 NFT 合约在审计过程中都会出现哪些常见问题呢

上半年发生了多起 NFT 合约相关的安全事件,主要原因还是没有进行全面的安全审计,那么 NFT 合约在审计过程中都会出现哪些常见问题呢?

成都链安审计团队在审计 NFT 系列合约时,发现 NFT 合约主要的问题包括以下几类:

(1) 签名冒用和复用:

签名数据缺少重复执行验证 ( 例如:缺少用户 nonce),导致可以重复使用签名数据铸造 NFT;

签名检查不合理 ( 例如:未检查签名者为零地址的情况 ),导致任意用户均可通过检查进行铸币;

(2) 逻辑漏洞:

合约管理员可以通过私募等特殊方式铸币而不受总量的限制,导致 NFT 的实际量超过预期;

拍卖 NFT 时,获胜者可在领取交易顺序依赖攻击,修改竞拍价格,导致竞拍获胜者可以低价获取 NFT;

(3) ERC721&ERC1155 重入攻击

当合约使用转账通知功能时 (onERC721Received 函数 ),NFT 合约会主动向转账的目标合约发送一次调用,那么这就可能导致重入攻击;

(4) 授权范围过大

用户在进行质押或者拍卖时,仅需要对单个代币授权,但合约要求_operatorApprovals 授权,一旦用户授权成功,那么就存在 NFT 被盗的风险。

(5) 价格操控

NFT 的价格依赖于某合约的代币持有量,导致攻击者利用闪电贷拉高代币价格,使得质押的 NFT 被异常清算。

从上半年发生的 NFT 合约安全事件来看,审计过程中经常出现的漏洞在实际中也会被黑客利用。因此寻求专业的安全公司对 NFT 合约进行审计也是非常有必要的。

声明:该文观点仅代表作者本人,与炒币网无关。炒币网系信息发布平台,仅提供信息存储空间服务。对所包含内容的准确性、可靠性或者完整性不提供任何明示或暗示的保证,并不对文章观点负责。 提示:投资有风险,入市须谨慎。本资讯仅供参阅,不作为投资理财建议。

发表评论

登录后才能评论