PLDT事件 漏洞分析

  • Archime
  • 更新于 2023-01-02 10:39
  • 阅读 3155

PLDT事件 漏洞分析

1. PLTD漏洞简介

https://twitter.com/BeosinAlert/status/1582181583343484928

1.png

2. 相关地址或交易

攻击交易: https://bscscan.com/tx/0x8385625e9d8011f4ad5d023d64dc7985f0315b6a4be37424c7212fe4c10dafe0 攻击合约:0x83797825f6020a443b95fa3932ab13dd61d48b49 攻击账号:0x83797825f6020a443b95fa3932ab13dd61d48b49 被攻击合约:PLTD 0x29b2525e11bc0b0e9e59f705f318601ea6756645

3. 获利分析

2.png

4. 攻击过程&漏洞原因

查看攻击交易过程,可以发现池子中的PLDT代币数量减少到1单位,这将引起价格的巨大波动:

3.png 查看步骤,可发现: 1) 在第1步中攻击者先将代币转给池子cake-lp,再调用池子的skim函数,池子会将多余的代币转给指定接收地址。查看代码发现,当发起方是池子时将会调用 _tokenTransferBuy 函数。在该函数中会将池子的代币转移到 _fundAddress、_bonusAddress、_projectAddress 等地址中。注意peojectFee的值为 tAmount.mul(Fee.sub(5)).div(100) ,而Fee的值为90,这将导致池子的PLTD代币急剧减少。

4.png

5.png

6.png 2) 攻击者在第2步中将代币转给地址0x16b9a82891338f9ba80e2d6970fdda79d1eb0dae,将调用PLDT合约的_tokenTransfer函数。查看其代码实现,只要满足 _bron > 0,即将销毁池子中的brone代币,并更新池子的reserve0、reserve1的值。

7.png 因为攻击者在调用skim前先给池子转移了116042798941631110395795单位的PLTD代币,因此满足 if(to == uniswapV2Pair) 条件,将调用池子的 _tokenTransferSell 函数,这将导致池子的变量 _bron 值大于0。

8.png 3) 至此,池子中的PLDT代币代币将大量减少,导致价格失衡,攻击者仅用少量的PLTD代币即可兑换出池子中的BSC-USD 代币。

点赞 0
收藏 1
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Archime
Archime
0x96C4...508C
江湖只有他的大名,没有他的介绍。