安全报告:2023 年 4 月至 6 月的热点事件与洞见

本文是 OpenZeppelin 发布的区块链安全报告,重点分析了 2023 年 4 月至 6 月期间发生的多个安全事件,包括 Silo Finance 的逻辑错误漏洞、Tornado Cash 的治理劫持、Yearn Finance 的漏洞利用以及 ENS 上的 DNSSEC 漏洞,旨在帮助区块链安全研究人员了解关键漏洞和风险。

通过揭示各种漏洞和风险,《OpenZeppelin 安全报告》旨在剖析一些关键事件,并为区块链安全研究人员总结经验教训。在本期中,我们将探讨 2023 年 4 月至 6 月期间从关键逻辑错误到治理攻击的漏洞利用。这是我们持续追踪、记录和分享新发现和最近发现的漏洞,以提升生态系统安全态势的一部分。 下载 PDF

Silo Finance 的逻辑错误漏洞

Silo Finance 披露了一个 bug,该 bug 面临一个关键的逻辑错误漏洞。如果成功利用此缺陷,恶意行为者可能会操纵协议内的利率。利用该漏洞,攻击者可以借入远超其抵押品价值的资金,从而威胁系统的稳定性。

Silo Finance 创建无需许可且风险隔离的借贷市场,该市场使用隔离池方法。这意味着每个代币资产都有自己的借贷市场,并与 ETH 和 XAI 配对。

该漏洞源于 Base Silo 合约,该合约负责协议的核心逻辑。该合约被 Silo 合约 继承,该合约充当贷款协议,允许用户通过其 deposit() 函数提交抵押资产代币。作为交换,合约会为存款人创建与其存款金额和份额总供应量成比例的代币。之后,合约会刷新 _assetStorage[_asset] 存储状态,以反映新添加的存款。

Frame 238096

将抵押品存入合约的用户可以使用 borrow() 函数借用其他资产。此函数首先计算借入资产的应计利率,然后验证当前合约中是否有足够的代币供用户借用。随后,它将代币转账到用户的帐户并查看贷款价值比。我们可以看到 Base Silo 合约被继承(liquidity() 函数)。

Frame 238118

本质上,攻击者能够操纵 ERC-20 资产的利用率,这些资产对合约的总存款为零(或只有一个代币的总存款为零的池)。攻击按如下方式进行:

  1. 存入少量总存款为 0 的资产(代币 A)。这将导致攻击者成为该特定资产的主要利益相关者,并使其 totalDeposits() 不为零。
  2. 向市场捐赠大量的代币 A,允许其他用户借入超过代币 A 的 totalDeposits() 的金额(总流动性将超过总存款)。
  3. 使用另一个地址存入资产(代币 B),并借用捐赠的代币 A。
  4. 如果在下一个区块中调用 accrueInterest,由于借入金额相对于低得多的 totalDeposits 而言很大,因此利息将被人为地抬高。
  5. 这将导致用户的初始存款具有人为的高价值,从而使他们能够借入远超其应得的金额。计算如下:

Frame 238119

这种情况得到了迅速而成功的处理。由于一位警惕的白帽黑客 (@kankodu) 和 Silo 团队的快速响应,没有用户资金丢失。最初的修复包括将资产存入一个或多个资产的总存款为 0 的市场,但该协议后来实施了永久性修复,以确保利用率永远不会超过 100%,并且最大复利利率不会超过 10%。然后通过形式化验证测试了这些修复。

务必始终监控变量和/或参数的统计异常值,因为这些值通常表明存在潜在的漏洞利用或市场操纵。虽然修补此问题是对该问题的快速预防性修复,但最终解决方案包括围绕某些值设置限制。因此,密切关注交易中的异常值至关重要。 来源:

Tornado Cash 的治理劫持

风险资金:2.75 亿美元

被盗资金金额:约 75 万美元

在一个相当令人震惊的事件中,Tornado Cash 的治理系统遭到劫持。攻击者巧妙地插入了一个特洛伊木马提案,该提案有效地将去中心化自治组织 (DAO) 的控制权转移到单个地址。这种入侵展示了 metamorphic 智能合约的强大功能,并突出了 DAO 治理模型中的潜在漏洞。

攻击涉及通过一项看似良性的提案,类似于之前通过的另一项提案。

但是,此提案包含一个额外的函数,该函数稍后将导致整个系统被挟持:

Frame 238120

提案合约最初是通过部署者合约推出的。然后,攻击者可以利用 CREATE 和 CREATE2 操作码的确定性部署性质,将新代码引入到已获得治理批准的地址中。新推出的恶意提案耗尽了治理的代币,并赋予利用方 120 万张选票(授予他们对 DAO 的控制权)。

出乎意料的是,攻击者后来决定将控制权还给 DAO。他们发布了一项提案 以将控制权交还。也许利用方对出售价值约 75 万美元的 TORN 更感兴趣,而不是真正将治理权长期挟持。

该事件深刻地提醒人们,需要对所有智能合约组件进行仔细而彻底的审计,尤其是那些与治理相关的组件。它强调了密切关注看似良性的提案中的某些函数的重要性,尤其是在将 selfdestruct() 与部署者合约结合使用时。

来源: https://rekt.news/tornado-gov-rekt/

Yearn Finance 漏洞利用

被盗资金:1100 万美元

2023 年 4 月 13 日,DeFi 协议 iEarn Finance(Yearn Finance 的前身)的已弃用版本遭受了一次闪电贷攻击,导致各种稳定币损失超过 1100 万美元。攻击者利用了 yUSDT 合约中的一个缺陷,该合约错误地依赖于 iUSDC 代币而不是 iUSDT 代币。在攻击者找到利用它的方法之前,这个 bug 已经休眠了一千多天。

在下面的调用流程中,我们可以看到利用方获得了 500 万 DAI、500 万 USDC 和 200 万 USDT 的闪电贷(第 2 行)。然后,他们将资金存入 yUSDT 合约(第 5、10 和 15 行)。

yUSDT 合约用于铸造 yUSDT 代币,该代币代表 Yearn Finance 中的 USDT 存款。在赎回 yUSDT 之后,攻击者从 Aave V1 金库中提取了所有资产。然后,他们铸造了 bZxUSDC(第 5492 行)并将其发送到 yUSDT 合约,这提高了每股价格。这触发了重新平衡(第 5612 行),导致 bZxUSDC 被赎回为 USDC,从而将每个 yUSDT 的价值降低到零。然后,他们将 1 卫的 USDT(第 5669 行)转移到 yUSDT 合约,使他们能够铸造非常大量的 yUSDT。

在通过 Curve 池(第 5691-5786 行)兑换这些铸造的代币以获取利润后,再偿还借入的闪电贷(第 6125-6130 行)。然后,攻击的收益被转移到攻击者的地址(第 6133-6143 行)。

截至撰写此博文时,似乎大多数资金都使用 Tornado Cash 从攻击者的 EOA 中提取的,大多数以 100 ETH 的增量提取。

这深刻地提醒人们,已经上线多年但未被利用的代码并不能确保协议或其用户的安全。持续的安全审计和监控解决方案是部署和维护代码库的关键。

来源: https://www.numencyber.com/yearn-finance-flash-loan-exploit/

如何在 ENS 上几乎接管任何 DNSSEC 名称

以太坊名称服务是一个构建在以太坊区块链上的去中心化域名系统。ENS 旨在为以太坊地址、智能合约和以太坊网络上的去中心化应用程序提供与 DNS 类似映射功能。

借助 ENS,用户可以注册和管理以 .eth 结尾的人工可读域名,这些域名可以与其以太坊地址或区块链上的其他资源相关联。这使得用户可以使用用户友好的名称更轻松地与去中心化服务交互、发送资金和访问去中心化应用程序。

ENS 的一个有趣功能是它允许用户集成 DNS 名称。ENS 的智能合约可以接收一组签名记录,验证它们,然后允许用户在 ENS 上声明 DNS 名称。但是,在 ENS 智能合约中发现了一个关键漏洞,该漏洞可能允许用户声明其他人的 DNS 名称。

要在 ENS 上声明 DNS 名称,用户必须调用 proveAndClaim() 函数:

Frame 238120 (1)

链接:https://github.com/ensdomains/ens-contracts/blob/v0.0.19/contracts/dnsregistrar/DNSRegistrar.sol

沿着函数调用链,我们可以看到调用了 _claim 函数,实际上执行了 DNS 名称的声明(并且逻辑上,也执行了它的验证)。

carbon-3- 1

_claim() 函数通过调用 getOwnerAddress() 函数来检查 DNS 所有者是否是在 ENS 上声明名称的人(第 158 行)。此验证过程通过检查 DNS 区域是否具有 TXT 记录来执行,该记录指示所有者想要授予对 ENS 记录控制权的以太坊地址。

在查看 getOwnerAddress() 函数时,有一个缓冲区应该包含通过查找记录找到的名称。但是,此缓冲区未被使用。这导致任何拥有合法 DNS 记录的人都能够声明任何 DNS 记录(声明的名称不一定需要与证明相关联的名称)。

Frame 238497

此 bug 在进入主网之前已得到修复,因此没有错误地分配 ENS 记录。有关此 bug 的发现和披露的更多信息,请参见 @tinchoabbte 的此 gist

来源: https://blog.theredguild.org/how-to-almost-take-over-any-dns-domain-on-ens/ 下载 PDF

保持最新

如果你对类似的 bug 分析和生态系统新闻感兴趣,请在 Twitter 上关注 OpenZeppelin

最新审计

从我们博客上发布的最新安全报告中学习:

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

0 条评论

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