【漏洞分析】20250105-SorraStaking:奖励金额计算错误,每次取款都有大收益
背景信息
2024-12-21 11:58:11 (UTC)
2025-01-04 11:59:23 (UTC)
- 攻击交易 1:https://app.blocksec.com/explorer/tx/eth/0x6439d63cc57fb68a32ea8ffd8f02496e8abad67292be94904c0b47a4d14ce90d
- 攻击交易 2:https://app.blocksec.com/explorer/tx/eth/0xf1a494239af59cd4c1d649a1510f0beab8bb78c62f31e390ba161eb2c29fbf8b
- 攻击交易 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 操作。

攻击交易
由于三笔攻击交易类似,所以只分析其中一笔。
在 deposit 操作的 13 天后,攻击者进行了后续的攻击操作。攻击者反复调用 withdraw 函数,虽然每次只取回 _amount = 1 的代币,但是能够获得大量的奖励代币。

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

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

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

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

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

代码问题:
- 每次所领取的奖励金额都是按照用户质押的总金额来计算的,而不是当前取款数额对应的奖励金额。
withdraw函数可以将质押金额进行分批提取。
所以攻击者通过多次调用 withdraw 函数来赎回部分质押代币,却每次都能获取到对应所有质押金额的奖励代币,最终获得超额的收益。
【漏洞分析】20250105-SorraStaking:奖励金额计算错误,每次取款都有大收益的更多相关文章
- 从乌云的错误漏洞分析看Mifare Classic安全
前言 12年2月初国内著名安全问题反馈平台-乌云发布了有关某公司员工卡的金额效验算法破解的安全问题.从整个漏洞分析来看,漏洞的提交者把员工卡的数据分析得非常仔细,以至很多刚刚接触或者未曾接触的都纷纷赞 ...
- CVE-2016-10190 FFmpeg Http协议 heap buffer overflow漏洞分析及利用
作者:栈长@蚂蚁金服巴斯光年安全实验室 -------- 1. 背景 FFmpeg是一个著名的处理音视频的开源项目,非常多的播放器.转码器以及视频网站都用到了FFmpeg作为内核或者是处理流媒体的工具 ...
- Windows RDP的RCE漏洞分析和复现(CVE-2019-0708)
0x00 漏洞描述 Windows系列服务器于2019年5月15号,被爆出高危漏洞,该漏洞影响范围较广如:windows2003.windows2008.windows2008 R2.windows ...
- CVE-2009-0927-Adobe Reader缓冲区溢出漏洞分析
0x00概述: 此漏洞的成因是由于Adobe Reader在处理PDF文档中所包含的JavaScript脚本时的Collab对象的getlcon()方式不正确处理输入的参数,而产生的缓冲区溢出,成功利 ...
- Windows SMBv3 CVE-2020-0796 漏洞分析和l漏洞复现
0x00 漏洞描述 漏洞公告显示,SMB 3.1.1协议中处理压缩消息时,对其中数据没有经过安全检查,直接使用会引发内存破坏漏洞,可能被攻击者利用远程执行任意代码.攻击者利用该漏洞无须权限即可实现远 ...
- 漏洞分析:CVE 2021-3156
漏洞分析:CVE 2021-3156 漏洞简述 漏洞名称:sudo堆溢出本地提权 漏洞编号:CVE-2021-3156 漏洞类型:堆溢出 漏洞影响:本地提权 利用难度:较高 基础权限:需要普通用户权限 ...
- FFmpeg任意文件读取漏洞分析
这次的漏洞实际上与之前曝出的一个 CVE 非常之类似,可以说是旧瓶装新酒,老树开新花. 之前漏洞的一篇分析文章: SSRF 和本地文件泄露(CVE-2016-1897/8)http://static. ...
- SpringBoot SpEL表达式注入漏洞-分析与复现
目录 0x00前言 0x01触发原因 0x02调试分析 0x03补丁分析 0x04参考文章 影响版本: 1.1.0-1.1.12 1.2.0-1.2.7 1.3.0 修复方案:升至1.3.1或以上版本 ...
- Apache Shiro Java反序列化漏洞分析
1. 前言 最近工作上刚好碰到了这个漏洞,当时的漏洞环境是: shiro-core 1.2.4 commons-beanutils 1.9.1 最终利用ysoserial的CommonsBeanuti ...
- struts2 s2-032漏洞分析
0x01Brief Description 最近面试几家公司,很多都问到了s2漏洞的原理,之前调试分析过java反序列化的漏洞,觉得s2漏洞应该不会太难,今天就分析了一下,然后发现其实漏洞的原理不难, ...
随机推荐
- 网络应用模型的经典分类:C/S 与 P2P
网络应用无处不在,从我们日常使用的社交媒体到远程文件传输,网络应用模型是支撑这些通信和服务的基础架构.通常,这些网络应用根据其结构原理可以被大致划分为两大类:C/S(Client/Server)模型和 ...
- SparkSQL练习:对学生选课成绩进行分析计算
题目内容: 对学生选课成绩进行分析计算 题目要求: (1)该系总共有多少学生: (2)该系共开设来多少门课程: (3)每个学生的总成绩多少: (4)每门课程选修的同学人数: (5)每位同学选修的课程门 ...
- 2-6 C/C++ 编写头文件
目录 头文件怎么起作用 避免头文件被重复引用 避免头文件被重复引用的方法:条件编译 1. 给每个头文件添加一个预编译变量(preprocessor variable)作为标记(Label) 2. 使用 ...
- 使用PYNQ生成PWM波控制舵机/步进电机/机械臂
使用PYNQ生成PWM波控制舵机/步进电机/机械臂 在开始这个工程之前,你需要PYNQ-Z2的板卡文件,约束文件,原理图作为参考,你可以在我上传的资源里下载. 当然,这个工程也适用于PYNQ-Z1,只 ...
- 接口测试中如何保持session鉴权/会话
当接口使用token鉴权时,可以直接在响应数据中提取token的值,关联到其他接口使用 如果接口使用的是session鉴权,可以使用session=resquests.Session()方法,创建一个 ...
- 2024 BUPT Programming Contest F
简要题意 多测,给定一个 \(n \times n\) 矩阵,矩阵中的每一个元素的计算方式如下: 矩阵的行和列唯一决定两个整数对 \((a, b)\),矩阵第 \(a(0 \le a < n)\ ...
- Pgloader极简教程
目录 简介 安装 安装概述 CentOS编译安装 使用 命令行 配置文件迁移 可能遇到的错误 更多配置参考 总结 引用 简介 pgloader是一个数据同步工具,用来将数据从其它地方迁移到postgr ...
- npm报错error:0308010C:digital envelope routines::unsupported
error:0308010C:digital envelope routines::unsupported 出现这个错误是因为 node.js V17版本中最近发布的OpenSSL3.0, 而Open ...
- Pycharm之使用git merge合并分支
当我们在某个分支上代码开发完成,代码测试没问题后需要把分支上的代码合并到 master 分支上.这样保证 master 分支的代码永远都是最新的,也是最干净的,这样才可以持续的开发自己的项目.本篇讲解 ...
- CTF中RSA相关题型总结(持续更新)
e很小时: import gmpy2 from functools import reduce from Crypto.Util.number import long_to_bytes def CRT ...