智能合约漏洞,价值 5200 万美元的 Vyper 漏洞攻击原理分析

智能合约漏洞,价值 5200 万美元的 Vyper 漏洞攻击原理分析

7 月 30 日,因为 Vyper 部分版本中的漏洞,导致 Curve、JPEG’d 等项目陆续受到攻击,损失总计超过 5200 万美元。

Safful 对此事件第一时间进行了技术分析,并总结了安全防范手段,希望后续项目可以引以为戒,共筑区块链行业的安全防线。

一、 事件分析

以 JPEG’d 被攻击为例:
攻击者地址:0x6ec21d1868743a44318c3c259a6d4953f9978538
攻击者合约:0x9420F8821aB4609Ad9FA514f8D2F5344C3c0A6Ab
攻击交易:0xa84aa065ce61dbb1eb50ab6ae67fc31a9da50dd2c74eefd561661bfce2f1620c
(1)攻击者(0x6ec21d18)创建 0x466B85B4 的合约,通过闪电贷向 [Balancer: Vault]借了 80,000 枚 WETH。
image.png
(2)攻击者(0x6ec21d18)向 pETH-ETH-f(0x9848482d)流动性池中添加了 40,000 枚 WETH,获得 32,431 枚 pETH。
image.png
(3)随后攻击者(0x6ec21d18)从 pETH-ETH-f(0x9848482d)流动性池中重复地移除流动性。
image.png
(4)最终,攻击者(0x6ec21d18)获得 86,106 枚 WETH,归还闪电贷后,获利 6,106 枚 WETH 离场。

二、漏洞分析

(1)该攻击是典型的重入攻击。对遭受攻击的项目合约进行字节码反编译,我们从下图可以发现:add_liquidity 和 remove_liquidity 两个函数在进行校验存储槽值时,所要验证的存储槽是不一样的。使用不同的存储槽,重入锁可能会失效。此时,怀疑是 Vyper 底层设计漏洞。
image.png
(2)结合 Curve 官方的推文所说。最终,定位是 Vyper 版本漏洞。该漏洞存在于 0.2.15、0.2.16、0.3.0 版本中,在重入锁设计方面存在缺陷。我们对比 0.2.15 之前的 0.2.14 以及 0.3.0 之后的 0.3.1 版本,发现这部分代码在不断更新中,老的 0.2.14 和交心的 0.3.1 版本没有这个问题。
image.png
image.png
(3)在 Vyper 对应的重入锁相关设置文件 data_positions.py 中,storage_slot 的值会被覆盖。在 ret 中,第一次获取锁的 slot 为 0,然后再次调用函数时会将锁的 slot 加 1,此时的重入锁会失效。
image.png
漏洞总结:本次攻击事件根本原因是 Vyper 的 0.2.15、0.2.16、0.3.0 版本的重入锁相关设计不合理,并且没有进行足够全面的功能测试。导致后期使用这些版本的项目中重入锁失效,最终遭受了黑客攻击。

三、安全建议

对于本次攻击事件,开发人员在日常开发中应当采取有以下的安全措施:
(1) 项目方需保障功能设计合理并对代码进行全面测试,防止遗漏某些功能的测试。
(2) 项目发版前,需要向第三方专业的审计团队寻求技术帮助。

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

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

相关文章

2023 IDC中国数字金融论坛丨中电金信向行业分享“源启+应用重构”新范式

9月8日,IDC主办的“2023 IDC中国数字金融论坛”在北京召开。中电金信受邀参会,并带来了深度数字化转型趋势之下关于应用重构的分享与洞见。 论坛重点关注金融科技创新发展趋势与数字化转型之路,中电金信副总经理、研究院院长况文川带来了“创…

nSoftware IPWorks IoT 2022 Java 22.0.8 Crack

物联网库,使用这个轻量级组件库,可以在任何平台上的应用程序中轻松实现物联网 (IoT) 通信协议。 nSoftware IPWorks IoT 最新的 IPWorks IoT 现已推出!最新版本的 IPWorks IoT 具有现代化和简化的体验,包括 .NET 中的异步和跨平台…

[开源]MIT协议,开源论坛程序,拥有友好的用户界面和操作体验

一、开源项目简介 尤得一物是一个开源论坛程序,提供丰富的功能,可以作为管理或分享文章的论坛博客,也可以在此基础上进行自定义开发。 二、开源协议 使用MIT开源协议 三、界面展示 四、功能概述 尤得一物是一个开源论坛程序,…

vue-7-vuex

一、Vuex 概述 目标:明确Vuex是什么,应用场景以及优势 1.是什么 Vuex 是一个 Vue 的 状态管理工具,状态就是数据。 大白话:Vuex 是一个插件,可以帮我们管理 Vue 通用的数据 (多组件共享的数据)。例如:购…

Spring Boot与Kubernetes结合:构建高可靠、高性能的微服务架构

Spring Boot和Kubernetes(K8s)是当今非常热门的技术,它们的结合可以帮助开发者更高效地构建、部署和管理应用程序。本文将详细介绍Spring Boot和Kubernetes的主要特点,以及它们结合使用的优势。 一、Spring Boot的特点 Spring B…

arcgis地形分析全流程

主要内容:DEM的获取与处理、高程分析、坡度分析、坡向分析、地形起伏度分析、地表粗糙度分析、地表曲率分析; 主要工具:镶嵌至新栅格、按掩膜提取、投影栅格、坡度、坡向、焦点统计 一 DEM的获取与处理 1.1 DEM是什么? DEM(D…

安全与隐私:直播购物App开发中的重要考虑因素

随着直播购物App的崭露头角,开发者需要特别关注安全性和隐私问题。本文将介绍在直播购物App开发中的一些重要安全和隐私考虑因素,并提供相关的代码示例。 1. 数据加密 在直播购物App中,用户的个人信息和支付信息是极为敏感的数据。为了保护…

Linux文件与目录的增删改查

一、增 1、mkdir命令 作用: 创建一个新目录。格式: mkdir [选项] 要创建的目录 常用参数: -p:创建目录结构中指定的每一个目录,如果目录不存在则创建,如果目录已存在也不会被覆盖。用法示例: 1、mkdir directory:创建单个目录 这个命令会在当前目录下创建一个名为…

国外网站国内镜像

国外网站国内镜像 1. huggingface 1. huggingface huggingface—>互链高科

简单好用的CHM文件阅读器 CHM Viewer Star最新 for mac

CHM Viewer Star 是一款适用于 Mac 平台的 CHM 文件阅读器软件,支持本地和远程 CHM 文件的打开和查看。它提供了直观易用的界面设计,支持多种浏览模式,如书籍模式、缩略图模式和文本模式等,并提供了丰富的功能和工具,如…

亚马逊流量攻略:如何将流量转化为销售,测评实现销售飙升!

在电商领域,流量获取一直是一个核心议题。对于任何希望增加订单量的商家而言,将流量引导至自身店铺并成功转化为销售至关重要。对于初入电商领域或规模较小的卖家来说,亚马逊内部的流量获取通常可带来显著的销售业绩。那么,如何利…

python—如何提取word中指定内容

假设有一个Word,该Word中存在 “联系人” 关键字,如何将该Word中的联系人所对应的内容提取出来呢? 该Word内容如下所示: 要在给定的Word文档中提取出与"联系人"关键字对应的内容,可以使用Python的py…

【分享】xpath的属性表达式

在XPath中,要选择HTML文档中具有特定类的元素,您通常需要使用属性选择器 [attribute-nameattribute-value] 来选择元素,其中 attribute-name 是属性名称,attribute-value 是要匹配的属性值。对于HTML元素的类选择器,您…

【抓包https请求网络异常/无数据怎么破】

当你测试App的时候,想要通过Fiddler/Charles等工具抓包看下https请求的数据情况,发现大部分的App都提示网络异常/无数据等等信息。 当你测试App的时候,想要通过Fiddler/Charles等工具抓包看下https请求的数据情况,发现大部分的Ap…

见微知著:从企业售后技术支持看云计算发展

作者:余凯 售后业务中的细微变化 作为阿里云企业容器技术支持的一员,每天会面对全球各地企业级客户提出的关于容器的各种问题,通过这几年的技术支持的经历,逐步发现容器问题客户的一些惯性,哪些是重度用户&#xff0…

mysql改造oracle,以及项目改造

mysql改造oracle,以及springboot项目改造 oracle改造说明 这次的任务是springboot mysql版本改造为oracle版本,mysql5.7,oracle11.2,springboot2.0.2(springboot版本无所谓,都差不多,自己记录…

Dockerfile定制Ubuntu的docker镜像

当我们本地有一个从docker官网拉取的ubuntu:latest的Ubuntu镜像,我们基于这个镜像来定制一个自己的Ubuntu镜像 创建一个单独的文件夹create_docker 在这个文件夹下创建一个名为Dockerfile的文件:touch Dockerfile 将下面文件复制到Dockerfile文件中,可添加自己需要的安装指令…

go中bson的基本操作,bson.M,bson.D,bson.A,bson.E

1.Bson的类型 bson对象是键值对对象,bson是JSON的二进制格式。go操作mongoDB数据库的时候经常使用bson键值对作为筛选条件。 D家族,可以简单的构建BSON对象。 D:一个BSON文档,这种类型应该在顺序重要的情况下使用。 每一对键值…

Java使用模板导出word、pdf

使用deepoove根据模板导出word文档&#xff0c;包括文本、表格、图表、图片&#xff0c;使用WordConvertPdf可将word文档转换为pdf导出 模板样例&#xff1a; 导出结果&#xff1a; 一、引入相关依赖 <!-- 工具类--><dependency><groupId>cn.hutool&…

基于YOLOv5、YOLOv8的火灾检测(超实用毕业设计项目)

yolo系列文章目录 摘要&#xff1a;基于YOLOV5模型的火灾检测系统用于日常生活中检测与定位火灾目标&#xff0c;包括建筑火灾、森林火灾等。利用深度学习算法可实现图片、视频、摄像头等方式的火灾目标检测&#xff0c;另外本系统还支持图片、视频等格式的结果可视化与结果导…