当前位置: 首页 > news >正文

20250917 - WETToken 攻击事件:价格操控产生的套利空间

背景信息

  1. Alert:https://x.com/TenArmorAlert/status/1968223320693686423
  2. TX:https://app.blocksec.com/explorer/tx/bsc/0xf92539acf7eadfd4a98925927a52af5349cb13c2a250908373a5baf8ea4b49ad

Trace 分析

发生攻击的位置在闪电贷的 callback 函数里面,执行完闪电贷后攻击合约将获利的 BUSD 换成 BNB 进行转移。

image

进入到闪电贷的 callback 函数里面,首先进行了一系列的授权,然后就是每 4 个 call 操作为一组,进行了多次重复的操作。

image

  1. Swap:用 5000000 BUSD → 19432567 WET
  2. 0x6a154c56:用 322 WET 换出 2234 WUSD
  3. Swap:用 19432234 WET → 4999040 BUSD
  4. 0xa6ff54ad:用 2234 WUSD 换出 223800 WET

从上面这组操作可以看出,1 和 3 是对等的操作,2 和 4 是不对等的操作。在操作 2 中用 322 WET 换出来的 2234 WUSD 在操作 4 中居然可以换回 223800 WET,这里面产生了获利空间。

image

代码分析

接下来就是继续跟进 0x0A4085F8a587af76936Ac6368DFc161e5C875882 合约,查看 0x6a154c56 和 0xa6ff54ad 两个函数的具体实现逻辑,但是很可惜合约代码并没有开源。

那只能上反编译了。

反编译代码:https://app.dedaub.com/binance/address/0x0a4085f8a587af76936ac6368dfc161e5c875882/decompiled

0x6a154c56 & 0xa6ff54ad

根据 0x6a154c56 函数的反汇编代码大致可以推断出它的功能:

  1. 从 msg.sender 处收取 varg0 数量的 WET
  2. 通过 0x235f 函数,根据 varg0 计算得到 v2
  3. 向 msg.sender 发送 v2 数量的 WUSD

image

继续跟进 0x235f 函数

说实话,很抽象。

可以看出,在 0x235f 函数中通过 _uniswapV2Router.getAmountsOut() 函数来获取对应的 AmountOut 数量。结合在 Trace 分析环节中提到的攻击过程中对 WET 和 BUSD 的币价进行了操控的信息,可以推断出 AmountOut 数量对应的代币是 BUSD 。

也就是说当攻击合约调用 0x6a154c56 函数进行兑换时,会根据已经被操控的 [WET, BUSD] 价格将 WET 兑换成 BUSD。

image

同样,快速过一下 0xa6ff54ad 函数,它的实现就是 0x6a154c56 函数的镜像操作

  1. 从 msg.sender 处收取 varg0 数量的 WUSD
  2. 通过 0xbb9 函数,调用 _uniswapV2Router.getAmountsOut() 根据 [WET, BUSD] 的价格计算 v2
  3. 向 msg.sender 发送 v2 数量的 WET

Rootcause 总结

总的来说,本次攻击事件的 rootcause 就是 0x0A40 合约提供了 [WET, WUSD] 互相兑换的功能,而兑换的比例是通过获取当前 [WET, BUSD] 的价格来决定的。攻击者通过闪电贷获得的大量资金操控 [WET, BUSD] 的价格,从而在 WET 价格高时通过 0x0A40 合约把 WET 换成 WUSD,然后在 WET 价格低时把 WUSD 换成 WET,从而套取超额的 WET 。兑换成 BUSD 归还闪电贷后,再兑换成 BNB 进行资金转移。

http://www.wxhsa.cn/company.asp?id=7088

相关文章:

  • 题解:P6798 「StOI-2」简单的树
  • 题解:P11704 [ROIR 2025] 旅行路线
  • 题解:P11292 【MX-S6-T4】「KDOI-11」彩灯晚会
  • 算法课程第一周作业
  • 实测对比:权威榜单之微信排版Top 5编辑器大揭秘
  • 自建仓库推送到NAS采用 Docker Registry 工作流
  • 【汇编和指令集 . 第2025 . 9期】发现大牛
  • Opencompass避坑日记
  • 随笔 | 农场、小猴子、香蕉
  • Day17数组的使用
  • 完整教程:缓存与数据库一致性的4大坑及终极解决方案
  • Rust的Cargo用法详解 - 详解
  • 串行通信接口标准(TTL、CMOS、RS232、RS422、RS485、CAN等)
  • 攻防世界-IgniteMe - xxx
  • C 语言 之 面向对象(一)
  • for_switch
  • 快速幂
  • 模拟退火
  • 记录我见过的神人
  • DOS指令学习
  • 动态SQL
  • 调教分块代码
  • 100 粉粉福
  • My All Math
  • 【Azure环境】使用ARM Template部署Policy模板时候报错不支持filed函数: The template function field is not valid.
  • CDQ分治
  • 开源AI大模型、AI智能名片与S2B2C商城小代码:从“不出现=不存在”到“精准存在”的数字化转型路径
  • 202509 组合数学与计数类 DP 笔记
  • edu 106 E(LCS dp + 多源bfs优化)
  • ABC310E NAND repeatedly 题解