Trace 分析

攻击者先从不同的地址收集资金

随后通过多个 flashloan 筹集 BUSD

最终获得约 21.1M 的 BUSD

在多层嵌套的闪电贷中定位到攻击点

  1. Swap1:攻击者将所有 BUSD 兑换成 NGP,并发送到 0 地址中
  2. Swap2:攻击者将 NGP 兑换成 BUSD,获利 2212888 BUSD

代码分析

漏洞的成因是当用户卖出 NGP 代币时,会触发价格更新机制。pair 中的 NGP 代币会被按照比例转移到 treasuryAddress 和 rewardPoolAddress 中,然后更新 pair 的价格。最终目的就是抬高 pair 里面 NGP 代币的价格。

如果 poolAmount 的大小接近于 burnAmount 的大小,执行完回购机制后 NGP 的价格将会变得很高,此时只需要少量的 NGP 就能够把 pair 中的 BUSD 全部兑换出来。

Swap1

攻击者第一次 swap 的目的是尽可能地减少 pair 中 NGP 代币的数量,为第二次 swap 的获利做准备

在这里攻击者利用了 0 地址在 whitelisted 中的特点,直接绕过了代币对购买金额和购买时间的限制。

Swap2

在 Swap2 中,攻击者触发价格更新机制,pair 中的 NGP 代币被大量转出后,pair 中 NGP 的 reverse1 数量缩小为为原来的 0.00000007 倍。

在 NGP 价格被抬高后,继续执行攻击者向 pair 的 NGP 转账操作,并以操控后的价格完成 swap,最终完成获利。


随后就是攻击者归还闪电贷,将部分获利的 BUSD 换成 BNB 后,进行资金转移。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐