零时科技 | APE 攻击事件分析

攻击者可以通过闪电贷兑换 NFT 来获取 APE 空投,再将 NFT 铸币归还闪电贷会对项目造成威胁。

​0x1 事件背景

APE 是一种代币,旨在支持由社区控制和构建的下一步行动。它将作为一个分散的协议层,用于主导社区倡议,推动文化进入元宇宙。

零时科技区块链安全情报平台监控到消息,北京时间 2022 年 3 月 17 日,APE 遭到黑客攻击,零时科技安全团队及时对此安全事件进行分析。

0x2 攻击者信息

零时科技安全团队通过初步追踪分析,此次攻击发生在 Ethereum 链,主要攻击信息如下:

攻击者钱包地址:

• 0x6703741e913a30D6604481472b6d81F3da45e6E8

攻击者创建的相关合约地址:

• 0x3EbD3D86f810B141F9b2e9B15961FC66364b54f3

• 0x7797A99a2e91646aBdc9DC30e838A149CCB3013B

Token 合约(漏洞合约):

• 0x025C6da5BD0e6A5dd1350fda9e3B6a614B205a1F

攻击交易流程:

• 0xeb8c3bebed11e2e4fcd30cbfc2fb3c55c4ca166003c7f7d319e78eaab9747098

漏洞相关合约:

•BeaconProxy: 0xEA47B64e1BFCCb773A0420247C0aa0a3C1D2E5C5

•NFTXVaultUpgradeable: 0x73d2ff81fcea9832fc9ee90521abde1150f6b52a

0x3 攻击分析

将攻击事务放到 tenderly 上分析,得下图:

攻击者主要进行了三步操作:

  • 步骤1: 攻击者通过闪电贷获取 ERC 20 代币,将其兑换为 NFT
  • 步骤2: 攻击者用兑换的 NFT 获取 APE 空投代币
  • 步骤3: 将 NFT 归还,获取质押的 ERC 20 代币,归还闪电贷,将获利资金转到钱包地址

0x4 漏洞细节

攻击成功原因

  • 步骤1: 闪电贷(合约:NFTXVaultUpgradeable)

如上图 999 行所示:「数量+ 费用」的 vToken 会被销毁掉,所以攻击者准备的 vToken 需大于借来的 vToken 才能执行 flashLoan() 函数。

  • 步骤2: 赎回 NFT(合约:NFTXVaultUpgradeable)

如图所示:redeem 函数调用 redeemTo 函数,在 2127 行销毁了代币,2134 行扣除了手续费,2137 行直接向调用者发送 NFT。

  • 步骤3: 领取空投代币(合约:AirdropGraphsToken)

如图所示:在第 105 行核对 alpha.balanceOf() 和 beta.balanceOf() 以确保调用者确实是 BAYC/MAYC 持有者。然后在第 114-115 行,用清单来注记已领取的 tokenId,如此一来第 110 行中的 getClaimableTokenAmountAndGammaToClaim() 函数就能让合约调用者仅领取到可领取的 ApeCoin 数量。

  • 步骤4: 铸币(合约:NFTXVaultUpgradeable)

如图所示:2089 行将 NFT 给合约,2092 行发送代币,2094 行消耗手续费。

整个 NFTXVaultUpgradeable 合约提供了 铸币、赎回 和 闪电贷 功能。攻击者利用这一套身法,轻松绕过 AirdropGraphsToken 合约对当前持有 NFT 数量的检查,获得了不错的收益。

至此,攻击者利用此攻击流程,通过对 AirdropGraphsToken、NFTXVaultUpgradeable 合约进行攻击,共获利约 35 万美元(以攻击时的市场价计算)。

0x5 总结

通过此次攻击事件来看,攻击成功最重要的因素是 AirdropGraphsToken 合约中:没有对空投的原则做合理的效验。攻击者可以通过闪电贷兑换 NFT 来获取 APE 空投,再将 NFT 铸币归还闪电贷会对项目造成威胁。

0x6 安全建议

对于此类安全事件,零时科技安全团队给出下述安全建议。

• 不依赖可被人为操控的因素对资产定价

• 运用机制判断依赖条件是否合法(如:判断依赖条件的持续时间)

点赞 1
收藏 2
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

2 条评论

请先 登录 后评论
零时科技
零时科技
专注区块链生态安全