DeusDao漏洞分析——区块链

影响

2023 年 5 月 6 日,由于智能合约漏洞,Deus DAO 协议在 Arbitrum、以太坊和 BNB 链上被利用。在这次攻击中,黑客窃取了大约 650 万美元。

虽然这个漏洞很久远,但可以学习下

Deus介绍

Deus 是一个去中心化的点对点基础设施平台,允许数字衍生品、期权和掉期的场外交易。使用 Deus,用户可以创建自定义衍生品并与平台上的其他人进行交易。

DEI 是一种部分储备稳定币,可用作基于 DEUS 基础设施层构建的协议的衍生品交易的记账单位。

说白了,就是Deus平台中使用智能合约分化出一个新的币种(合约维持的)名为DEI

根本原因:

根本漏洞是函数中的限额配置错误。而不是_allowances[account][_msgSender()] ,它被设置为 _allowances[_msgSender()][account]

  • 漏洞代码
function burnFrom(address account, uint256 amount) public virtual {
        uint256 currentAllowance = _allowances[_msgSender()][account];
        _approve(account, _msgSender(), currentAllowance - amount);
       _burn(account, amount);
}

攻击过程:

攻击者首先识别了一个持有大量$DEI代币的地址。然后,攻击者使用受害者的地址调用 burnFrom() 函数,将 amount 参数传递为零。
在这里插入图片描述

该合约现在允许批准从指定地址到攻击者地址的所有令牌。这意味着攻击者现在可以访问与该地址关联的所有令牌。
在这里插入图片描述

然后,他们调用对 transferFrom() 函数的调用,以拿走资产以获取利润。该攻击者在 Arbitrum 上获利超过 500 万美元,在以太坊上获利超过 135 美元。
在这里插入图片描述

在BNB链中,这个漏洞是抢先进行的。他们向 Deus Deployer 发送了一条链上消息,打算退还资金。
在这里插入图片描述

总损失:

在这里插入图片描述

资金流向:

攻击者将所有 USDC 换成 ETH,并将其从 Arbitrum 桥接到以太坊链。在撰写此博客时,攻击者的钱包中有价值约 103 万美元的资产。

在这里插入图片描述

如何修复:

理论上只要将_allowances[_msgSender()][account]->_allowances[account][_msgSender()]即可
  • 修复代码
function burnFrom(address account, uint256 amount) public virtual {
        uint256 currentAllowance = _allowances[account][_msgSender()];
        _approve(account, _msgSender(), currentAllowance - amount);
       _burn(account, amount);
}

现在去查看deus的git源码,官方是这样修改的

  function burnFrom(address account, uint256 amount) public virtual {
    uint256 decreasedAllowance = allowance(account, _msgSender()).sub(amount, "ERC20: burn amount exceeds allowance");
    _approve(account, _msgSender(), decreasedAllowance);
        _burn(account, amount);
    }

POC

在这里插入图片描述

复现过程

参考:https://consensys.io/diligence/blog/2023/08/reproducing-the-deusdao-exploit-with-diligence-fuzzing/

本人并没有复现成功,有成功可以评论出来

引用

https://quillaudits.medium.com/decoding-deus-dao-6-5-million-exploit-quillaudits-588bbecec61f
https://consensys.io/diligence/blog/2023/08/reproducing-the-deusdao-exploit-with-diligence-fuzzing/

  • 18
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我重来不说话

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值