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 安全建议
对于此类安全事件,零时科技安全团队给出下述安全建议。
• 不依赖可被人为操控的因素对资产定价
• 运用机制判断依赖条件是否合法(如:判断依赖条件的持续时间)
?扫描关注零时科技服务号?
?区块链安全威胁情报实时掌握?
出品 | 零时科技安全团队
·END·
关注
往期内容回顾
区块链安全100问 | 第四篇:保护数字钱包安全,防止资产被盗
Ronin Network侧链被盗6.25亿美金流向分析 | 零时科技
零时科技 | 被盗6.1亿美金,Poly Network 被攻击复盘分析
原文始发于微信公众号(零时科技):零时科技 | APE 攻击事件分析