【漏洞分析】20240507-SATURN:当闪电贷遇上有缺陷的通缩机制

news/2024/9/28 18:28:10/文章来源:https://www.cnblogs.com/ACaiGarden/p/18438243

背景信息

2024 年 5 月 6 日,SATURN 代币遭受价格操控攻击,损失 15 BNB。攻击发生的原因是由于 SATURN 代币的代币通缩机制设计不合理,使得攻击者可以通过燃烧池子中的 SATURN 代币来操控价格完成获利。

  • 项目社媒:https://x.com/Saturn_POM
  • 社媒告警:https://twitter.com/ChainAegis/status/1787667253435195841
  • 攻击合约:https://bscscan.com/address/0xfcecdbc62dee7233e1c831d06653b5bea7845fcc

本次攻击由两笔交易构成

  • 准备交易:https://app.blocksec.com/explorer/tx/bsc/0xa14378822d85cd6d03e6dff1c6a25e609792d7e9588c6481d7492e82848224d7
  • 攻击交易:https://app.blocksec.com/explorer/tx/bsc/0x948132f219c0a1adbffbee5d9dc63bec676dd69341a6eca23790632cb9475312

项目分析

SATURN 是一个包含代币发行,收税,锁定和通缩等机制的代币协议。 SATURN 代币的愿景是通过出售时的通缩机制来销毁部分代币,从而维持价格不断上涨。可惜事与愿违,正是这个精心设计的通缩机制导致了攻击的发生。

image

简单介绍一下这个代币中和本次攻击事件相关的特殊机制:

  1. fee on transfer:如果 from 和 to 都不在 _excludedFees 中,则收取部分 fee。
  2. burn:如果 to 地址为 pair,则触发 burn 机制。

Trace 分析

Trace1

攻击合约用 0.015 BNB 换取 99000 Saturn,重复 10 次。

image

Trace2

  1. 在 1.1 步骤攻击者通过闪电贷借出 3300 BNB,在 1.2 步骤归还闪电贷。
  2. 攻击者用 3204 BNB 换取 101030461 Saturn,发送到 0xc8ce 地址(owner)。
  3. 攻击者出售 228832 Saturn 换取 3220 BNB,完成获利。

image

0xc8ce 地址为 Saturn 代币的 owner 地址,并且记录在 _excludedFees 中,所以在本次 swap 操作中没有扣除 fee。

image

攻击者用 3204 BNB 换取 101030461 Saturn,pair 中剩余 499999 Saturn。

image

随后攻击者出售 228832 Saturn 换取 3220 BNB,在这一步中触发了收税机制和通缩机制:

  1. transfer 11441 Saturn as fee
  2. burn 499999 Saturn
  3. sync pair [Saturn, BNB] → [21851e-18, 3220]
  4. pair receive 217391 Saturn

image

transfer 11441 Saturn as fee

image

burn 499999 Saturn

当攻击者向 pair 出售 Saturn 时,会触发其燃烧机制。

  1. _processBlockOverflow() 函数记录当前 pair 合约的 Saturn 最大持有量 499999
  2. 计算 amountToBurn 的值,(228832 - 11441) * 230 / 100 = 499999
  3. autoLiquidityPairTokens() 函数 burn 499999 Saturn,pair 中剩余 218521e-18 Saturn

image

在 burn 掉了 pair 中大量的 Saturn 后,攻击者用 217391 Saturn 换出 3220 BNB,完成获利。

image

最后就是归还 3301 BNB 闪电贷,转移 14 BNB 获利资金

image

漏洞分析

Saturn 代币的问题出现在通缩机制是设计上。其本意是在用户向 pair 出售 Saturn 时,记录 pair 持有的 Saturn 数量。然后 burn 掉用户出售数量 * 230% 的 Saturn 代币进行通缩,以保持 Saturn 的价格。

攻击者通过闪电贷买入大量的 Saturn 代币(由于是买入操作,此时并不会记录 pair 持有的 Saturn 数量),使得 pair 中的 Saturn 数量较少。再通过出售在准备交易中买入的 Saturn,使其满足[出售金额 * 燃烧系数 = pair 余额],燃烧掉 pair 中大部分的 Saturn。

通缩机制在设计时没有考虑到闪电贷对 pair 余额的影响,以及出售数量与 pair 余额量级接近的情况。

后记

之前已经分析完了,有优先级更高的事情,所以拖到现在才把这篇播客写出来。这种代币的攻击事件相对DeFi来说会较为简单点,后续出于对自己能力的锻炼,可能会更偏重去分析一下DeFi类型的攻击。这可能会是个比较漫长的过程,我需要去了解去学习大量的DeFi协议,融会贯通。但是千里之行总得迈出第一步吧,以后关注的内容可能更多放在自身,不去过计较一些短期的得失,尝试寻找一种内源性的动力。

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

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

相关文章

卫生纸国家标准查询 All In One

卫生纸国家标准查询 All In One 强制标准 推荐标准 指导性技术文件卫生纸国家标准查询 All In One国家标准全文公开系统强制标准 推荐标准 指导性技术文件 demos卫生纸 808080序号 标准号 是否采标 标准名称 状态 发布日期 实施日期1 GB/T 20808-2022纸巾 现行 2022-04-15 2023…

ai换脸工具roop 食用教程

1. 准备工作 开源项目地址 https://github.com/s0md3v/roop说明文档 https://docs.facefusion.io/usage/cli-argumentspython环境安装必须是python3.10版本 2 部署 git clone仓库 git clone https://github.com/s0md3v/roop.git2.1 conda创建虚拟环境 conda create -n env_name…

C# ASP.NET Core Web API 框架 实现向手机发送验证码短信

本文章主要是在C# ASP.NET Core Web API框架实现向手机发送验证码短信功能。这里我选择是一个互亿无线短信验证码平台,其实像阿里云,腾讯云上面也可以。首先我们先去 互亿无线 https://www.ihuyi.com/api/sms.html 去注册一个账号 注册完成账号后,它会送10条免费短信以及通…

WFUZZ模糊测试

WFUZZ模糊测试 使用指南 选项: -h/--help :这个帮助 --help : 高级帮助 --filter-help : 过滤语言规范 --version : Wfuzz 版本详细信息 -e <type> :可用编码器/有效负载/…

2. 两数相加题解

题目描述 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。 示例 1:输入:l1 = [2,4,3]…

一些cookie的知识点

cookie属性: 1.domain:指定了cookie应该被发送到哪些域,默认情况下,cookie只会被发送到设置它的那个域。可以设置更广泛的域,比如 .example.com,这样所有子域都可以访问这个cookie。这里我们简单来了解一下域名和子域名。子域名定义:子域名是在域名前面添加的一个前缀,…

Himax 10.36寸 incell触摸调试

触摸是带笔的,数据比较大,用的是spi接口。一、添加驱动:drivers/input/touchscreen/hxchipset二、dts配置&spi4 {status = "okay";pinctrl-0 = <&spi4m1_cs0 &spi4m1_cs1 &spi4m1_pins>;himax_touch@0 {compatible = "himax,hxcommon&…

加塞

加塞 rnk7,\(100+30+10+15=155\)。 题目来源:2022 牛客 OI 赛前集训营-提高组(第三场) T1 一般图最小匹配 说的很复杂,实际水题。就是从 \(n\) 个数中选 \(2m\) 个数,两个两个求差后,求这个差的和的最小值。 显然排序之后求差是最小的,但显然不能直接贪心,考虑 DP。 先…

『模拟赛』CSP-S模拟6

『模拟赛记录』CSP-S模拟6Rank 一般 恼了怎么又狠狠挂分啊啊啊啊A. 一般图最小匹配 签。(这么多天终于签上了是吧) 结论是,跟图完全没关系。题意转换完就是从 \(n\) 个数中选出 \(m\) 对差的绝对值之和最小的数。显然我们选的每一对数都应该是这 \(n\) 个数中相邻的一组,so…

ESXi 5.5 系统克隆到SD卡或USB磁盘上

对于如何将安装在本地磁盘上的ESXi系统克隆到SD卡或USB磁盘上,以便快速实现ESXi主机的VSAN-Ready状态。正好猫猫也有点兴趣,所以,就研究了下这个方式,大致的工作思路就是“先通过dd命令将ESXi系统克隆到VMFS Datastore成为一个文件,然后再从文件弄到SD卡或USB磁盘即可”。…

昆明理工大学计算机考研专业课答题卡

--昆工昆明理工大学、计算机技术、人工智能、软件工程、网络空间安全、891计算机专业核心综合、计算机系统结构、计算机软件与理论、网络与信息安全、计算机应用技术、综合程序设计