概要今年三月发生了一起针对ARK合约的攻击,攻击者从中获利348枚BNB攻击交易
今年三月发生了一起针对ARK合约的攻击,攻击者从中获利348枚BNB 攻击交易:https://phalcon.blocksec.com/explorer/tx/bsc/0xe8b0131fa14d0a96327f6b5690159ffa7650d66376db87366ba78d91f17cd677 ARK合约地址:0xde698b5bbb4a12ddf2261bbdf8e034af34399999 ARK合约源代码:https://bscscan.com/address/0xde698b5bbb4a12ddf2261bbdf8e034af34399999#code
首先来看下攻击发生的交易:https://phalcon.blocksec.com/explorer/tx/bsc/0xe8b0131fa14d0a96327f6b5690159ffa7650d66376db87366ba78d91f17cd677 参考下图可以发现攻击合约多次条用了ark的autoBurnLiguidityPairTokens这个方法(共10000次调用) 进入ark源代码里发现,autoBurnLiquidityPairTokens这个函数的实现方式如下: [Image] 根据上图可以发现,liquidityPairBalance是池子里面pair的余额。percentForLPBurn是常量30(第777行定义)。所以第783行-786的行为就是每次调用这个方法,燃烧当前余额的0.3%,保留剩下的99.7%。 通常情况下,autoBurnLiquidityPairToken函数只应该被_transfer函数调用,如下图498行所示: 这样的意义是每次转账钱都销毁一部分的token达到通缩货币抬高token价值的效果。 但是由于代码的不规范,autoBurnLiquidityPairToken函数不仅可以被_transfer内部调用,还可以被外部调用: 所以攻击合约调用10000次该函数,导致ark的存量在该池子中减少至99.7%的一万次方。经过这个操作,ARK数量急剧减少,导致ARK价值抬高,攻击者从中获利。 下图是poc代码,分成两部分,一部分调用1万次autoburn函数,一部分将ark swap成wbnb;
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!