攻击者利用token合约自身的转账手续费的漏洞,结合dex的skim函数构造出dex LP的价格差,进而产生套利空间,将dex LP里面的WBNB给套走,最终实现170+BNB的利润

攻击相关交易事件

攻击合约地址

复现攻击代码

攻击过程分析

  • 1、攻击者从DODO闪电贷借出250个WBNB
  • 2、用借来的WBNB在 HackerDao-WBNB的LP里面兑换出90%的HackerDao
  • 3、将获得的HackerDao打到HackerDao-WBNB这个LP里面
  • 4、对HackerDao-WBNB这个LP发起Skim,将刚刚打进去的HackerDao Skim到HackerDao-USDT这组池子里面

HackerDao的token在transfer的过程中会针对接收方地址做一个白名单检查,如果白名单是USDT-HackerDao的LP地址的话,就会做一个收取手续费的操作,

hackerdao-transfer

而这个LP白名单的生成是在合约的构造函数里面就生成了的,这个设计也是造成此次漏洞的直接原因

hackerdao-contructor

  • 5、Skim的过程中,会因为触发上述手续费的逻辑导致LP里面的HakcerDao减少,然后做一次sync,导致HackerDao-WBNB的价格被拉高
  • 6、将HackerDao-USDT里面的token再skim到攻击地址里面
  • 7、将攻击地址上的HackerDao全部套现兑换成WBNB,中间获得利差