Audius被黑了,价值约$6M的Audius token被盗,GoPlus Security安全分析专家对该事件黑客作恶过程进行了全面解析。
Governance 合约
https://etherscan.io/address/0x4deca517d6817b6510798b7328f2314d3003abac… (Proxy)
https://etherscan.io/address/0x35dd16dfa4ea1522c29ddd087e8f076cad0ae5e8… (Impl)
https://etherscan.io/address/0xe6d97b2099f142513be7a2a068be040656ae4591… (Proxy)
https://etherscan.io/address/0xea10fd3536fce6a5d40d55c790b96df33b26702f… (Impl)
DelegateManagerV2合约
https://etherscan.io/address/0xf24aeab628493f82742db68596b532ab8a141057…
黑客EOA
https://etherscan.io/address/0xa0c7bd318d69424603cbf91e9969870f21b8ab4c
篡改投票参数 -> 提交恶意提案 -> 篡改自己的投票权重 -> 为恶意提案投票 -> 执行提案
将votePeriod和Delay设置为3和0,这样只需要经过3个区块后投票就可以出结果。将_votingQuorumPercent设置为1%,意味着只需要有总质押数的1%即可通过提案。
调用submitProposal(),其中 _functionSignature = transfer(address,uint256),address是攻击者,数量为18,564,497,819,999,999,999,735,541,_targetContractRegistryKey= 307800..00(在registry合约中对应项目token地址)。提案成功将执行token的transfer
_quorumMet()方法会检查投票是否达到额定人数,如果不到则无法出结果,不论是批准还是否决。黑客需要增加自己的权重来通过该检查。
6)在DelegateManagerV2中先调用初始化,将自己设置为governanceAddress,该地址有权限进行delegatestake。
调用delegatestake(),可以看到该函数对_amount没有检查,是随意输入的数字。黑客输入了特别大的数字。这样他只需要投票yes就可以达到额定人数。
7)黑客调用Governance中的submitVote()为85号提案投赞成票,此时区块编号为15201796
https://etherscan.io/tx/0x3c09c6306b67737227edc24c663462d870e7c2bf39e9ab66877a980c900dd5d5
8)黑客调用Governance中的evaluateProposalOutcome()方法为85号提案结算,此时区块高度为15201799,已经过了他设置的3个区块的投票窗口,也达到了额定人数,也只有他进行了投票(赞成票),提案自然通过,并自动执行提案中提交的方法,也即向黑客打币。
目前Audius官方回应已发现问题并进行修复,修复完成前Token余额、转账等暂时不可用,GoPlus Security提醒广大用户注意规避风险。
| 留言与评论(共有 0 条评论) “” |