【漏洞分析】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, BNB21851e-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协议,融会贯通。但是千里之行总得迈出第一步吧,以后关注的内容可能更多放在自身,不去过计较一些短期的得失,尝试寻找一种内源性的动力。

相关推荐
北冥you鱼3 天前
智能合约 Struct 与 Map 最佳实践:从入门到优化
区块链·智能合约
木西6 天前
深度拆解 DeSci 龙头 OriginTrail:从核心架构到智能合约复刻与全链路测试
web3·智能合约·solidity
Web3李李6 天前
DApp核心安全漏洞与项目方全方位防护指南
web3·区块链·智能合约·软件开发·dapp开发·安全审计
Rockbean8 天前
10分钟-AI × Solana:2.MCP服务器——AI代理接入Solana的标准化通道
rust·web3·智能合约
北冥you鱼10 天前
区块链智能合约升级中的数据存储兼容性挑战与解决方案
区块链·智能合约
木西11 天前
破局科研“死亡之谷”:基于 OpenZeppelin V5 与 Viem 深度复刻 VitaDAO 核心治理与资助系统
web3·智能合约·solidity
Rockbean11 天前
10分钟Solana-性能web3-5.4 项目搭建核心环节
rust·web3·智能合约
Rockbean11 天前
10分钟Solana-性能web3-5.3 项目搭建
rust·web3·智能合约
LYFlied13 天前
EVMbench解读:AI Agent如何检测、修复并利用智能合约漏洞
人工智能·网络安全·openai·智能合约·ai agent·evm·智能合约区块链
Rockbean13 天前
10分钟Solana-性能web3-4.3 跨合约调用
rust·web3·智能合约