2024年3月ARK合约攻击---事件分析

  • 黑梨888
  • 更新于 2024-07-31 20:10
  • 阅读 913

概要今年三月发生了一起针对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次调用) image.png 进入ark源代码里发现,autoBurnLiquidityPairTokens这个函数的实现方式如下: image.png [Image] 根据上图可以发现,liquidityPairBalance是池子里面pair的余额。percentForLPBurn是常量30(第777行定义)。所以第783行-786的行为就是每次调用这个方法,燃烧当前余额的0.3%,保留剩下的99.7%。 通常情况下,autoBurnLiquidityPairToken函数只应该被_transfer函数调用,如下图498行所示: image.png 这样的意义是每次转账钱都销毁一部分的token达到通缩货币抬高token价值的效果。 但是由于代码的不规范,autoBurnLiquidityPairToken函数不仅可以被_transfer内部调用,还可以被外部调用: image.png 所以攻击合约调用10000次该函数,导致ark的存量在该池子中减少至99.7%的一万次方。经过这个操作,ARK数量急剧减少,导致ARK价值抬高,攻击者从中获利。 下图是poc代码,分成两部分,一部分调用1万次autoburn函数,一部分将ark swap成wbnb; image.png

攻击复盘

  1. 我觉得最大的问题就是autoBurnLiquidityPairToken这个函数设置成为了public:
    1. 如果是纯内部调用(只有_transfer方法调用)应该只给internal或者private权限
    2. 如果项目方想通过这个方法人工控制通缩,应该给这个方法加入 onlyowner的修饰符
点赞 2
收藏 1
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
黑梨888
黑梨888
web3安全,合约审计。biu~