werx事件分析

admin 2023年8月6日21:03:41评论16 views字数 1477阅读4分55秒阅读模式

招新小广告CTF组诚招re、crypto、pwn、misc、合约方向的师傅,长期招新IOT+Car+工控+样本分析多个组招人有意向的师傅请联系邮箱

[email protected](带上简历和想加入的小组)


2023年8月2日,SlowMist发布预警,Uwerx_network项目遭到闪电贷攻击:

werx事件分析

过程

  1. 从Balancer合约借出2000 weth。
  2. 使用2000 weth从weth-werx pair合约中换出20174786100489116297837的werx。这时池子中的werx大量减少,两种代币的比例从weth - 20174786100489116297837 werx - 44298177385759127606945变化为weth - 20174786100489116297837 werx - 44298177385759127606945
  3. 向pair合约发送4429817738575912760684500的werx,注意这个值为现在pair合约的werx持有量的100倍。
  4. 调用pair合约的skim函数,该函数可以将pair合约中多余的代币发送到指定地址,多出来的代币就是上一步发送到pair合约的werx代币,这里指定的地址为0x0000000000000000000000000000000000000001
  5. 在skim函数中将4429817738575912760684500的werx代币,发送到0x0000000000000000000000000000000000000001地址。但是在调用transfer的时候,如果调用者是uniswapPoolAddress,则会burn 1%的代币。werx事件分析

这个地址应该uniswap的pair合约,但是最初被硬编码成0x01合约,等待部署之后被管理员设置成真正的pair合约:

werx事件分析
image-20230803075811543

但是查看slot,发现这个地址并没有更改:

werx事件分析
image-20230803075909074
  1. 上面的步骤中,发送100倍pair合约中werx储量的代币,由于会burn调用发送者1%的代币,而发送者就是pair合约,所以这样会差不多burn掉pair中的所有的werx,将werx的价格推到极高。这时pair合约中的两种代币的比例为:weth - 20174786100489116297837 werx - 100
  2. 最后,再将剩余的werx去到池子中换weth,基本可以将池子中全部的weth取出。将从balancer借出的2000weth还回,获利约173 ether。

这次攻击的本质是可以任意销毁pair合约中的代币,从而拉高代币的价格。uniswapPoolAddress本应该设置成pair合约的地址,但却指定成了其他地址,原因可能是管理员忘记,也可能是后门。

复现

向pair合约发送其现有werx存量的100倍,调用skim函数,将to地址设置为uniswapPoolAddress

werx事件分析
image-20230803091920277

最终获利174786100489116297833,复现成功:

werx事件分析
image-20230803091958631

Uwerx复现链接

后续

目前约176 ether的资产仍然在攻击者0x6057A831D43c395198A10cf2d7d6D6A063B1fCe4的地址上:

werx事件分析
image-20230803092609580

Uwerx项目方同意攻击者保留20%资产。

werx事件分析
image-20230803092342932

- END -


werx事件分析

原文始发于微信公众号(ChaMd5安全团队):werx事件分析

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年8月6日21:03:41
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   werx事件分析http://cn-sec.com/archives/1937251.html

发表评论

匿名网友 填写信息