首页 > 其他分享 >【漏洞分析】20250105-SorraStaking:奖励金额计算错误,每次取款都有大收益

【漏洞分析】20250105-SorraStaking:奖励金额计算错误,每次取款都有大收益

时间:2025-01-06 10:35:15浏览次数:7  
标签:11 计算错误 质押 奖励 代币 20250105 SorraStaking https com

背景信息

2024-12-21 11:58:11 (UTC)

  1. 准备交易:https://app.blocksec.com/explorer/tx/eth/0x72a252277e30ea6a37d2dc9905c280f3bc389b87f72b81a59aa8f50baebd8eaa

2025-01-04 11:59:23 (UTC)

  1. 攻击交易 1:https://app.blocksec.com/explorer/tx/eth/0x6439d63cc57fb68a32ea8ffd8f02496e8abad67292be94904c0b47a4d14ce90d
  2. 攻击交易 2:https://app.blocksec.com/explorer/tx/eth/0xf1a494239af59cd4c1d649a1510f0beab8bb78c62f31e390ba161eb2c29fbf8b
  3. 攻击交易 3:https://app.blocksec.com/explorer/tx/eth/0x09b26b87a91c7aea3db05cfcf3718c827eba58c0da1f2bf481505e0c8dc0766b

漏洞合约:https://vscode.blockscan.com/ethereum/0x5d16b8ba2a9a4eca6126635a6ffbf05b52727d50

sorraStaking 项目是一个质押奖励项目,用户质押 SOR 代币并锁定一段时间,解锁后获取 SOR 代币作为奖励。

Trace 分析

准备交易

在 2024-12-21 11:58:11 (UTC),攻击者进行了一笔 deposit 操作。

image

攻击交易

由于三笔攻击交易类似,所以只分析其中一笔。

deposit 操作的 13 天后,攻击者进行了后续的攻击操作。攻击者反复调用 withdraw 函数,虽然每次只取回 _amount = 1 的代币,但是能够获得大量的奖励代币。

image

然后将获得的 SOR 代币进行出售,最后支付 bundler 的费用。

image

代码分析

当用户执行 deposit 进行质押时,合约收取质押代币,并记录仓位

image

deposite → _updatePosition → _increasePosition

_increasePosition 函数记录质押的数量,时间和利率等相关信息。

image

withdraw 函数中,会先计算用户的奖励代币数量 rewardAmount,然后将 (_amount + rewardAmount) 一同发给用户。

image

通过 _calculateRewards 函数来计算奖励金额。

image

代码问题:

  1. 每次所领取的奖励金额都是按照用户质押的总金额来计算的,而不是当前取款数额对应的奖励金额。
  2. withdraw 函数可以将质押金额进行分批提取。

所以攻击者通过多次调用 withdraw 函数来赎回部分质押代币,却每次都能获取到对应所有质押金额的奖励代币,最终获得超额的收益。

标签:11,计算错误,质押,奖励,代币,20250105,SorraStaking,https,com
From: https://www.cnblogs.com/ACaiGarden/p/18654742

相关文章

  • 为 Paddle2ONNX 修复 elementwise_floordiv 算子计算错误的问题
    1简介elementwise_floordiv算子在int32/int64的情况下直接转换成了ONNX中的div算子,由于div算子是普通除操作,而不是整除操作,因此无法通过CI的校验。2实现过程原核心实现代码如下voidElementWiseFloordivMapper::Opset7(){autoinput_x_info=GetInput("X"......
  • 用 Count 注释的查询集正在计算错误发生次数
    我想计算名称在查询集中出现的次数:items=self.get_queryset()items=items.values("name").annotate(count=Count("name")).order_by("-count")其中get_queryset()返回带有一些过滤器和注释的项目列表。defget_queryset(self):return(sel......
  • 一个很有意思的excel计算错误
    工作多年,好多年没有写blog了。今天发现了个很有意思的计算错误想写一下。写报告的时候习惯性用计算器算了一下,发现数据不对,311.3*24=7471.20.但是我这个表计算出来是7471.30,我用的是excel的自动求和 A1*24这样的公式。很奇怪因为这是excel的自动计算,按道理不会出现这种错误,然......
  • MySql中SUM函数计算错误问题
    前言今天一个很久前做的项目突然找到我,说是之前做的项目中,页面上数据汇总和列表中的数据的总数存在对不上的问题。说是列表是对的,但是根据列表统计出来的数据要比正常小很多。排查这个项目已经好几年了,之前用了很久都是正常的,不可能会突然出问题了;我觉得这个统计肯定是没问题了......
  • 二分法计算错误
    2023牛客冬季训练5-A二分代码出错,使用upper_bound()正确while(l<r){intmid=l+r+1>>1;if(a[mid]<=x)......
  • 遇到过的错误之“日期计算错误,Java8API导致Unsupported unit: Seconds【时间类错误】"
    一、问题场景:在计算相差天数时爆出的错误 报错内容:java.time.temporal.UnsupportedTemporalTypeException:Unsupportedunit:Seconds 二、原因 我这里使用了L......
  • 简易频率计——位宽导致数据计算错误
    简易频率计的原理简单介绍频率测量有多种方法,这里介绍精度较高的一种——等精度测量:以下测试所用测试时钟为100MHz,所测试的时钟频率为5MHz在面对未知位宽计数器的......