负责任的漏洞披露 - Nexus Mutual

  • roxdanila
  • 发布于 2020-02-26 20:57
  • 阅读 25

本文详细介绍了Nexus Mutual在过去一周收到的两个安全漏洞报告,以及团队如何迅速响应并实施补救措施。通过对治理和资金管理中的潜在问题进行深入分析,文章强调了安全对其协议的重要性,并总结了从这些漏洞中吸取的教训,提出了改进和未来计划。

在过去一周,我们收到了两份负责任的漏洞披露。 它们都没有被利用,也没有对互助资金造成损害。 本文详细介绍了这两份披露的内容,我们从中学到了什么,以及我们如何将这些经验融入到我们的实践中。

安全性是Nexus Mutual所做工作的关键方面。它是我们产品的核心,如果互助组织想要在现在及未来取得成功,安全性绝对是必不可少的。我们始终会将我们的协议安全和会员资金的安全置于其他任何事情之上。我们鼓励每个人仔细阅读此披露,以便了解发生了什么,我们学到了什么,并希望能为处理类似问题的其他团队提供见解。

在2月18日,星期二晚上,我们收到了一份安全研究员Mudit Gupta关于治理方面潜在问题的报告。经过仔细分析,我们确认该问题确实存在,并影响了顾问委员会和所有者;无意中给予了他们额外的权限。

在Nexus Mutual,所有治理行动均需经过会员投票、顾问委员会投票或所有者投票。提案可以由任何一种会员类型提出。然而,会员提出的提案必须经过顾问委员会的白名单审核。每个治理提案都与一个类别相关,定义了在投票结束时需要执行的解决方案。

根本的漏洞是提案类别的解决方案未得到验证。因此,顾问委员会的成员可以将特定类别的提案列入白名单,而实际上执行的内容却可能是其他东西。这可能意味着会员正在投票某个升级,但实际上可能是在不知情的情况下投票某些恶意内容。

提出的解决方案如下:

  1. 通过增加缺失的验证直接解决漏洞。这将确保提案的行为根据提案的类别进行适当限制。
  2. 针对恶意提案增加一个通用保护措施。这包括对所有治理行动设定24小时的缓冲时间,并允许顾问委员会成员在这个缓冲时间内取消潜在恶意的提案。
  3. 在预防措施上,我们决定,如果某个会员意外创建了一个需经过会员投票的提案,我们将启动紧急暂停。

我们在短时间内开始实施商定的解决方案,同时继续审查该漏洞可能产生的其他影响。

在周五,经过进一步的调查,我们发现某些类别的提案无法通过紧急暂停进行中止。为了防止此类滥用并在短期内减轻治理相关问题,我们采取了以下措施:

  • 强制要求顾问委员会成员对白所有治理提案进行审核,防止会员首先提出恶意提案。
  • 更新治理设置,以确保紧急暂停类别无法由任何单一顾问委员会成员或所有者单方面通过。有了这个设置,没有任何类别提案可以单方面通过。
  • 确保所有顾问委员会成员使用硬件钱包,从而使利用该漏洞发动攻击变得更加困难。

虽然没有迹象表明任何委员会成员受到损害,但在全面升级的解决方案到位之前,我们实际上假设以下内容:

  • 攻击者需要至少妥协三名顾问委员会成员才能通过一项恶意提案,需经过顾问委员会投票。
  • 攻击者需要妥协一名顾问委员会成员并操控会员投票才能通过一项需经过会员投票的恶意提案。

为了进一步透明,顾问委员会成员享有以下权利:

  • 任何顾问委员会成员都可以对提案进行分类(白名单)。
  • 至少需要三名顾问委员会成员设定提案的默认结果。
  • 至少需要三名顾问委员会成员更改提案的类别设置。
  • 至少需要三名顾问委员会成员启动紧急暂停。
  • 至少需要三名顾问委员会成员更改任何中心化组件(如报价引擎、KYC、资本模型)或外部馈送地址。

作为背景,所有者角色最初是为了在需要时更新中心化组件的地址(如报价引擎和KYC),但也包括更新货币馈送地址和交易,我们预计可能需要快速更改。所有者角色仍在技术上存在,但实际上已经与顾问委员会角色合并,因为它在所有者权力转移至顾问委员会投票后,现已拥有相同的权限。

我们承认,委员会内部存在很高的信任度,但值得一提的是,还有额外的法律保护层,所有顾问委员会成员对互助和其成员都有特定义务。

永久修复当前处于最后阶段,并将在几天内实施。在完成之前,我们有信心,针对该披露采取的保守治理设置是稳健且足以保护免受任何恶意提案影响的。

在2月20日,星期四早上,就在我们的社区通话前,我们又收到了一份来自安全研究员samczsun的报告,详细说明了一个可能使互助的部分资金面临风险的漏洞。我们随即确认了该漏洞。在收到报告后的4小时内,我们终止了系统与Uniswap的交互,这意味着该漏洞无法被利用。

互助的资金目前以DAI和ETH的方式持有。每当接受一项索赔时,互助必须确保在相应的货币中有足够的资金可供支付给我们的成员。如果支付金额超过某个阈值,互助将分几批以时间间隔交换所需金额。互助依赖Oraclize通过Uniswap触发再平衡。

使攻击成为可能的有两个漏洞:

  • 处理Oraclize回调的函数未受保护——允许任何会员,而不仅仅是Oraclize来调用它。最开始是这样设计的,以便在Oraclize失败时,可以调用函数。然而,这是一个不良的架构决策。
  • 假定该函数每个查询ID只能被Oraclize或会员(在Oraclize失败后调用)调用一次,因此缺乏重放保护。

我们确实承认,已有人发出警告,指出以这种方式使用Uniswap是不安全的,并且众所周知,这种攻击对其有易受攻击性。 bZx黑客攻击本应是对我们的重大警告,但我们当时忙于使我们的产品第一次真正测试成功支付索赔。虽然我们本应更早做到这一点,但我们现在正在逐步摆脱这一实现。这让我们意识到需要审核所有第三方集成,并制定应急计划以应对其失败。在即将到来的几周中,会对此进行文档记录,并与社区分享。

对互助而言,确保在某种货币中拥有足够的储备以履行所有接受的索赔至关重要。在短期内,如果需要支付DAI的索赔,我们将提出一项治理提案,将所需的ETH转移到顾问委员会的多重签名地址,兑换成DAI,并支付索赔。在长期方面,我们希望与抗操纵的去中心化交易所(dex)进行集成,目前正在评估各种选项。

披露会得到补偿吗?

Mudit Gupta将获得2000美元的奖励,作为他们负责任披露的奖励。根据威胁矩阵,我们将其分类为中等严重性问题,因其高影响力和低执行可能性。

Samczsun将获得5000美元的奖励,作为他们负责任披露的奖励。根据威胁矩阵,我们将其分类为高严重性问题,因其高影响力和中等执行可能性。

此外,我们正在推出自己的漏洞奖励计划。更多详细信息将稍后公布。

我们的代码经过审核吗?

我们的代码在2019年4月被Solidified团队审核。 我们在代码更新方面非常保守,自那时以来仅进行了三次小幅升级:

  1. 动态资本变更,增加了一个附加参数到最低资本金额。

在此变更之前,最低资本金额为7000 ETH。

变更后的最低资本金额为7000 ETH加上一个可变的最低资本,每天在MCR%超过130%时增加。

  1. 允许会员切换他们的地址。
  2. 替换MakerDAO价格馈送为Chainlink的ETH-DAI价格。

在披露之前,我们已经计划于本月底开始进行新的全面审核,以整合合并抵押升级。该过程将很快进行。

为什么没有启动紧急暂停?

尽管我们有启动紧急暂停的选项,但我们已经减轻了所有已知攻击路径。启动紧急暂停还将给我们的会员带来其他困难,比如延迟潜在的索赔支付和会员资金在暂停期间被锁定。我们正在进行需要合约升级和进一步安全审查的全面修复工作。

学到的经验教训

  • 为了成功进行负责任的披露,团队必须在任何时间可联系。我们已更新了我们的安全联系信息,将在报告任何情况时24/7通知我们。
  • 漏洞奖励计划和负责任的披露政策是鼓励适当地报告问题的良好做法,而不是剥削。尽管我们团队的资金有限,但我们对此非常重视,并已经决定推出自己的漏洞奖励计划。关于这一点的细节将稍后公布。
  • 拥有安全响应程序对于使我们能够迅速有效地应对此类事件至关重要。我们的政策是制定一个所有团队成员都熟悉的明确应急计划。我们将确保缓解调查和报告确认将并行启动,且每项都充分且独立得到资源支持。
  • 代码审查和审计不会发现所有漏洞。你永远无法对你的智能合约函数进行足够的测试。此外,DeFi应用程序易受各种经济攻击的影响。我们正将由@sambatcha开发的这一宝贵的威胁知识库纳入我们的开发实践,并希望扩展我们团队的安全专长。 如果你是一名对DeFi和安全充满热情的Solidity开发者,请与我们联系!

我们要再次感谢Samczsun和Mudit Gupta两位研究员的披露。整个以太坊生态系统都从他们的工作中受益,希望我们都能鼓励他们这样的工作,越多越安全,用户的资金也就越安全。同时也要感谢整个Nexus团队在过去几天的辛勤工作。我们非常重视这些披露,在此过程中学到了很多,并将继续关注和改善所有与安全相关的事务。

  • 原文链接: medium.com/nexus-mutual/...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
roxdanila
roxdanila
江湖只有他的大名,没有他的介绍。