20250110-FortuneWheel 攻击事件:竟然不设滑点,那就体验一下 Force Investment 吧

news/2025/1/11 1:02:29/文章来源:https://www.cnblogs.com/ACaiGarden/p/18664999

背景信息

攻击交易:https://app.blocksec.com/explorer/tx/bsc/0xd6ba15ecf3df9aaae37450df8f79233267af41535793ee1f69c565b50e28f7da

漏洞合约:https://vscode.blockscan.com/56/0xc86A50d30c2da607DE91375f363DeDFb3086b9D4

FortuneWheel 合约实现了幸运轮盘竞猜功能,合约通过 swapProfitFees() 将合约中盈利的代币一部分作为 fee 兑换成 BNB,然后再将 BNB 兑换成 LINK。由于 swapProfitFees() 在兑换过程中没有设置滑点,使得攻击者可以通过三文治攻击进行获利。

Trace 分析

通过闪电贷获得 BNB

image

  1. 攻击者将 BNB 换成 LINK
  2. 调用 swapProfitFees() 函数:
    1. 将 BNBP 兑换成 BNB
    2. 将 BNB 兑换成 LINK
  3. 此时 LINK 的价格已经被 FortuneWheel 抬高,攻击者再将 LINK 换成 BNB 完成获利。

image

代码分析

swapProfitFees() 函数首先通过 for 循环将所有的 profit 代币按照 fee 的比例兑换成 WBNB,且没有设置滑点。

image

然后将 WBNB 换成 LINK,这个过程中同样没设置滑点,也就给了攻击者通过控制 BNB-LINK 的价格来套取利润的机会。

image

未了避免此次安全事件再次发生,建议需要在合约中实现 swap 功能时设置一个合适的滑点,避免被 Force Investment 导致资产损失。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/867458.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在Ubuntu 20.04上安装Qt 5.15.0

在Ubuntu 20.04上安装Qt 5.15.01 安装必要的依赖项:sudo apt-get install build-essential \libgl1-mesa-dev \libglu1-mesa-dev \libegl1-mesa-dev \libgles2-mesa-dev \libxrandr-dev \libxext-dev \libxtst-dev \libxrender-dev \libxkbfile-dev \libsqlite3-dev \libssl-…

vscode上配置docker 宝塔环境的xdebug环境,经历过的哪些坑(macbook版)

在macbook中配置vscode对docker中宝塔的php代码进行断点设置的常见排查方式先说配置的几个逻辑: 1. vscode是要通过php debug插件启动9003监听端口 2. docker的宝塔启动xdebug后,是将运行信息推送到vscode宿主的9003端口;这里有个难点,docker内的宝塔和vscode不在一个本地,…

[第五空间2019 决赛]PWN5 1

先checksec一下,发现开启了NX和canary保护看一下ida反汇编,发现输入全都有限制,无法造成造成栈溢出。代码最后会与随机数判断,若相等会执行system。我们看到有printf(buf),这可以造成格式字符串漏洞。 如果我们用格式字符串修改随机数的值,再将输入一样的值就可以执行我…

身份鉴权(PHP)

引子:上一章主要对PHP中全局变量做了介绍,其中```$_COOKIE```、```$_SESSION```常常在身份鉴权中被使用。而本章则是由代码具体聊聊在PHP Web中开发者所常使用的身份鉴权方式。免责声明:本文章仅用于交流学习,因文章内容而产生的任何违法&未授权行为,与文章作者无关!…

UE4.27, 揣摩源码, 网络同步 (三) RPC

6. RPC6.1. RPC是网络同步的一部分,全称Remote Procedure Call。属性同步只能从服务端向客户端单向传递信息,而RPC可以双向传递消息  6.2. 类型6.2.1. Server调用,Actor所属的Client执行    6.2.2. Client调用,Server执行    6.2.3. Server调用,Server和所…

Discharging Method

Firstly, we introduce Euler Formula.When we use Euler formula, we often need its transformations.Secondly, we design some discharging rules based on Euler Formula.Finally, we give the principle of Discharging Method in proofs.

2024.12.16(SpringBoot知识点总结)

4.2 配置文件与配置类的属性映射方式 4.2.1 使用注解@Value映射 我们可以通过@Value注解将配置文件中的值映射到一个Spring管理的Bean的字段上 例如: application.properties配置如下: person: name: zhangsan age: 18 1 2 3 或者,application.yml配置如下: person: name: …

2024.12.7(SpringBoot知识点总结)

2.2.2 SpringBoot代码解析 @SpringBootApplication:标注SpringBoot的启动类,该注解具备多种功能(后面详细剖析) SpringApplication.run(MySpringBootApplication.class) 代表运行SpringBoot的启动类,参数为SpringBoot启动类的字节码对象 2.2.3 SpringBoot工程热部署 我们在…

python SQLAlchemy ORM——从零开始学习 04 如何过滤(筛选)数据库中的数据

04 如何过滤(筛选)数据库中的数据 从数据库中获筛选数据主要应用以下几个接口:filter、filter_by、以及 where。前两个在 02已经展开说过,先展开说where接口 前情提要:依赖03提及的model【本质上就是数据库的链接,有可忽视】 当前的数据库表内容如下,仅作例子,不相同根…

[Linux] 包管理器之【APT】

序续:《[Linux] Linux中安装软件的方式? - 博客园/千千寰宇》 《[Linux] 包管理器之综述【RPM/DPKG|YUM/APT】 - 博客园/千千寰宇》概述:包管理器 APTAPT:Advanced Packaging Tool(现名)解释: Advanced Packaging Tool(apt),作为 原始包管理器DPKG的前端包管理工具(…

2024.11.7(spring boot 创建数据库)

然后搭建四层架构 controller,mapper,pojo,service创建mapper的映射文件

2024.11.8(spring boot创建数据库)

三、连接数据库 1.编写文件 在resources包下找到application.properties,将如下代码写入: spring.datasource.username=root spring.datasource.password=admin spring.datasource.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useUnicode=true&cha…