零时科技 || Rabby Swap合约遭受攻击事件详解

news/2024/5/20 6:42:35/文章来源:https://blog.csdn.net/m0_37598434/article/details/127324705

 

0x1 背景

2022年10月12日,Rabby Swap合约中存在疑似任意用户资产转移漏洞。Rabby Swap官方表示,如果有使用,请撤销所有链上所有现有的 Rabby Swap 批准。对于没有使用过 Swap 的人来说,钱包安全且不受影响。零时科技安全团队及时对该事件进行分析。

0x2 攻击交易信息

攻击者地址:

0xb687550842a24D7FBC6Aad238fd7E0687eD59d55

攻击者合约:

0x9682f31b3f572988f93c2b8382586ca26a866475

Rabby Swap合约(漏洞合约未开源):

0x6eb211caf6d304a76efe37d9abdfaddc2d4363d1

攻击交易之一:

0x366df0c20e00666749b16ae00475b3c41834dc659ebb29e059aa9bffa892c038

受害者地址之一:

0x0753cfbc797abfce05abaacbb1e6ae032feb5f1d

授权被盗HOP Token 代币地址:

0xc5102fE9359FD9a28f877a67E36B0F050d81a3CC

0x3 攻击步骤

分析攻击者交易,可以明确攻击者交易并不复杂,通过部署攻击合约,调用攻击合约0x8f965d0e签名方法进行攻击获利。

 

攻击者共部署两份合约,进行了27次交易步骤相同的攻击,这里选一笔交易进行详细分析。

0x366df0c20e00666749b16ae00475b3c41834dc659ebb29e059aa9bffa892c038

 

通过攻击交易来看,此次攻击似乎很简单,攻击合约给漏洞合约转移0枚USDT,之后将用户的资金转移至攻击者地址。由于官方漏洞合约未开源,并不能看到细节。但通过官方合约审计报告及调用合约签名可以明确,本次攻击主要调用的漏洞方法为_swap。

交易数据如下:

 

_swap代码片段如下:

 

 

通过交易数据分析,可以得出以下_swap方法传参:

IERC20 srcToken:    0xdac17f958d2ee523a2206206994597c13d831ec7(USDT)
uint256 amount:     0
IERC20 dstToken:    0x9682f31b3f572988f93c2b8382586ca26a866475(攻击合约)
uint256 minReturn:  4660
address dexRouter:  0xc5102fe9359fd9a28f877a67e36b0f050d81a3cc(HOP)
address dexSpender: 0xc5102fe9359fd9a28f877a67e36b0f050d81a3cc(HOP)
bytes calldata data:000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000183c1c270d7000000000000000000000000000000000000000000000000000000000000012823b872dd(transferFrom(address,address,uint256))0000000000000000000000000753cfbc797abfce05abaacbb1e6ae032feb5f1d(受害者地址)000000000000000000000000b687550842a24d7fbc6aad238fd7e0687ed59d55(攻击者地址)00000000000000000000000000000000000000000000001982589c49e57f7f8d(转账资金470.56)00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee869584cd000000000000000000000000100000000000000000000000000000000000001100000000000000000000000000000000000000000000005f5265d161
uint256 deadline:   时间戳

根据以上交易的传参,继续分析_swap内部逻辑(可以对照代码来看)。

首先require判断时间戳及传入的dexRouter、dexSpender满足条件;

之后将srcToken、dstToken计算得到srclsEth、dstlsEth均为false;

条件判断执行srcToken.safeTransferFrom(攻击者合约,漏洞合约,转移资金0);

最后执行了最重要的一步操作,dexRouter.functionCallWithValue(data,value)。从上述_swap方法传参可以知道,data数据进行了转账,攻击者完成获利;

在随后的逻辑计算和判断中,由于dstToken参数攻击者可控,所以攻击者传入攻击合约进行资金转移及判断,最终绕过条件顺利执行_swap方法,成功获利。

0x4 攻击核心

通过上述攻击交易的详细分析,可以发现攻击者成功的原因主要是_swap方法中多个参数可控,包括dstToken地址可传入任意合约地址进行资金转移;data数据未进行严格判断导致可传入攻击者构造的恶意转账;amount资金转移的数量没有进行区间限制。除此之外,Rabby Swap合约对于用户的资金授权未进行妥善处理,最终导致用户资金被盗。

0x5 事件后续

此次攻击事件中,攻击者获取了多种代币,并将所有代币兑换为114枚ETH和179枚BNB,价值19万美元,并将资金转入Tornado.Cash混币平台,攻击者初始资金(手续费)也来自Tornado.Cash。

发生攻击事件之后,Rabby Swap官方呼吁用户尽快撤销多条链上对于Rabby Swap合约的授权,以下为合约地址:

ETH: 0x6eb211caf6d304a76efe37d9abdfaddc2d4363d1

Polygon: 0xf23b0f5cc2e533283ea97f7b9245242b8d65b26b

BNB: 0xf756a77e74954c89351c12da24c84d3c206e5355

Avalanche: 0x509f49ad29d52bfaacac73245ee72c59171346a8

目前Rabby Swap官方正在追踪资金并表示会提供解决方案。

0x6 总结及安全建议

本次分析主要根据审计报告中代码进行分析,由于合约未开源,合约代码具体是否完全相同不得而知,从攻击交易分析来看,本次攻击事件中只要有两个方面的风险:第一对于Rabby Swap合约传参未进行严格判断导致部分参数可控;第二Rabby Swap合约未对用户在本合约的授权资金数量进行精确计算,导致使用Rabby Swap合约后,仍有授权资金。对于以上安全事件,零时科技安全团队给出以下建议:

  1. 合约上线前应对方法传参进行严格判断及测试,避免参数可控引起安全风险;
  2. 合约上线前进行多次安全审计,避免出现审计步骤缺失;
  3. 合约对于用户资金授权应尽量避免授权最大值,如需授权最大值,则应严格判断合约逻辑避免被其他人利用。

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

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

相关文章

RxJS - interval、take制作倒计时效果

获取验证码按钮功能: 引入所需的RxJS的方法,定义变量: import { interval } from rxjs; import { take } from rxjs/operators; buttonText 获取验证码; isDisabled false; // 按钮是否灰显 seconds 60; // 倒计时开始时间编写点击按钮…

Typora+PicGo+七牛云实现图片上传存储

1. 注册七牛云 首先,需要在七牛云官网注册账号并进行实名认证,注册----->申请个人账户----->填写注册信息----->实名认证,基本上就是这个步骤,不做细说,相信难不到聪明的你 2. 配置存储空间 2.1 新建空间 …

实训十二:路由器静态路由配置

一、 实验目的 理解路由表掌握静态路由的配置 二、 应用环境 在小规模环境里,静态路由是最佳的选择静态路由开销小,但不灵活,适用于相对稳定的网络 三、 实验设备 1、DCR-2655 三台 2、网线(交叉线) 四条 四、 实验拓扑…

操作系统导论习题解答(16. Segmentation)

Segmentation 1. Segmentation: Generalized Base/Bounds我们可以看一下(Figure 16.1),尽管每个CPU都有一对硬件寄存器(base register和bounds register),但是还是不可避免的会产生内存浪费(阴影部分表示未被使用)。为了解决这个问题,就引入了segmentation:既然每一…

植物大战 string——C++

“朝朝暮暮” 猛戳订阅🍁🍁 👉 [C详解专栏] 👈 🍁🍁 这里是目录一、编码1.ASCII码2.unicode编码3.gbk二、string的使用1.构造函数无参构造函数string()常量字符串构造string(const char* s)拷贝构造string(…

风控场景中值得收藏的10个经典算法模型的实操与应用

在风控领域中,我们也经常接触到回归模型场景,常见的例如产品额度定价、客户价值评估、信息指数分析等。针对回归模型,建模的目标变量是连续型,这是在特征数据上与分类模型最明显的区别。在模型具体实现的过程中,采用的…

Linux 学习 -- shell中字串的一些用法

1、简单用法:返回变量的内容 命令 : ${变量} 或者 $变量 2、返回变量的长度 命令:${#变量} // 返回变量长度,字符长度 3、返回变量start数值之后的字符,包括start 命令:${变量:start} 4、提取start之…

Docker 基础及安装

更多内容,前往 IT-BLOG 一、简介 Docker是基于Go语言实现的云开源项目。主要目标是 “Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(Web应用或…

微信壁纸小程序(SpringBoot后台V1.3.0发布)

前篇:微信壁纸小程序V1.2.0(自带后台上传图片)_热衷与自由的博客-CSDN博客_手机壁纸api 如果你还不知道小程序的前身,可以看看前篇哦~ 上次9月末小编发布了V1.2.0版本,完成了后台的基本功能(上传壁纸、头像…

操作系统导论习题解答(8. Multi-level Feedback)

0. 文件地址 Homework 1. MLFQ: Basic Rules2. Attempt #1: How To Change Priority2.1 Example 1: A Single Long-Running Job2.2 Example 2: Along Came A Short Job In this example, there are two jobs: A, which is a long-running CPU-intensive job, and B, which is …

基于Linux的Nginx安装

文章目录基于Linux的Nginx安装1、Nginx用户设置1.1 创建新用户(注意权限问题:切换为root用户)1.2 添加新用户nginx,并设置相关信息(一直回车默认即可)1.3 退出当前用户,登录nginx用户&#xff0…

T278789 滑冰

(芭芭拉太可爱了叭......) 题目描述 在企鹅国,企鹅们是通过滑冰出行的。每次滑冰需要选择一个营地作为起点,一个营地作为终点,然后从营地 \(A(a_x,a_y)\) 滑到营地 \(B(b_x,b_y)\) 需要的时间是 \(min \{|a_x-b_x |,|a_y-b_y | \}\)。 现在企鹅豆豆在 \(1\) 号营地,他需要…

利用workflows工作流Actions自动部署Vue项目Deploy to GitHub Pages

文档 https://github.com/marketplace/actions/deploy-to-github-pageshttps://cli.vuejs.org/zh/guide/deployment.html#github-pages 目录第一步:配置workflows第二步:开启GitHub Pages使用GitHub Pages部署一个在线Demo,每次更新代码都要…

变分自编码器VAE的直观理解与原理推导 及 问题记录

1 学习链接 参考链接: [1] 【变分自编码器 VAE 鲁鹏】 https://www.bilibili.com/video/BV1Zq4y1h7Tu?share_sourcecopy_web&vd_source7771b17ae75bc5131361e81a50a0c871 [2] http://www.gwylab.com/note-vae.html [3] https://www.bilibili.com/video/BV15E4…

已知组成元素可以唯一的确定物体形态吗?

如果把鼠标拆成一个一个的原子,能根据这些原子唯一的复现鼠标吗,或者把一个蛋白质拆成一个一个的氨基酸而顺序未知,能唯一的确定原来蛋白质的结构吗? 这次继续验算移位距离假设,所用的训练集是mnist的0,1,2…

IB课程必修课TOK到底有啥用?

众所周知,中国家长和学生最爱的IB,高中阶段有“三大奇葩课程”EE(拓展论文)、TOK(知识论)和CAS(创造、活动与服务)。下面,我们就来看看TOK到底“奇葩”在哪里&#xff0c…

外链和友情链接的作用,以及对网站SEO优化的好处

做过网站SEO优化的都知道,网站外链和友情链接是SEO优化过程中需要做的一部分。但是,现在做外链建设的成本比较高,做免费外链又比较难,所以很多SEOER倾向于做友链。本文给大家说一说外链和友情链接的作用,以及对我们的网…

快速一览:织信低代码联合WPS推出多场景办公轻应用

需求不合理?相关方已读不回?项目总是delay? 团队协作太难怎么办? 别破防!以下几种打工人常见场景难题,“织信企业级低代码平台”联合“金山WPS”为你逐一解决! 一、工作任务管理 来自小组组长的破防&…

牛客刷题总结——Python入门:输入输出、字符串、类型转换

🤵‍♂️ 个人主页: 北极的三哈 个人主页 👨‍💻 作者简介:Python领域优质创作者。 📒 系列专栏:《牛客题库-Python篇》 🌐推荐《牛客网》——找工作神器|笔试题库|面试经验|实习经验内推&am…

Vue3和@types/node的类型不兼容问题

点击上方卡片“前端司南”关注我您的关注意义重大原创前端司南插播个广告:最近我在掘金社区有个专栏,主要涉及Vite,Vue3,TypeScript,业务组件库等关键词,目的是帮助读者掌握基于 Vite 构建现代组件库的核心方法。链接:https://jue…