RCH:代币YELD价格直接跳水归零:PolyYeld Finance被攻击事件全解析

北京时间7月28日,安全公司Rugdoc在推特表示,收益耕作协议PolyYeldFinance遭到攻击,所有者已宣布合约已被利用并铸造了大量YELD代币。CoinGeckko行情显示,YELD代币价格直线跳水归零,狂跌100%。

事件概览

攻击如何发生Eventoverview

PolyYeldFinance是Polygon网络上的下一代产量农业协议,具有许多独特和创造性的功能,使用户能够获得被动收入。

据悉,项目正在尝试创建一个类似于Yearn的协议,以减少对PolygonNetwork用户、LP提供商和抵押者高价值的代币供应。在2-3个月的时间里,只会铸造62100个YELD代币。

北京时间7月28日,PolyYeldFinance意外遭到黑客“血洗”,被攻击之后,YELD代币价格直线跳水归零,狂跌100%?!

这一次,黑客攻击使YELD代币价格直线跳水归零,可谓损失惨重。成都链安再次提醒各大项目方,一定要注意安全防范工作。

贵金属代币化平台Aurus在迪拜建立总部,并获得加密货币交易许可证:7月6日消息,贵金属代币化平台Aurus在迪拜DMCC加密中心成立了新总部,引入了新的董事会,并获得了加密货币交易许可证,进一步在全球扩张。

据悉,Aurus开放式区块链生态系统以一种去中心化和可持续的方式实现金、银和白金的代币化。(PR Newswire)[2022/7/6 1:55:13]

事件具体分析

攻击者如何得手?Eventoverview

整个攻击事件由黑客一手策划。攻击者利用xYELD代币转账时实际到账数量小于发送数量以及MasterChef合约抵押和计算奖励上存在的逻辑缺陷,通过投入大量资金控制MasterChef合约中抵押池的抵押代币数量,进而操纵奖励计算,从而获得巨额的xYELD奖励代币,最后利用QuickSwap套现离场。

攻击者地址:

0xa4bc39ff54e1b682b366b57d1f6b114a829f5c01

攻击合约:

A:0x1BdF24CB4c7395Bf6260Ebb7788c1cBf127E14c7

B:0x56ec01726b15b83c25e8c1db465c3b7f1d094756

Dfinity主网将于今年12月31日前上线,代币ICP预计最早将于明年1月上线和解锁:Dfinity创始人Dominic和社区运营总监Michael在媒体进行《Dfinity官方团队AMA首秀-钠测试网上线》视频直播时透露,Dfinity最终测试网“钠”将会升级到正式主网“汞”,预计上线时间不晚于今年12月31日。ICP代币相关的经济模型将于明年1月份发布,同时代币上线。Dominic进一步表示,Dfinity战略轮投资将有不少于1年锁仓期,而种子轮代币投资没有锁仓期,但出于市场健康考虑,可能会在ICP上线后开始逐步解锁。未来Dfinity基金会也会陆续发布更多grants来激励开发者与生态建设者。[2020/10/9]

攻击交易:

0x3c143d2a211f7448c4de6236e666792e90b2edc8f5035c3aa992fd7d7daca974

0x10eeb698a2cd2a5e23d526b2d59d39a15263be018dbbda97dad4f9fa8c70347f

Round1

攻击者首先利用QuickSwap交易对将29.75WETH换成527.695171116557304754xYELD代币。

Sushiswap发起投票或将于9月15日进行1400万美元SUSHI代币回购:9月13日,FTX创始人SBF发布推文表示,针对Sushi社区所发起的明确Sushiswap社区治理投票门槛提案,若降低投票门槛,则将于周二进行价值1400万美元的SUSHI代币回购。根据其推文,若投票通过,则官方将于北京时间9月15日9:00-10:00,在SUSHI/ETH资金池,用价值1400万美元的ETH进行SUSHI代币回购。[2020/9/13]

接下来,攻击者通过攻击合约在一笔交易反复调用MasterChef合约中的抵押提取函数将MasterChef中PID为16的抵押池中的xYELD代币数量减少0到最小值。

由于xYELD代币在转移时,如果recipient地址不是BURN_ADDRESS地址,变量transferTaxRate的值不为0,recipient地址在_isExcluded映射中对应的值不为true,并且发送者不为合约的拥有者,就会收取一定比例的手续费,当前比例为3%。手续费会转移到代币合约中,在满足特定条件后,会将收取的手续费作为流动性添加到对应交易对中去。

动态 | 韩国加密货币交易所Coinone发布代币上线标准:据Coindesk消息,韩国三大加密交易所之一Coinone发布代币上线标准,较为详细地列出在该平台上交易的要求。申请上线的候选人必须符合九项标准,其中包括对“健全的商业模式”的要求,具有中长期战略和清晰的愿景;还需要可靠的代币分配计划和透明的治理结构。交易所还将根据其营销计划和与投资者的沟通来判断潜在的候选人,声明强调线上和线下的互动都很重要。Coinone将审查候选人的潜在市场规模,检查该项目的增长是否会受到限制或未来可能会受到限制。代币必须是可用的,具有供应与预期消费的平衡,并且必须有一个强大的领导团队。上线后,Coinone将审查该代币的路线图的遵循程度及其基准实现情况。 Coinone还提供了被交易所下架的可能原因。这些问题包括市场操纵、缺乏透明度、无序交易和犯罪活动。交易所还将要求项目对技术缺陷负责,如区块链故障和产品开发不足,并注意缺乏连续性,特别是在管理团队的组成方面。交易所将首先发出警告,如果看不到改善,就会将其下架。[2019/8/16]

金色财经现场报道 PeckShield创始人兼CEO蒋旭宪 :如果漏洞存在会让代币极其危险 :金色财经6月3日现场报道,在今天的以太坊技术及应用大会上, PeckShield创始人兼CEO蒋旭做了题为“Code Is Law的主题演讲:以太坊智能合约面临的威胁与挑战”。蒋旭宪说,目前加密市场规模已经超万亿人民币,目前有1640个虚拟货币,市值3300亿美元,相当于全球GDP排名28位的国家,生态安全不容忽视。当前,交易所,钱包,智能合约,交易所等各个生态环节,安全事件频发。蒋旭宪介绍了以9个已公开的漏洞和诸多未公开的漏洞,指出如果漏洞存在,即使是冷钱包,代币也有可能被转走。[2018/6/3]

而在MasterChef合约中,抵押数量记录的是代币转移的初始数量,而不是实际到账数量。在进行提取操作时,可提取的数量为记录的数量,超出了用户实际抵押到本合约中的数量,因为在完成一次抵押提取操作后,该抵押池中的xYELD代币便会异常减少。

在进行攻击前MasterChef中的xYELD代币的数量为242.017807511865297458:

在进行攻击后MasterChef中的xYELD代币的数量为0.000000000000000001:

Round2

攻击者事先通过攻击合约B在该抵押池中抵押0.009789171908299592xYELD代币,并将推荐人设置为攻击合约A。在攻击合约A攻击完成后,控制攻击合约A在该抵押池中进行奖励领取,由于MasterChef合约中更新抵押池信息时使用的是balanceOf函数获取本合约中抵押代币数量,故获取到的数量是恶意减少之后的数量。

这会造成xYFLD抵押池中accYeldPerShare变量异常增大:

从而使得奖励变为巨额:

Round3

在进行奖励发放时,由于计算出来的奖励数量远超过实际铸币数量,故将本合约中所有的YELD代币转移给攻击合约B,通过获取奖励得到的奖励代币数量为:3031.194777597579576657YELD。

同时,因为攻击合约B的推荐人是攻击合约A,故在攻击合约B领取奖励时会对攻击合约A发放推荐奖励,计算方式为被推荐人获取的奖励的2%。由于传入的_pending数量为异常大的值,故攻击合约A获得的推荐奖励也为异常大的数量,攻击合约获得的推荐奖励为:

4995853249752.895065839722805591YELD。

最后攻击者利用QuickSwap将所有的YELD代币兑换成USDC、WETH和MATIC套现离场。

事件复盘

我们需要注意什么CaseReview

本次事件与之前SafeDollar攻击事件类似,都是使用了相同的攻击手法。不同之处有两点:其一是此次攻击攻击者没有选择利用闪电贷来获取大量资金,而是投入了29.75WETH作为攻击的初始资金;其二是MasterChef合约中推荐奖励机制的问题,正是这个推荐奖励机制将本次攻击的危害无限放大了。

MasterChef类型抵押池设计之时,还没有通缩通胀类代币的出现,故开发者并没有考虑这类代币可能会造成的影响。部分的项目方在进行代码开发时,直接使用了旧的MasterChef代码,并添加了通缩通胀类代币或者奖励作为抵押代币,这便导致了各种恶意攻击事件或异常情况的产生。就目前来看,MasterChef类型抵押池存在两种类型的问题:一是没有对通胀通缩类代币进行特殊处理,没有检查实际转移到合约中的代币数量是否与函数调用时填写的数量相同;二是添加了奖励代币作为抵押代币,导致奖励计算出现异常。

两种类型问题的根本原因还是在于计算奖励时,获取抵押量使用了balanceOf函数来获取。建议项目方在进行MasterChef类型抵押池代码开发时,使用一个单独的变量作为抵押数量的记录,然后计算奖励时,通过此变量来获取抵押代币数量,而不是使用balanceOf函数。

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

金星链

[0:15ms0-0:903ms