北京时间7月28日,收益聚合器PolyYeld.Finance遭到攻击,其代币YELD归零,攻击者获利25万美元。
SharkTeam第一时间对此事件进行了攻击分析和技术分析,并总结了安全防范手段,希望后续的区块链项目可以引以为戒,共筑区块链行业的安全防线。
一、事件分析
攻击者地址:
0x56ec01726b15b83c25e8c1db465c3b7f1d094756
0x1bdf24cb4c7395bf6260ebb7788c1cbf127e14c7
FIS子公司Worldpay将在Polygon上启用USDC结算:金色财经报道,FIS集团旗下的支付平台Worldpay不久将在Polygon区块链上为客户启用USDC结算。Worldpay为客户提供的USDC稳定币的结算将由BCW集团启用,该集团将托管和运营一个验证器节点,以确保交易的处理和验证。
今年早些时候,Worldpay宣布与Circle合作,使加密货币原生企业和传统企业能够建立一个适合其首选货币的结算和财务战略。(coindesk)[2022/11/2 12:09:23]
从交易详情可以看出攻击者获取的奖励费用异常。
lpSupply值被操纵为1,导致1300行计算错误。
ApolloX发布攻击调查结果:黑客利用交易奖励合约漏洞积累255个签名后从提款合约提取5300万枚APX:6月9日消息,去中心化交易所ApolloX针对黑客攻击事件更新称,一名黑客利用Apollo X的交易奖励合约中的一个漏洞积累了255个签名,然后使用这些签名从提款合约中提取了5300万枚APX代币。不过,用户的资金不会受到损失,ApolloX更改了Staking合约的真实持有者。ApolloX团队还用60万美元紧急回购了12,748,585枚APX代币。损失的代币将通过交易所交易费赚取的APX来弥补。[2022/6/9 4:13:59]
根本原因在于当前合约的LPToken的余额不是所有用户质押的LPTokn总额,其中还包含攻击者向当前合约转入的LP?Token金额,这导致了lpSuppy被操纵为1的情况,造成了错误的判断和计算。
Polygon宣布Crust上线,提供去中心化IPFS存储体验:9月22日,Polygon宣布Crust上线,为Polygon使用者及开发者提供6000多节点及2000 PiB存储容量的去中心化存储体验。
据悉,作为分布式存储赛道头部项目之一,Crust Network基于IPFS构造了一个链上去中心化存储市场,允许用户和开发者进行多副本的IPFS存储,端对端加密IPFS传输,并能随时随地进行文件检索。而Polygon作为以太坊layer2巨头,致力于打造全站式扩容方案,以极低的gas费,快捷的交易与安全性野蛮生长,不断拓宽生态版图。此次,Polygon将集成Crust三个典型的应用,分别是针对文件存储的files,针对NFT metadata的Pins以及针对Dapp部署的Hosts,更好的帮助开发者在Polygon上构建应用。[2021/9/22 16:58:09]
详细函数分析
Balancer上线Polygon网络:7月1日消息,Balancer上线Polygon,Balancer官方表示将与Polygon合作提升DeFi流动性,降低交易费用。Balancer将会在Polygon网络进行流动性挖矿。[2021/7/1 0:20:52]
攻击者事先给16号池转入1LPToken
攻击者合约0x56ec01726b15b83c25e8c1db465c3b7f1d094756调用balanceOf函数查询lpSupply的值为1
调用updatePool函数
基于Polkadot的DEX Polkastarter将于21点上线Uniswap:Polkastarter官方发推称,其代币POLS将于今晚9点上线Uniswap,将上线POLS-ETH交易对。Polkastarter提醒用户,请在官方渠道找到正确的合约地址。据此前报道,9月20日,基于Polkadot、专为跨链代币池和拍卖而建的DEX Polkastarter已获87.5万美元种子及私募轮融资,参投方包括NGC Ventures、Moonrock Capital、Signum Capital和Astronaut Capital。本轮认购超额吸引了超过2000万美元意向。[2020/9/29]
调用balanceOf函数查询lpSupply的值
此时由于lpSupply的值为1,判断条件不符,继续执行函数代码
调用getMultiplier函数获取差值
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函数,使其计算出来的参数错误,再使用另外一攻击合约的地址正常质押提取,使得推荐者获得超出其本身应该获得的收益。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。