Nym mixnet和授予合同安全审计
对Nym混合网和授予合同的安全审计
简介
2022年12月,Nym接受了[橡树安全](https://www.oaksecurity.io/)进行的独立安全审计。 a 总部设在德国的网络安全咨询公司,专门审计第三代区块链和去中心化的协议。 拥有宇宙、Terra、Polkadot和Flow等生态系统方面的广泛经验, 橡树安全的任务是评估Nym生态系统的两个关键组成部分:⑴ Nym mixnet和授予合同(见[完整报告](https://github.com/oak-security/audit-reports/blob/main/Nym/2023-03-27%20Audit%20Report%20-%20Nym%20Mixnet%20and%20Vesting%20Contracts%20v1.0.pdf))和⑵ Nym Wallet (见[完整报告](https://github.com/oak-security/audit-reports/blob/main/Nym/Audit%20Report%20-%20Nym%20Wallet.pdf))。 审计旨在评估这些组成部分的强度,查明潜在的弱点,并确保在制定守则方面遵循最佳做法。 为了更容易跟随的事情,我们已经对每个组件分解了调查结果。 您可在此处查看Nym钱包审计摘要此处。
Oak Security对Nym Mixnet及归属合约的审计摘要
在为期两周的时间里,审计工作涉及一个由4名专家组成的小组 Nym小组向橡树安全公司提供了全面访问项目的代码库、详细的项目规格和证明文件。 审计范围包括合同/混合网、合同/授予处置库以及这些合同对Nym mixnet和授予合同的相关进口。
橡树安全公司透彻审查了守则,将自动源码和依赖性分析与逐行人工检查结合起来,以发现安全方面的弱点。 评估代码质量,并评价遵守安全编码原则的情况。 这种综合办法包括深入分析种族状况脆弱性、流动性和外流问题等关键领域。 密钥管理做法、密码强度、数据泄漏风险、密码处理以及访问和授权控制。
审计的重点是确保协议的正确功能。 找出任何可利用的弱点或智能合同缺陷,并建议改进代码的安全性和可读性。
二. 调查结果概述
Nym mixnet和授予合同的特点是可读性很高,清晰度很高,测试范围很强,有助于其可靠性。 审计员在其评估中确定了19项审计结果。 包括9个安全薄弱环节——包括重大和主要严重问题——以及10个一般弱点,归类为次要或提供信息。
Nym小组迅速处理了所有关键和重大问题。 橡树安全核实并批准了我们的修复。
NYM-MIX-VEST-CONTRACT-1: 一个失败的纪元或间隔事件执行永久阻止史诗的进化(严格)
这次审计发现,在处理ProvidanceCurrentEpoch在合同/mixnet/src/interval/交易中的信息方面存在脆弱性。 一个序列循环处理所有直接在交易上下文中的待处理事件,这意味着单个失败事件可以还原整个交易。 有效地阻止时代的发展和间隔,并使协议陷入僵局。
为了解决这个问题,审计员建议在子消息中以回复策略包装事件执行。 这种做法将使系统能够在不恢复整个交易的情况下慷慨地处理故障。 然而,我们故意选择不采纳这项建议。 事件执行过程中的失败表明了可能损害奖励机制的重大逻辑缺陷。 更可取的做法是停止进行手工检查的教程提升,而不是冒险在腐败状态下运作。 相反,我们在 Nym API 中进行了强化监测,以发现并提醒我们发现失败的时代进度。 这种做法确保了这种失误的迅速标明,使得能够及时进行干预以解决问题。
NYM-MIX-VEST-CONTRACT-2:攻击者可以强迫无主混合节点加入一个家庭,而无需他们同意将大量的数据集合在同一层(严格)
“友爱”组织的信息中确定了易受伤害性,这种信息可以允许攻击者在未经家庭同意的情况下为家庭添加一个混合节点。 创建一个恶意家族,使用受害人混合节点的身份密钥,签名为私钥, 攻击者可以把混合节点困在家中。 这可能使攻击者能够将孤儿混合节点组合成一个单一家庭。 通过将节点集中在同一层并增加攻击者影响路由的机会来破坏网络。
为解决JoinFamilyOnBehalf消息中的漏洞,合约的签名机制已重新设计。 签名不是简单地签署混合节点的身份,而是更新了签名,列入了一个带有明确意图和独特无意的信息。 这种变化确保了签名不能被重新使用或重播。
NYM-MIX-VEST-CONTRACT-3:TrackUndelegation 消息处理中的无限迭代可能会使用户无法无授权,而这也会永久地抑制时代的进化(严格)
TrackUndelegation 消息的无限迭代可能会在处理许多代表团的帐户时造成气体耗竭,阻止用户不受委托。 这种失败也会使时代的发展停顿,使协议处于目前的状态。
为了解决这个问题,我们对每个帐户授予25个代表团的权力作出了限制。 这种解决办法的依据是当时授予权力的代表团数量最高。
更新:自2024年起,授予代表团的选项已完全禁用。
NYM-MIX-VEST-CONTRACT-4:攻击者可以前台运行 BondMixnodeOnBehalf 和 CreateFamilyOnBehalf 消息并修改他们的有效载荷(Critical)
这种脆弱性将使攻击者能够前方的 BondMixNodeOnBehalf 和 CreateFamilyOnBehalf 消息,提取签名并修改有效载荷。 在BondMixNodeOnBehalf案中,攻击者也可以将自己定性为代理人,对注册的保证金获得完全控制。
为了解决脆弱性问题,我们采取了双重解决办法。 首先,我们应用了NYM-MIX-VEST-CONTRACT-2中所述的签字创建更改,这增加了一个明确的意图和独特的阵线。 第二,我们将法定代理地址限制在授予帐户内。 确保攻击者不能将自己定性为代理人,并擅自控制注册债券。
更新:自2024年起,所有代理操作都被禁用,使攻击无法适用。
NYM-MIX-VEST-CONTRACT-5:签名可在“代表”交易中重置,以防用户(严格)
这种脆弱性使得签名能够在“代表”交易中重播,从而使攻击者能够冒用用户。 因为签名只包含原始数据,没有额外的元数据,如非或消息标识符, 攻击者可以将签名从一个信息重新用于另一个信息,以强行驱逐家庭成员。 此外,攻击者可以重新使用同一消息类型的签名,允许成员多次使用相同的签名重新加入家庭。
解决这一问题的办法反映了NYM-MIX-VEST-CONTRACT-4号文件中的办法。
NYM-MEX-VEST-CONTRACT-6:配对的钥匙生成(所有者、代理)可能导致碰撞(严格)
这种脆弱性将允许两个不同的地址对生成同一的 XOR 函数(所有者,代理),生成一个生成的XOR 函数。 可能导致密钥碰撞和数据覆盖。
在NYM-MIX-VEST-CONTRACT-4中采用的将法律代理仅限于授予股权合同地址的解决办法,也解决了这种脆弱性。 通过确保永远以恒定字符串进行XOR操作,这一变化有效地消除了碰撞的风险。
NYM-MEX-VEST-CONTRACT-7:如果在同一区块内处理了多个,Track_delegation 可以覆盖现有的代表团(严格)
如果多个代表团在同一个区块内进行碰撞,这个问题将使得关键碰撞得以发生。 这可能导致保留代表团的职能以推翻现有的代表团,导致丧失前一个代表团。
为了解决这个问题,我们改变了保存代表团职能的逻辑,先阅读现有的代表团数量,然后再保存新的代表团。 如果一个代表团已经存在相同的密钥,我们将检索目前的金额,添加新的代表团。 然后保存更新的总数,确保没有覆盖现有的授权。
NYM-MIX-VEST-CONTRACT-8: 如果保证书是由代理人(Major)“代表”创建的,保证书所有人就无法开展业务
如果保证书是代表所有人创建的,而目前的交易是由所有人而不是代理人发起的,那么发行这种保证书将防止保证书所有人在其保证书上进行任何业务。 由于代理人可能会受到损害或丢失,所有人没有办法改变它, 这可能导致业主失去对其保证金的控制。
我们并不认为这是一个问题,因为这是故意的行为。 当混合节点通过授予合同被抵押(或是委托)时, 预计此后与保证书或授权书的所有互动只能通过授予股权合同进行。
更新:截止2024年,将删除授予合同。
NYM-MIX-VEST-CONTRACT-9: LeaveFamily and LeaveFamilyOnBehal的消息执行如果大量混合节点是家庭成员可能会失败(Major)
这个问题将导致“LeaveFamily and LeaveFamiliyOnBehal”的信息由于气体枯竭而在MEMERS地图上重复大量家庭成员时失败。 这将防止混合节点离开家庭,有效地将他们锁在目前的家中。
解决方案: 解决方案涉及重写直接访问MMBERS地图的逻辑并验证混合节点的成员资格。 这种改变不再需要迭代,这可能导致气体外错误, 并确保家庭成员能够成功地离开家庭,即使家庭中有许多成员。
更新:截止2024年,节点家庭已被移除。
最后单词
我们要感谢橡胶安全小组在整个审计过程中所表现出的专门知识和奉献精神。 我们还赞赏在审计的规划和执行阶段所表现出的合作和专业精神。 我们对安全的持续承诺仍然是最高优先事项。 我们期待着继续与安全专家建立伙伴关系,以维护我们生态系统的最高标准。