• 智能合约漏洞,Euler Finance 价值 1.95 亿美元漏洞事件分析


    智能合约漏洞,Euler Finance 价值 1.95 亿美元漏洞事件分析

    事件背景

    零时科技区块链安全情报平台监控到消息,北京时间 2023 年 3 月 14 日,ETH 链上 Euler Finance 受到黑客攻击,攻击者获利约 1.97 亿美元,攻击者地址为 0xb66cd966670d962c227b3eaba30a872dbfb995db,被盗资金 100ETH 转移至混币平台 Tornado.Cash,其余资金仍在攻击者地址暂未移动。零时科技安全团队及时对此安全事件进行分析。

    漏洞及核心

    合约中有关代币余额修改的函数中存在检查清算的功能,在执行代币转移后检查抵押资产与借出资金,要求抵押资产大于借出资金。


    由于函数 donateToReserves 中缺少检查清算逻辑,攻击者可以通过此函数将借款调整为清算状态。

    攻击者构造出两个攻击合约,其中一个合约执行借款操作,另一个合约执行清算操作。
    借款合约通过闪电贷借出 30,000,000 DAI,之后将 20,000,000 DAI 存入 Euler 中获得 19,568,124 eDAI,之后调用 mint 函数借出 200,000,000 dDAI 和 195,681,243eDAI,将资产放大 10 倍。

    之后攻击者调用 repay 函数继续进行质押,将剩余 10,000,000 DAI 进行质押并销毁 10,000,000 eDAI,之后继续调用 mint 函数借出 200,000,000 dDAI 和 195,681,243eDAI,此时攻击者共有 400,000,000 dDAI 和 400,930,610 eDAI。
    攻击者调用合约中 donateToReserves 函数进行转账,将 100,000,000 eDAI 转移至 0 地址。

    此时攻击者地址共有 400,000,000 dDAI 和 300,930,610 eDAI,已经达到清算条件,由于此函数中缺少清算判断,未能执行清算。
    清算合约调用清算函数执行清算操作,共获得 310,930,612 eDAI 和 254,234,370dDAI


    之后攻击者调用 withdraw 函数将池子中 DAI 全部取出。

    此笔交易中攻击者共获利 8,877,507 DAI

    总结及建议

    此次攻击是由于 EToken 合约中 donateToReserves 函数缺失清算检查逻辑,攻击者能够恶意将借贷的资金处于清算状态下而不触发清算,使得攻击者能够无需向合约转移清算资金而触发清算从而获利。

    安全建议

    建议对合约中相关函数添加清算检查操作
    建议项目方上线前进行多次审计,避免出现审计步骤缺失

  • 相关阅读:
    循环神经网络的网络结构,神经网络训练过程图解
    AtCoder Beginner Contest 215 E(DP + 二进制枚举)
    研发过程中的文档管理与工具
    音视频播放器—快进快退及逐帧播放
    操作系统概念介绍
    C++下基于遗传算法解决TSP问题
    UDP和TCP协议发送接收数据
    spring的自动装配
    17_C++_面向对象_构造函数_析构函数
    达梦数据库sql中with语句的使用
  • 原文地址:https://blog.csdn.net/weixin_28733483/article/details/133675648