火星链 火星链
Ctrl+D收藏火星链

LAT:MakerDAO治理合约升级背后的安全风波

作者:

时间:1900/1/1 0:00:00

北京时间2019年05月07日,区块链安全公司Zeppelin对以太坊上的DeFi明星项目MakerDAO发出安全预警,宣称其治理合约存在安全漏洞,希望已锁仓参与投票的用户尽快解锁MKR提并出。MakerDAO的开发者Maker公司亦确认了漏洞存在,并上线了新的治理合约,并宣称漏洞已修复。

该安全威胁曝出后,PeckShield全程追踪了MKR代币的转移情况,并多次向社区发出预警,呼吁MKR代币持有者立即转移旧合约的MKR代币。截止目前,绝大多数的MKR代币已经完成了转移,旧治理合约中尚有2,463个MKR代币待转移。

05月07日当天,经PeckShield独立研究发现,确认了该漏洞的存在,具体而言:由于该治理合约实现的投票机制存在某种缺陷,允许投票给尚不存在的slate。等用户投票后,攻击者可以恶意调用free()退出,达到减掉有效提案的合法票数,并同时锁死投票人的MKR代币。

Maker协议将在以太坊完成合并后仅支持PoS链:金色财经消息,Maker DAO发推特称,Maker协议将在以太坊完成合并后仅支持PoS链,用户无需采取任何特定行动来保持其Maker Vault正常运行。另外,Maker DAO还提醒用户小心重放攻击。[2022/9/9 13:19:02]

次日05月08日,PeckShield紧急和Maker公司同步了漏洞细节,05月10日凌晨,MakerDAO公开了新版合约。Zeppelin和PeckShield也各自独立完成了对其新合约的审计,确定新版本修复了该漏洞。

在此我们公布漏洞细节与攻击手法,也希望有引用此第三方库合约的其它DApp能尽快修复。

MakerDAO投票决定在3个月内用300万DAI进行MKR回购试验:6月24日消息,MakerDAO投票决定在3个月内用300万DAI购买和销毁MKR,通过部署试运行DssKiln来实现整个过程,MakerDAO旨在让其金库维持高于当前水平的盈余缓冲,以降低未来债务拍卖中MKR铸造崩盘事件的可能性。

据悉,该提案是Restart the burn SR V2提案的升级版本。而DssKiln是一个无需许可的代币购买和处置工具,将直接使用DAI从Uniswap市场购买MKR并通过调用MKR的burn()功能来销毁它们。[2022/6/24 1:29:08]

细节

在MakerDAO的设计里,用户是可以通过投票来参与其治理机制,详情可参照DAO的FAQ。

MakerDAO社区成立Maker Growth Core Unit:官方消息,MakerDAO社区成立Maker Growth Core Unit,致力于通过战略合作伙伴关系和业务发展,持续发展Dai稳定币和Maker协议。[2021/6/25 0:06:23]

以下是关于itchyDAO的细节,用户可以通过lock/free来将手上的MKR锁定并投票或是取消投票:

在lock锁定MKR之后,可以对一个或多个提案(address数组)进行投票:

注意到这里有两个vote函数,两者的传参不一样,而vote(addressyays)最终亦会调用vote(bytes32slate),其大致逻辑如下图所示:

公告 | 关于HB.top更改Maker%Taker机制:HB.top公告称,为配合HB.top 汇币网平台币HB的生态建设,构建HB治理平台的目标,本周将现有Maker&Taker机制做出调整。[2018/8/14]

简单来说,两个vote殊途同归,最后调用addWeight将锁住的票投入对应提案:

可惜的是,由于合约设计上失误,让攻击者有机会透过一系列动作,来恶意操控投票结果,甚致让锁定的MKR无法取出。

这里我们假设有一个从未投过票的黑客打算开始攻击:

1、调用lock()锁仓MKR,此时deposits会存入锁住的额度。

2、此时黑客可以线下预先算好要攻击的提案并预先计算好哈希值,拿来做为步骤3的传参,因为slate其实只是address数组的sha3。

这里要注意挑选的攻击目标组合必须还不存在于slates中(否则攻击便会失败),黑客亦可以自己提出一个新提案来加入组合计算,

如此便可以确定这个组合必定不存在。

3、调用vote(bytes32slate),因为slate其实只是address数组的sha3,黑客可以线下预先算好要攻击的提案后传入。

这时因为votes还未赋值,所以subWeight()会直接返回。接下来黑客传入的sha3(slate)会存入votes,之后调用addWeight()。从上方的代码我们可以看到,addWeight()是透过slates取得提案数组,此时slates获取到的一样是未赋值的初始数组,所以for循环不会执行

4、调用etch()将目标提案数组传入。注意etch()与两个vote()函数都是public,所以外部可以随意调用。这时slates就会存入对应的提案数组。

5、调用free()解除锁仓。这时会分成以下两步:

deposits=sub(deposits,wad),解锁黑客在1.的锁仓

subWeight(wad,votes)

从对应提案中扣掉黑客的票数,然而从头到尾其实攻击者都没有真正为它们投过票。

从上面的分析我们了解,黑客能透过这种攻击造成以下可能影响:

一、恶意操控投票结果

二、因为黑客预先扣掉部份票数,导致真正的投票者有可能无法解除锁仓

时间轴

时间

事件

2019.05.07

PeckShield复查并确认了漏洞存在

2019.05.08

PeckShield与Maker基金会讨论并确认了漏洞细节

2019.05.09

Maker基金会公布新版DSChief合约源码,PeckShield披露了漏洞相关细则

*文章为作者独立观点,不代表BSCEC立场

转载此文章须经作者同意,并请附上出处及本页链接。原文链接https://mp.weixin.qq.com/s?__biz=MzU3MTU2NTU1MA==

标签:MKRSLATSLALATmkr币是什么币TranslatixSLAY2EARNLATTE

以太坊价格热门资讯
IDA:IDAX开放EMI充提、交易公告

亲爱的用户:??IDAX将上线EMI。开通EMI/ETH交易,立即前往。充值开放时间:2019年6月25日21:00(UTC8)交易开放时间:2019年5月25日21:00(UTC8)提币开放时.

1900/1/1 0:00:00
NEWS:魏斯评级发布最新加密货币评级,首次披露评级依据

魏斯评级是目前唯一一家提供加密货币评级的金融评级机构,本周,该公司公布了93个加密货币评级的名单,其中包括BTC、ADA、EOS、ETH、XRP、XLM和TRX.

1900/1/1 0:00:00
:风险准备金制度

概述风险准备金制度是指,为了维护市场正常运转提供财务担保和弥补因不可预见风险带来亏损而提取的专项资金的制度。币客会每天公布风险准备金情况。每一个合约都有自己的风险准备金.

1900/1/1 0:00:00
APP:火星一线 | 澳本聪再度造假,OKEx BSV季度合约大量爆仓

火星财经APP一线报道,OKEx平台BSV季度合约价格最高达138.48美元,在2小时内出现大量爆仓单.

1900/1/1 0:00:00
POS:独家 | 拿什么来保护我的通证?

“黑客”这个词,相信大家再熟悉不过了。自从互联网诞生以来,黑客就成了以高超手段盗取用户信息的代名词.

1900/1/1 0:00:00
RON:前脚 TronBANK 被盗,后脚 TronKDD 跑路,波场 DApp 安全如何保障?

本生态周排行榜跨ETH、EOS、TRON、IOST四条公链,从7日活跃用户、7日交易额、7日交易量三个维度呈现数据,并以用户量为核心维度进行排名.

1900/1/1 0:00:00