智能合约漏洞案例,Euler Finance 1.96 亿美元闪电贷漏洞分析

智能合约漏洞案例,Euler Finance 1.96 亿美元闪电贷漏洞分析

2023 年 3 月 13 日上午 08:56:35 +UTC,DeFi 借贷协议 Euler Finance 遭遇闪电贷攻击。
Euler Finance 是一种作为无许可借贷协议运行的协议。其主要目标是为用户提供各种加密货币的借贷便利。这家总部位于英国的科技初创公司利用数学原理在以太坊和其他区块链网络上开发非托管协议,重点是实现高性能。
根据链上数据分析,攻击者已成功执行多笔交易,造成约 1.96 亿美元的盗窃,成为 2023 年迄今为止最大的黑客攻击。被盗资产包括价值数百万的 DAI、USDC、Staked Ether (StETH) 和 Wrapped Bitcoin (WBTC)。
被盗资产明细如下:

详细分析

由于 Etoken 的 donateToReserves 函数中缺乏流动性检查,所以可能会发生攻击。攻击者使用不同的货币执行多次调用以产生利润,导致六种不同代币的巨额损失 1.96 亿美元。目前,资金仍留在攻击者的账户中。
攻击者地址为:https://etherscan.io/address/0xb66cd966670d962c227b3eaba30a872dbfb995db
攻击者的合约地址为:https://etherscan.io/address/0x036cec1a199234fc02f72d29e596a09440825f1c
其中一项攻击交易可以在这里找到:https://etherscan.io/tx/0xc310a0affe2169d1f6feec1c63dbc7f7c62a887fa48795d327d4d2da2d6b111d

  1. 攻击者首先通过闪电贷向 Aave 借了 3000 万个 DAI,然后部署了两份合约:一份用于借贷,一份用于清算。
    image.png
  2. 攻击者随后调用 deposit 函数并向 Euler 协议合约质押 2000 万个 DAI,获得 1950 万个 eDAI 作为回报。
    image.png
  3. Euler Protocol 允许用户通过调用 mint 函数借入最多 10 倍于存款的资金。攻击者利用此功能借入了 1.956 亿个 eDAI 和 2 亿个 dDAI。
    image.png
  4. 攻击者调用 repay 函数,用闪电贷借来剩下的 1000wDai 来偿还债务,并销毁 1000 万 dDAI。然后他们再次调用 mint 功能借入 1.956 亿个 eDAI 和 2 亿个 dDAI。
    image.png
  5. 攻击者随后调用 donateToReserves 函数并捐赠了偿还债务所需金额的 10 倍,发送了 1 亿个 eDAI。然后他们调用 liquidate 函数启动清算过程,获得了 3.1 亿个 dDAI 和 2.5 亿个 eDAI。
    image.png
  6. 攻击者调用了 withdraw 函数,获得了 3890 万个 DAI,用来偿还闪电贷借来的 3000 万个 DAI。他们从这次攻击中获利 887 万 DAI。
    image.png

核心漏洞

首先,让我们看一下 donateToReserves 函数,这是用户容易被清算的地方。
image.png
对比下图中的 donateToReserves 函数和 mint 函数,我们可以看到 donateToReserves 函数中少了一个关键步骤 checkLiquidity。
image.png
接下来,我们跟进检查了 checkLiquidity 的实现。我们发现了 Call InternalModule 函数,它调用 RiskManager 来检查并确保用户的 Etoken > Dtoken。
image.png
每次操作都需要检查用户的流动性,调用 checkLiquidity。
但是 donateToReserves 函数不执行这个操作,让用户先通过协议的某些函数让自己处于清算状态,然后完成清算。

关于攻击的官方更新

Euler Finance 已在其官方推特(@eulerfinance)上确认了此次攻击,并表示他们目前正在与安全专业人员和执法部门合作解决该问题。
image.png
Euler Finance 最近更新了他们为协议用户收回资金的努力。他们概述了自攻击发生以来他们采取的几项行动,包括通过禁用 EToken 模块来尽快停止直接攻击,该模块阻止了存款和易受攻击的捐赠功能。
此外,他们还与各种安全组织合作,例如 TRM Labs、Chainalysis 和更广泛的以太坊安全社区,以协助调查和追回资金。Euler Finance 还与美国和英国的执法部门共享信息。
最后,该公司试图联系攻击者以了解更多有关潜在恢复选项的信息。
image.png

结论

最近针对 Euler Finance 协议的攻击凸显了实施严格安全措施的重要性,例如进行彻底审计和定期检查漏洞。
随着去中心化金融生态系统的不断发展,项目必须优先考虑用户资金的安全并采用最佳实践来降低未来类似攻击的风险。

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

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

相关文章

斯里兰卡投资促进部中国招商大使率考察团到访深兰科技

9月13日,来华访问的斯里兰卡投资促进部政府考察团,在斯里兰卡投资促进部中国招商大使吴克向的率领下,到访深兰科技集团,并与深兰科技集团董事副总裁刘园桂等进行了会谈。 考察团随行人员包括Sri Lanka Sithara Limited公司总裁Mr.…

VisualBox QA

出现提示注册表错误,或者之前正常,重启VisualBox后,VM运行失败时,可通过正确卸载VisualBox,然后使用注册表清理软件(CCleaner)清理注册表后,重装VisualBox,即会正常。(一般用这个能解…

Unity WebGL 编译 报错: emcc2: error: ‘*‘ failed: [WinError 2] ϵͳ�Ҳ���ָ�����ļ���解决办法

文章目录 错误日志可能的原因及解决办法:导出路径不能有中文系统名(win)含有中文, 修改环境变量Temp和Tmp, 如下图:真正的原因: 杀毒软件删除了部分wasm相关文件,如: 错误日志 Building Library\Bee\artifacts\WebGL\build\debug_WebGL_wasm\build.js failed with output: emc…

【WFA】【Enhanced open】CT_OWE_DHgroup_STA_NoAssociation-AllGroupsRejected_10338_1

测试报告如下: Fail的关键log: 当连接到ap失败时,驱动程序将尝试连接到ap。如果ap仅支持Group 20,并且sta支持Group 19、20。sta将首先尝试Group 19,ap将通过状态代码77拒绝它。然后驱动程序将尝试连接Group 19的ap,仍然达到最大重试次数。那么sta将尝试第Group 20 。 …

刷一下算法

记录下自己的思路与能理解的解法,可能并不是最优解法,不定期持续更新~ 1.盛最多水的容器 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容…

2023-09-18 LeetCode每日一题(打家劫舍 III)

2023-09-18每日一题 一、题目编号 337. 打家劫舍 III二、题目链接 点击跳转到题目位置 三、题目描述 小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为 root 。 除了 root 之外,每栋房子有且只有一个“父“房子与之相连。一番侦…

【Vue入门】语法 —— 插值、指令、过滤器、计算属性、监听器

目录 一、模版语法 1.1 插值 1.1.1 文本 1.1.2 html解析 1.1.3 属性 1.1.4 表达式 1.2 指令 1.2.1 核心指令 1.2.3 动态参数 二、过滤器 2.1 局部过滤器 2.2 全局过滤器 三、计算属性 四、监听器 五、排座案例 小结:计算属性和监听属性的区别 一、模…

sudo+vim+g++/gcc+makefile+进度条

目录 一、信任表中加入指定的普通用户(使其能使用sudo) 二、vim的使用 (一)基本概念 1. 正常/普通/命令模式(Normal mode) 2. 插入模式(Insert mode) 3. 末行模式(last line mode) (二)vim正常模式…

2、ARM处理器概论

一、ARM处理器概述 1、ARM的含义 ARM(Advanced RISC Machines)有三种含义,一个公司的名称、一类处理器的通称、一种技术 ARM公司: 成立于1990年11月,前身为Acorn计算机公司主要设计ARM系列RISC处理器内核授权ARM内…

idea设置项目启动的JVM运行内存大小

idea设置项目启动的JVM运行内存大小 场景 在开发当中,idea默认服务启动要占用1G内存。其实每个项目本地开发和调试的时候,根本不需要1G内存,200M左右足以 如果在微服务体系下,那效果更明显,相同的内存可以启动更多的…

人脸修复祛马赛克算法CodeFormer——C++与Python模型部署

一、人脸修复算法 1.算法简介 CodeFormer是一种基于AI技术深度学习的人脸复原模型,由南洋理工大学和商汤科技联合研究中心联合开发,它能够接收模糊或马赛克图像作为输入,并生成更清晰的原始图像。算法源码地址:https://github.c…

Java增强for循环(学习笔记)

Java增强for循环 主要用于数组或者集合的增强型for循环。 格式: for(声明语句:表达式){ 代码句子 } 声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元…

sentry安装self-hosted版,前端监控平台

一、下载self-hosted-23.7.2.tar.gz 二、解压 三、cd self-hosted-23.7.2然后执行./install.sh 四、查找python whereis python修改yum配置文件:vim /usr/bin/yum五、修改RUN apt-get update && apt-get install -y --no-install-recommends cron &…

9月15日上课内容 Zookeeper集群 + Kafka集群

Zookeeper 本章结构 Zookeeper 概述 Zookeeper 定义 *(了解) Zookeeper是一个开源的分布式的,为分布式框架提供协调服务的Apache项目。 Zookeeper 工作机制 *****(非常重要,需要掌握) Zookeeper从设计模式…

检索技术核心学习总结

一、学习检索技术的必要性分析 (一)关键原因分析 学习检索技术(Information Retrieval,IR)具有多种重要的原因,特别是在今天信息爆炸的数字化时代。 总的来说,学习检索技术有助于提高信息处理…

x86平台运行arm64平台docker 镜像

本文介绍在x86服务器上安装qemu-aarch64-statick仿真器,以实现x86服务器可以运行docker或docker-compose镜像。 报错信息: x86服务器默认不能运行ARM平台镜像,会提示如下错误: WARNING: The requested images platform (linux/ar…

1400*C. No Prime Differences(找规律数学)

解析&#xff1a; 由于 1 不是质数&#xff0c;所以我们令每一行的数都相差 1 对于行间&#xff0c;分为 n、m之中有存在偶数和都为奇数两种情况。 如果n、m存在偶数&#xff0c;假设m为偶数。 如果都为奇数&#xff0c;则&#xff1a; #include<bits/stdc.h> using name…

new/delete, malloc/free 内存泄漏如何检测

区别&#xff1a; 首先new/delete是运算符&#xff0c;malloc/free是库函数。malloc/free只开辟内存不初始化&#xff1b;new/delete及开辟内存也初始化。抛出异常的方式&#xff1a;new/delete开辟失败使用抛出bad_alloc&#xff1b;malloc/free通过返回值判断。malloc和new区…

el-table 翻页记住上页选项,包含回显选中的数据

需求为翻页记住上页选项,包含回显选中的数据,然后还能进行新增和取消勾选 首先element管网有提供及住翻页功能 所以可以根据官网提供的方法来改造 一定要做的操作就是清空一下选中的数据,否则不生效,this.$refs.selectTable.clearSelection(); 然后就是处理选中的数据,和原…

强强/视频SDK:VisioForge SDKs .Net 15.6.8 Crack

VisioForge 为软件开发人员提供视频捕获、编辑和播放解决方案 使用我们的开发人员软件&#xff0c;您可以开发用于从多种来源&#xff08;例如网络摄像头、IP 摄像机、摄像机或 PC 屏幕&#xff09;捕获视频的应用程序。视频可以保存为所有最流行格式的视频文件&#xff0c;例如…