北京时间2022年3月17日,我们监控到了涉及到APE Coin的可疑交易,根据twitter用户Will Sheehan的报告,套利机器人通过闪电贷薅羊毛,拿到6万多APE Coin(每个价值8美元)。
经过我们分析后得知,这与APE Coin空投机制的漏洞有关。具体来说就是,APE Coin决定是否空投取决于某一个用户是否持有BYAC NFT的瞬时状态,而这个瞬时状态,攻击者是可以通过借入闪电贷然后redeem获得BYAC NFT来操纵的。攻击者首先通过闪电贷借入BYAC Token,然后redeem获得BYAC NFT。然后使用这些NFT来claim空投的APE,最后将BYAC NFT mint获得BYAC Token用来返还闪电贷。我们认为这个模式同基于闪电贷的价格操纵技工非常类似(合约通过一个资产的瞬时价格来对另外一个资产进行定价,而这个瞬时价格可以被操控)。
接下来,我们使用一个攻击交易来简述整个过程。
Step I:攻击准备
攻击者购买了编号1060的BYAC NFT并且转移给攻击合约。这个NFT是攻击者花了106 ETH在公开市场购买的。
Step II:借入闪电贷并且redeem成BYAC NFT
攻击者通过闪电贷借入大量的BYAC Token。在这个过程中,攻击者通过redeem BYAC token获得了5个BYAC NFT(编号7594,8214,9915,8167,4755)。
Step III:通过BYAC NFT领取空投奖励
在这个过程中,攻击者使用了6个NFT来领取空投。1060是其购买,其余5个是在上一步获得。通过空投,攻击者共计获得60,564 APE tokens奖励。
Step IV:mint BYAC NFT获得BYAC Token
攻击者需要归还借出的BYAC Token。因此它将获得BYAC NFT mint获得BYAC Token。这个过程中,他还将其自己的编号为1060 NFT也进行了mint。这是因为需要额外的BYAC Token来支付闪电贷的手续费。然后将还完手续费后的BYAC Token卖出获得14 ETH。
获利
攻击者获得60,564 APE token,价值50W美金。其攻击成本为1060 NFT(106ETH)减去售卖BYAC Token得到的14ETH。
Lessons
我们认为问题的根源是在于APE的空投只考虑瞬时状态(NFT是否在某一个时刻被某一个用户所持有)的这个假定是非常脆弱的,很容易被攻击者操控。如果攻击者操控状态的成本小于获得的APE空投的奖励,那么就会创造一个实际的攻击机会。
经过我们分析后得知,这与APE Coin空投机制的漏洞有关。具体来说就是,APE Coin决定是否空投取决于某一个用户是否持有BYAC NFT的瞬时状态,而这个瞬时状态,攻击者是可以通过借入闪电贷然后redeem获得BYAC NFT来操纵的。攻击者首先通过闪电贷借入BYAC Token,然后redeem获得BYAC NFT。然后使用这些NFT来claim空投的APE,最后将BYAC NFT mint获得BYAC Token用来返还闪电贷。我们认为这个模式同基于闪电贷的价格操纵技工非常类似(合约通过一个资产的瞬时价格来对另外一个资产进行定价,而这个瞬时价格可以被操控)。
接下来,我们使用一个攻击交易来简述整个过程。
Step I:攻击准备
攻击者购买了编号1060的BYAC NFT并且转移给攻击合约。这个NFT是攻击者花了106 ETH在公开市场购买的。
Step II:借入闪电贷并且redeem成BYAC NFT
攻击者通过闪电贷借入大量的BYAC Token。在这个过程中,攻击者通过redeem BYAC token获得了5个BYAC NFT(编号7594,8214,9915,8167,4755)。
Step III:通过BYAC NFT领取空投奖励
在这个过程中,攻击者使用了6个NFT来领取空投。1060是其购买,其余5个是在上一步获得。通过空投,攻击者共计获得60,564 APE tokens奖励。
Step IV:mint BYAC NFT获得BYAC Token
攻击者需要归还借出的BYAC Token。因此它将获得BYAC NFT mint获得BYAC Token。这个过程中,他还将其自己的编号为1060 NFT也进行了mint。这是因为需要额外的BYAC Token来支付闪电贷的手续费。然后将还完手续费后的BYAC Token卖出获得14 ETH。
获利
攻击者获得60,564 APE token,价值50W美金。其攻击成本为1060 NFT(106ETH)减去售卖BYAC Token得到的14ETH。
Lessons
我们认为问题的根源是在于APE的空投只考虑瞬时状态(NFT是否在某一个时刻被某一个用户所持有)的这个假定是非常脆弱的,很容易被攻击者操控。如果攻击者操控状态的成本小于获得的APE空投的奖励,那么就会创造一个实际的攻击机会。