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

背景信息

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

本次攻击由两笔交易构成

项目分析

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

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

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

Trace 分析

Trace1

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

Trace2

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

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

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

随后攻击者出售 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

transfer 11441 Saturn as fee

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

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

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

漏洞分析

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

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

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

后记

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

相关推荐
程序猿阿伟2 天前
《C++编写以太坊智能合约:安全至上的编程之道》
c++·安全·智能合约
MavenTalk3 天前
solana链上智能合约开发案例一则
rust·区块链·智能合约·dapp·solana
一水鉴天4 天前
智能工厂的设计软件 为了监管控一体化的全能Supervisor 的监督学习 之 序6 进化论及科学的信息技术创新:分布式账本/区块链/智能合约
开发语言·人工智能·学习·区块链·智能合约·分布式账本
元宇宙中心5 天前
SOL链上Meme生态的崛起与未来#Dapp开发#链游#交易所#公链搭建
区块链·智能合约·dapp开发·链游开发·公司开发·交易所搭建·技术合作
web3探路者6 天前
2024年 Web3开发学习路线全指南
学习·web3·区块链·智能合约·软件开发·dapp开发·公司开发
天涯学馆7 天前
从零到英雄:Solidity 智能合约开发全攻略
后端·智能合约·solidity
电报号dapp1198 天前
区块链智能合约开发:全面解析与实践指南
区块链·智能合约
程序员 jet_qi12 天前
区块链应用第1讲:基于区块链的智慧货运平台
区块链·智能合约·数字身份·did·货运平台·可验性证明·vc
bigbig猩猩13 天前
深入理解智能合约 ABI
区块链·智能合约
zhuqiyua14 天前
TVM OpcodeTable c++
c++·区块链·智能合约·ton