代币YELD价格直接跳水归零:PolyYeld Finance被攻击事件全解析
北京时间7月28日,安全公司Rugdoc在推特表示,收益耕作协议PolyYeld Finance遭到攻击,所有者已宣布合约已被利用并铸造了大量YELD代币。CoinGeckko行情显示,YELD代币价格直线跳水归零,狂跌100%。
事件概览
攻击如何发生 Event overview
PolyYeld Finance 是 Polygon 网络上的下一代产量农业协议,具有许多独特和创造性的功能,使用户能够获得被动收入。
据悉,项目正在尝试创建一个类似于 Yearn 的协议,以减少对 Polygon Network 用户、LP 提供商和抵押者高价值的代币供应。在 2-3 个月的时间里,只会铸造 62100 个 YELD 代币。
北京时间7月28日,PolyYeld Finance意外遭到黑客“血洗”,被攻击之后,YELD代币价格直线跳水归零,狂跌100% !

这一次,黑客攻击使YELD代币价格直线跳水归零,可谓损失惨重。成都链安再次提醒各大项目方,一定要注意安全防范工作。
事件具体分析
攻击者如何得手 Event overview
整个攻击事件由黑客一手策划。攻击者利用xYELD代币转账时实际到账数量小于发送数量以及MasterChef合约抵押和计算奖励上存在的逻辑缺陷,通过投入大量资金控制MasterChef合约中抵押池的抵押代币数量,进而操纵奖励计算,从而获得巨额的xYELD奖励代币,最后利用QuickSwap套现离场。
攻击者地址:
0xa4bc39ff54e1b682b366b57d1f6b114a829f5c01
攻击合约:
A:
0x1BdF24CB4c7395Bf6260Ebb7788c1cBf127E14c7
B:
0x56ec01726b15b83c25e8c1db465c3b7f1d094756
攻击交易:
0x3c143d2a211f7448c4de6236e666792e90b2edc8f5035c3aa992fd7d7daca974
0x10eeb698a2cd2a5e23d526b2d59d39a15263be018dbbda97dad4f9fa8c70347f
Round 1
攻击者首先利用QuickSwap交易对将29.75 WETH换成527.695171116557304754 xYELD代币。

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

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

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

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

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

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