北京时间7月28日,收益聚合器PolyYeld.Finance遭到攻击,其代币YELD归零,攻击者获利25万美元。
SharkTeam第一时间对此事件进行了攻击分析和技术分析,并总结了安全防范手段,希望后续的区块链项目可以引以为戒,共筑区块链行业的安全防线。
一、事件分析
攻击者地址:
0x56ec01726b15b83c25e8c1db465c3b7f1d094756
0x1bdf24cb4c7395bf6260ebb7788c1cbf127e14c7
Polkadot创始人提出Polkadot 2.0计划:金色财经报道,Polkadot创始人Gavin Wood提出了一项被称为Polkadot 2.0的计划,旨在彻底改革网络资源的分配方式。新框架将通过市场分配 \"核心时间\",并提供按需(\"即时\")和长期(\"批量\")两种方式,例如按月分配。
Wood建议,这些按月分配的核心时间将由NFT表示,只是它们可以被分割,允许批量时间的所有者在Polkadot核心上分配计算。现有的租赁(即一个parachain等于一个核心)也将继续,而新的批量定价将需要通过管理进行初始化。
Polkadot的联合创始人Rob Meier在本周的Twitter Space中将2.0提案类比为云计算资源的分配。[2023/7/15 10:56:24]
从交易详情可以看出攻击者获取的奖励费用异常。
lpSupply值被操纵为1,导致1300行计算错误。
Polygon Avail测试网完成第一阶段,预计明年发布主网:11月22日消息,Polygon宣布模块化区块链Avail已完成测试网第一阶段,即将步入第二阶段,预计将于明年发布主网。在第二阶段中,Polygon计划添加最多100个额外的外部验证者,以创建一个更强大、更成熟的区块链测试环境。Polygon Avail的工作原理是存储来自任何其他区块链的交易数据,并证明其持有的交易数据可用性。
据此前报道,今年8月,Polygon Avail测试网上线,每秒可处理420笔交易。[2022/11/22 7:57:28]
根本原因在于当前合约的LPToken的余额不是所有用户质押的LPTokn总额,其中还包含攻击者向当前合约转入的LP?Token金额,这导致了lpSuppy被操纵为1的情况,造成了错误的判断和计算。
详细函数分析
攻击者事先给16号池转入1LPToken
Valor宣布推出Cardano和Polkadot ETP:DeFi Technologies全资子公司Valor将推出Valor Cardano(ADA)SEK和Valor Polkadot(DOT)SEK两种ETP。Valor将于今日在北欧增长市场(NGM)证券交易所推出其Cardano(ADA)ETP,并于本月晚些时候在NGM交易所推出Polkadot ETP。(NewsWire)[2021/5/18 22:14:39]
攻击者合约0x56ec01726b15b83c25e8c1db465c3b7f1d094756调用balanceOf函数查询lpSupply的值为1
调用updatePool函数
Web3基金会:Polkadot主网将按原计划于2020年中上线:据官方消息,Web3基金会Qinwen在近期的线上活动中表示Polkadot主网即将完成安全审计,将继续按计划推进主网发布。因为当下全球正在经历的疫情团队也做出了相应的时间调整。主网发布时间按原计划2020年中上线。[2020/3/31]
调用balanceOf函数查询lpSupply的值
此时由于lpSupply的值为1,判断条件不符,继续执行函数代码
调用getMultiplier函数获取差值
动态 | Poloniex进行计划外维护:据Poloniex官方推特消息,由于需要进行计划外维护,该交易所已进入维护模式。交易已被禁用,用户资金是安全的。[2019/3/26]
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函数,使其计算出来的参数错误,再使用另外一攻击合约的地址正常质押提取,使得推荐者获得超出其本身应该获得的收益。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。