返回博客

损失约54.2万美元:MakerDaoBot 漏洞利用事件|BlockSec 周报

Code Auditing
2026年10月14日
阅读约 6 分钟
核心要点
  • 本报告涵盖以太坊上的 1 起安全事件,估计损失约为 54.2 万美元。

  • MakerDaoBot 的某个函数缺乏访问控制,允许任何调用者将该机器人内部余额的控制权授予外部合约。

  • 授予资金控制权的函数必须验证调用者和获得该控制权的合约的身份。

过去一周(2026/10/05 - 2026/10/11),我们观察到 1 起安全事件,估计损失总额约为 54.2 万美元。

日期 事件 类型 估计损失
2026/10/06 MakerDaoBot 缺乏访问控制 约 54.2 万美元

免费安全扫描

使用我们的内部自动化分析引擎,快速完成安全检查。

免费扫描

本周焦点:MakerDaoBot

2026 年 10 月 6 日,攻击者利用以太坊上 MakerDAO 旧版清算机器人 MakerDaoBot 缺乏访问控制的漏洞,提取了 200 ETH,价值约 54.2 万美元。该漏洞函数允许任何调用者指定一个外部合约、授予其控制机器人余额的权限,并执行其代码。攻击者通过这一路径,在一笔交易中结算了四场旧的抵押品拍卖,并转走了释放的 ETH。

背景

MakerDaoBot 通过 Flipper 参与 MakerDAO 旧版 ETH-A 抵押品拍卖。Flipper 是旧版清算系统使用的抵押品拍卖合约。该机器人管理 Vat 权限、存取 ETH 和 DAI,并处理清算任务。

Vat 是 MakerDAO 的内部账本。它按抵押品类型将每个地址的可用抵押品记录在 gem[ilk][address] 中,并将其内部 DAI 余额记录在 dai[address] 中;不存在单独的钱包或账户合约。因此,MakerDaoBot 的 Vat 余额是记录在机器人合约自身地址名下的账本条目。

调用 hope(usr) 不会转移这些余额。它会将 can[msg.sender][usr] 设为 1,使 usr 能够通过 Vat 的 wish() 权限检查,操作记录在 msg.sender 名下的余额。flux() 和 move() 等函数在转移内部抵押品或 DAI 时会使用这一检查。

mapping(address => mapping (address => uint)) public can;
function hope(address usr) external note { can[msg.sender][usr] = 1; }
function nope(address usr) external note { can[msg.sender][usr] = 0; }
function wish(address bit, address usr) internal view returns (bool) {
    return either(bit == usr, can[bit][usr] == 1);
}

mapping (bytes32 => mapping (address => uint)) public gem;  // [wad]
mapping (address => uint256)                   public dai;  // [rad]

function flux(bytes32 ilk, address src, address dst, uint256 wad) external note {
    require(wish(src, msg.sender), "Vat/not-allowed");
    gem[ilk][src] = sub(gem[ilk][src], wad);
    gem[ilk][dst] = add(gem[ilk][dst], wad);
}
function move(address src, address dst, uint256 rad) external note {
    require(wish(src, msg.sender), "Vat/not-allowed");
    dai[src] = sub(dai[src], rad);
    dai[dst] = add(dai[dst], rad);
}

漏洞分析

根本原因是 MakerDaoBot 合约 0x6839...5546 中的 0x8804d1de() 函数缺乏访问控制。该函数将 varg0 视为外部合约地址(下文称为适配器),并调用该地址上的 drip()、vat(),随后调用 join()。机器人通过 vat() 获取 Vat 地址后,会检查适配器是否可以操作其 Vat 余额。如果不能,机器人就会调用 hope(varg0) 授予权限,然后调用同一适配器上的 join()。

同一合约中的其他特权入口在执行操作前使用了 ds-auth 检查。下方对比显示,两个受保护的入口将一个 bytes4 选择器和 msg.sender 传入授权辅助函数,并在检查失败时以 ds-auth-unauthorized 回退。而 0x8804d1de() 函数没有相应的调用者检查。

因此,0x8804d1de() 函数允许任何调用者选择获得 Vat 权限的地址。机器人通过 hope() 授予该地址权限,并立即调用其 join() 函数。在这次外部调用期间,授权仍然有效,使所选地址上的代码能够操作机器人的内部抵押品和 DAI 余额。

攻击分析

以下分析基于交易 0xbb6940...f3a88c。

  • 步骤 1:攻击者的 EOA 调用了其部署的攻击合约。该合约部署了一个恶意适配器,然后以适配器地址为参数调用 MakerDaoBot 的 0x8804d1de() 函数。机器人发现 Vat 的 can 映射中没有现有授权,于是调用 hope(),允许适配器操作记录在机器人地址名下的余额。
  • 步骤 2:MakerDaoBot 调用了适配器的 join() 函数。在授权有效期间,恶意代码调用已退役的 ETH-A Flipper 上的 deal(uint256 id),结算了编号为 1457、1458、1459 和 1460 的拍卖。随后,适配器利用获得的 Vat 权限,将 200 单位的 ETH-A 抵押品从 MakerDaoBot 转移至自身,通过 ETH Join 提取并获得 200 WETH,再将这些代币转给攻击合约。
  • 步骤 3:攻击合约将 200 WETH 解包,并向攻击者的 EOA 发送了 200 ETH,当时价值约 54.2 万美元。

开始使用 Phalcon Explorer

深入分析交易,明智采取行动

立即免费试用

结论

根本原因是 MakerDaoBot 缺乏访问控制,而不是 MakerDAO 的 Vat 权限系统存在缺陷。一个公开函数允许任何调用者选择外部合约、授予其控制机器人内部余额的权限,并执行其代码。攻击者通过这一路径结算了四场旧版拍卖,并提取了 200 ETH。

任何会授予资产控制权的函数,都必须限制谁可以发起操作,以及哪些外部合约可以获得该权限。敏感的集成路径应采用与其他特权函数相同的授权控制,并且只接受明确获批的合约。

Web3 领域卓越的安全审计机构

在上线前验证设计、代码和业务逻辑

关于 BlockSec

BlockSec 是一家提供全栈区块链安全与加密资产合规服务的机构。我们打造的产品和服务,帮助客户在协议和平台的整个生命周期内完成代码审计(包括智能合约、区块链和钱包)、实时拦截攻击、分析安全事件、追踪非法资金,并履行反洗钱和反恐怖融资(AML/CFT)义务。

BlockSec 已在知名会议上发表多篇区块链安全论文,报告了多起 DeFi 应用的零日攻击,拦截了多起黑客攻击并挽救了超过 2000 万美元的资产,还保护了价值数十亿美元的加密资产。

订阅最新动态
NEAR Intents 漏洞利用事件:退款缺陷与安全启示
Security Insights

NEAR Intents 漏洞利用事件:退款缺陷与安全启示

NEAR Intents 漏洞利用事件中,攻击者利用超额退款事件,使存入的资产退回后内部余额仍得以保留。本文分析重建了交易回执中的执行流程,以及在 BNB Chain 上进行的七笔提款;这些提款合计 3,865,021 USDT。本文还区分了这些资金流出与项目方报告的全部资金追回,并概述了开发和审计 NEAR 智能合约时需要考虑的安全问题。

损失约557万 USD:X100 Freezer、NEM 遭攻击|BlockSec周报
Security Insights

损失约557万 USD:X100 Freezer、NEM 遭攻击|BlockSec周报

本周报告涵盖 2026年10月19日–2026年10月25日 期间以太坊和 BNB Chain 上发生的两起安全事件。报告分析了利用闪电贷资金接管 X100 Freezer 治理权的事件,以及影响 BNB Chain 上一个 NEM 代币流动性池的税费结算缺陷。报告统计范围内的估计损失合计约 557万 USD:其中,具有代表性的 X100 交易造成约 ~475万 USD 的损失,NEM 流动性池事件造成约 ~82.0万 USD 的损失。该合计金额不包括另行报告的后续 X100 资金提取。

Autheo Network、UNCX 遭黑客攻击,损失约387万 USD | BlockSec 周报
Security Insights

Autheo Network、UNCX 遭黑客攻击,损失约387万 USD | BlockSec 周报

本周报告涵盖 2026年10月12日–2026年10月18日 期间的 3 起安全事件,估计总损失约为 387万 USD。Autheo Network 因私钥泄露损失约 176万 USD,Qubic Wallet 因种子生成机制薄弱损失约 130万 USD;UNCX Network 在 Ethereum、BNB Chain、Base 和 Robinhood Chain 上的 Smart Token Vesting V2 合约因会计核算错误损失约 80.7万 USD。重点分析的 UNCX 事件说明,有缺陷的总份额计算将按不同代币与份额兑换比率创建的归属批次混合计算,从而使人能够从共享资金池超额提取。

Web3 最佳安全审计方

在上线之前验证设计、代码与业务逻辑,对标业内最高安全标准。

BlockSec 审计