北京时间7月28日,收益聚合器PolyYeld.Finance遭到攻击,其代币YELD归零,攻击者获利25万美元。
SharkTeam第一时间对此事件进行了攻击分析和技术分析,并总结了安全防范手段,希望后续的区块链项目可以引以为戒,共筑区块链行业的安全防线。
一、事件分析
攻击者地址:
0x56ec01726b15b83c25e8c1db465c3b7f1d094756
0x1bdf24cb4c7395bf6260ebb7788c1cbf127e14c7
游戏开发商PlayWay与Game Swift和Polygon联合推出游戏加速器OuterLife:7月20日消息,游戏开发商Play Way与Web3游戏一站式商店生态系统Game Swift和Polygon联合推出游戏加速器OuterLife,它将区块链技术和NFT无缝融合到PlayWay的模拟器游戏中,OuterLife将通过Polygon与zkEVM集成,以提供一个可扩展、高效且安全的一体化模拟游戏平台。[2023/7/20 11:06:25]
从交易详情可以看出攻击者获取的奖励费用异常。
lpSupply值被操纵为1,导致1300行计算错误。
Polygon上近30日新增1653万枚NFT,总计发行量达1.19亿:5月19日消息,据Polygon NFTScan数据显示,截止5月19日,Polygon上已经发行1.19亿枚NFT,开发者累计部署了11.9万份NFT资产合约。近30天Polygon上新增了1653万枚NFT,平均每天新增55万枚NFT。[2022/5/19 3:27:40]
根本原因在于当前合约的LPToken的余额不是所有用户质押的LPTokn总额,其中还包含攻击者向当前合约转入的LP?Token金额,这导致了lpSuppy被操纵为1的情况,造成了错误的判断和计算。
详细函数分析
攻击者事先给16号池转入1LPToken
攻击者合约0x56ec01726b15b83c25e8c1db465c3b7f1d094756调用balanceOf函数查询lpSupply的值为1
调用updatePool函数
瑞士国家邮政局将在Polygon上推出加密邮票:9月20日消息,瑞士邮政正式宣布即将推出“瑞士加密邮票”,这是一种数字收藏品,与邮政服务发行的价值8.9瑞士法郎的实物邮票相关联。瑞士加密邮票将为实体邮票提供数字表示,并将存储在Polygon区块链上。买家将能够通过印在实体邮票旁边的二维码在线发现与他们实体邮票的相对应的数字邮票。据瑞士邮政的一位代表称,客户将能够在OpenSea等平台上交换或出售他们的加密邮票。
瑞士加密邮票将于11月下旬推出,175000枚此类邮票将于11月25日在选定的瑞士邮政分行发行。根据公告,瑞士加密邮票将是??瑞士发行的首张此类邮票。(Cointelegraph)[2021/9/30 17:18:23]
调用balanceOf函数查询lpSupply的值
Akropolis整合Yearn.Finance的v2 yVaults已上线:去中心化金融平台Akropolis表示,整合Yearn.Finance的v2 yVaults已上线。v2 yVaults包括steCrv、HEGIC、DAI等。[2021/2/3 18:45:53]
此时由于lpSupply的值为1,判断条件不符,继续执行函数代码
调用getMultiplier函数获取差值
数字货币对冲基金公司Polychain Capital辟谣称 未打算在加拿大上市:数字货币对冲基金公司Polychain Capital的主要及风险合作伙伴Ryan Zurrer在发送给CoinDesk的电子邮件中,推翻了之前彭博社报道的来自知情人士的有关Polychain Capita正在筹集资金,即将在多伦多交易所上市的消息。Ryan Zurrer表示,彭博社的文章是错误的,我们他们没有打算在加拿大上市,也没有为此做任何事情。”[2018/1/30]
YeldPerBlock值为10000000000000000,allocPoint值为2000,totalAllocPoint值为29000。但下一步中将计算奖励的百分之十铸币给项目方,并未从给用户的奖励中扣除,这将导致通胀。
将铸造给项目方和当前合约地址的Token数量添加到totalSupply
此时YeldReward值为25517241379310344,乘上1e18,再除lpSupply的值1。
执行结束后,accYeldPerShare的值为25517241379310346060896017401670445
返回user.amount的值为249792662487644753291986140279580
计算完成后调用withdraw提取奖励,函数内调用payReferralCommission函数铸造通过上面计算得到的token数量。
事件分析总结,该项目存在多个问题:
项目方收取百分之十的收益时直接铸币并未从用户收益中扣除,导致通胀。
调用Masterchef合约实现推荐机制,即推荐者永久享受被推荐者收益的百分之二,但这百分之二并未从被推荐者收益中扣除。
正常情况下,合约计算收益的逻辑没有错误,lpSupply应该为合约中的总Token数,但攻击者通过操作,使得lpSupply为1,手动执行一次updatePool函数,使其计算出来的参数错误,再使用另外一攻击合约的地址正常质押提取,使得推荐者获得超出其本身应该获得的收益。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。