北京时间7月28日,收益聚合器PolyYeld.Finance遭到攻击,其代币YELD归零,攻击者获利25万美元。
SharkTeam第一时间对此事件进行了攻击分析和技术分析,并总结了安全防范手段,希望后续的区块链项目可以引以为戒,共筑区块链行业的安全防线。
一、事件分析
攻击者地址:
0x56ec01726b15b83c25e8c1db465c3b7f1d094756
0x1bdf24cb4c7395bf6260ebb7788c1cbf127e14c7
OpenSea将Seaport集成至Polygon并推出无上线门槛、批量转账等功能:金色财经消息,OpenSea宣布将其开源Web3市场协议Seaport集成至Polygon,此后在Polygon上使用Seaport可启动多项新功能,包括收藏和属性优惠、无上线门槛、批量转账、多个创作者支付等多项新功能。
OpenSea表示,此前OpenSea上的Polygon由0x协议提供支持,此次集成将提供更稳定的买卖体验,OpenSea现在支持使用Polygon的原生代币MATIC作为支付选项。此外,接下来的几个月中,Seaport还将增加对Klaytn和其他EVM兼容链的支持。[2022/8/31 12:59:19]
从交易详情可以看出攻击者获取的奖励费用异常。
去中心化预测平台Polymarket的押注者认为ETH 2.0不会如期启动:金色财经报道,去中心化预测平台Polymarket上的押注者认为,ETH 2.0不会按预期推出。据悉,为了使以太坊2.0第0阶段生效,需要在11月24日(12月1日之前的7天)之前将至少524,288 ETH(当前价值约2.47亿美元)存入以太坊2.0质押存款合同。然而,到目前为止仅存入101,984 ETH,即目标的约20%。[2020/11/19 21:16:34]
lpSupply值被操纵为1,导致1300行计算错误。
根本原因在于当前合约的LPToken的余额不是所有用户质押的LPTokn总额,其中还包含攻击者向当前合约转入的LP?Token金额,这导致了lpSuppy被操纵为1的情况,造成了错误的判断和计算。
NFT市场投资公司Polyient Games发起logo设计竞赛:专注于非同质代币(NFT)市场的投资公司Polyient Games将发起一项NFT艺术竞赛,奖金为5个ETH以及7个PGFK。
PGFK是由Polyient Games推出的一款NFT,持有该代币可在Polyient Games生态系统中获得一定的利益和奖励,本次竞赛的内容也是为PGFK设计一款logo。(SludgeFeed)[2020/6/5]
详细函数分析
攻击者事先给16号池转入1LPToken
攻击者合约0x56ec01726b15b83c25e8c1db465c3b7f1d094756调用balanceOf函数查询lpSupply的值为1
动态 | Poloniex将于10月15日下架六种加密货币:加密货币交易所Poloniex在reddit上发文称,将下架六种数字货币,其分别是PASC、STEEM、NAV、GAME、LBC和CLAM。根据公告,10月15日将禁止PASC,STEEM,NAV,GAME,LBC和CLAM的交易,10月28日将永久禁止LBC提取。[2019/10/9]
调用updatePool函数
调用balanceOf函数查询lpSupply的值
Polymath正试图收购一家股票交易所的股份:Polymath在周三早间在CoinDesk的共识会议上露面之前,Polymath还透露,该公司正在完成收购巴巴多斯证券交易所(Barbados Stock Exchange)大量股份的交易,并正在与替代交易系统tZero进行谈判。POLYMATH Networ是一个代币平台。[2018/5/17]
此时由于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函数,使其计算出来的参数错误,再使用另外一攻击合约的地址正常质押提取,使得推荐者获得超出其本身应该获得的收益。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。