QTN事件 漏洞分析

1. 漏洞简介

https://twitter.com/blocksecteam/status/1615625897671004161

2. 相关地址或交易

攻击交易: 0xfde10ad92566f369b23ed5135289630b7a6453887c77088794552c2a3d1ce8b7 transfer & skim 0xa806617cdd8ed760ed25cec61abf642f4889749c3cede45c46f27d60f0941bd1 transfer back 0xd78380d1caaf494338d2c5d9093ebee7dcea2a2b804ceb7714dad899bae65be1 sell 攻击合约:0xa33c965ca6d3bdc42bdb23a79081757090eb7700 攻击账号:0x88a2386e7ec97ad1e7a72176a66b6d0711ae3527 被攻击合约:https://etherscan.io/address/0xc9fa8f4cfd11559b50c5c7f6672b9eea2757e1bd#code QUATERNION

3. 获利分析

4. 攻击过程&漏洞原因

整个攻击分为3个步骤: 1) 第1步:攻击者先将QTN代币转给UNI-V2,再调用池子的skim函数将QTN代币转给事先生成的合约;

攻击者执行此步骤的目的在于调用函数rebasePlus。在该函数中,_totalSupply的数量不断增大,_gonsPerFragment的值不断减小。攻击者之所以经过UNI-V2转移QTN代币,是因为当from == uniswapV2Pair 时,将调用rebasePlus函数,最终达到缩小_gonsPerFragment 的值的目的。

代币合约的balanceOf函数中通过_gonBalances[account].div(_gonsPerFragment) 确认账号所拥有的代币数量,_gonsPerFragment变小,每个账号的代币数量均增加。

2) 第2步,攻击者调用各攻击者的transferBack函数将代币转给合约0xa33c965ca6d3bdc42bdb23a79081757090eb7700,如合约0x89425431c2971be618658ef8c155e250b1b8b125的QTN代币数量在第1步攻击开始时只有5109705265130400336142756,而在第2步中已经有5788251514335493385465012,代币数量已增加。

3) 第3步,攻击者兑换代币,套现离场。

评论