大规模披露Griefing漏洞

  • Dedaub
  • 发布于 2022-04-16 22:20
  • 阅读 10

本文讲述了Dedaub和SecuRing团队如何利用Dedaub Watchdog工具发现并大规模披露以太坊上的Griefing漏洞。该漏洞允许攻击者将受害者的资金转移到合约中,导致资金被锁定或难以取回。团队通过Etherscan聊天功能通知了564个受威胁的账户,并成功帮助其中一个持有大量资金的账户避免了损失。

YANNIS SMARAGDAKIS

大规模披露恶意破坏漏洞

本周,在 @drdr_zz 和 @wh01s7 的帮助下,我们处理了来自 SecuRing 的 Dedaub Watchdog 工具的积压警告,通知了大约 100 个易受攻击账户的持有者,其中约有 8000 万美元的资金暴露在外。(@_trvalentine 此前已经生成了概念验证代码,以证明攻击是有效的。)

这些警告涉及恶意破坏漏洞:攻击者可以将受害者的资金转移到合约,但这不会给攻击者带来任何直接利益,只会让受害者的生活更加艰难,甚至可能损失资金。

虽然这些漏洞本身在技术上没有太多新颖之处,但我们决定撰写这份报告,以描述这些事件以及通过 etherscan 聊天消息进行大规模披露的方法。

引言

Dedaub Watchdog 工具(建立在我们公开的 contract-library.com 基础设施之上)持续分析以太坊上所有已部署的合约。它实现了大约 80 种不同的分析,并将代码警告与链的当前状态相结合。(例如,余额、存储内容、授权。)它是我们发现漏洞的主要工具——在过去一年中,我们披露了几个具有重大影响的漏洞,总风险达数十亿美元,并获得了 9 个漏洞赏金,总计约 300 万美元。(DeFi SaverDinngo/FurucomboPrimitiveArmorVesperBT FinanceHarvestMultichain/AnyswapRari/Tribe DAO 的赏金。)

本报告中的恶意破坏漏洞略低于此标准:它们通常代表简单、直接的疏忽,这可能是致命的,但值得庆幸的是,攻击者无法通过利用它获得太多好处。这是一种我们可以默默报告并忘记的漏洞。

然而,在这种情况下,潜在受害者账户的数量开始增加。我们有一个包含 18 个易受攻击合约的列表,这些合约允许将受害者的资金 transferFrom(从任何受害者处)转移到不受信任的调用者,同时持有来自数百名受害者的高价值代币的授权。当我们实际运行查询以交叉引用易受攻击的合约与已批准它们并且在暴露的代币中持有余额的受害者时,我们震惊地发现有 564 个受威胁的账户,总风险资金为 8000 万美元,其中包括一个暴露了 7600 万美元的账户!

恶意破坏漏洞

有 2-3 种不同的易受攻击的代码模式,但主要的模式非常简单。它允许使用任何人都可以调用的函数将受害者的资金转移到桥合约。

恶意破坏漏洞

这有多严重取决于桥协议的具体情况。在最好的情况下,这只是混乱:需要人工参与,验证受害者的资金确实被无意中转移并且仍然在桥上,并授权一笔交易将资金返还给受害者。在最坏的情况下,资金将永远被卡住。此外,这种漏洞大大增加了恶意破坏的攻击面:桥合约本身可能存在漏洞。

负责任的披露

我们联系了具有易受攻击合约的主要桥协议,但该合约正在积极使用中。正确的做法是直接联系潜在的受害者,特别是那些当前面临风险的受害者(即,余额和对同一代币的授权的组合)。

我们面前有一份包含 564 个地址的列表。但我们不知道账户所有者的身份。

在这种情况下,最佳实践似乎是:

  • 检查该地址是否是 ENS 域的所有者,以及那里是否有联系方式。
  • 对于拥有大量资金的地址,直接与项目联系(即,具有易受攻击合约的协议),这些项目通常知道其最大客户/持有者的身份。
  • 使用 etherscan 聊天功能。

通知受害者时的另一个标准问题是,每个受害者在保护了自己的资金后,都可能成为潜在的攻击者。经过讨论,我们认为这种风险很小。我们通过从拥有最多资金的地址开始将其降至最低(从而降低了攻击者的潜在回报/满足感)。

计划如下:

  1. 手动验证并通过 ENS 或通过与项目团队的官方沟通渠道尝试确定拥有最多资金的地址的身份,他们在项目团队中拥有很大的份额。
  2. 使用 etherscan 聊天自动通知面临风险的持有者。

手动验证结果相对简单。受到 7600 万美元威胁的地址是 XCAD Network 项目中第三大持有者。@drdr_zz 通过官方渠道直接与 CEO 交谈,仅 45 分钟后,资金再次安全。

然而,仍然有很多地址的身份不明。即使使用 etherscan 聊天功能,单独写信给每个持有者也非常耗时。据我们所知,etherscan 聊天目前没有提供我们可以连接的简单 API。然而,经过一番研究,我们确定它通过 websockets 连接工作。

机制如下:

1. 钱包所有者将其钱包(例如,通过 Metamask)连接到聊天应用程序。
2. 应用程序向用户分配一个有效的会话 cookie 和一个临时Token来验证 WebSocket 连接。
3. 使用 cookie 打开 WebSocket 连接,并将Token发送到服务器。
4. 用户现在可以通过 WebSocket 发送聊天消息。

我们编写了一个脚本来自动化整个过程,并发送了 98 条消息,以通知暴露超过 1000 美元的用户:

发送的消息是:

Hello,

I’m a security researcher (from SecuRing, collaborating with Dedaub) and I’m writing to let you know that your account has exposed funds to contract ADDRESS, for token “TOKEN”.

Any attacker can call a function on this contract that will cause it to transferFrom your funds to the contract. The attacker does not stand to gain from this, so the risk is perhaps not critical.

However, it is a threat, and you may have significant trouble getting your funds back if it happens.

We strongly recommend removing approvals to contract ADDRESS for the “TOKEN” token. You can use the etherscan tool to do so, or any other trusted approval remover.

(This threat was automatically identified using Dedaub’s Watchdog analysis, but the threat was confirmed manually with a proof-of-concept implementation.)

Thank you.

你好,

我是一名安全研究员(来自 SecuRing,与 Dedaub 合作),我写信通知你,你的账户已将资金暴露给合约 ADDRESS,代币为“TOKEN”。

任何攻击者都可以调用此合约上的一个函数,该函数将导致它将你的资金 transferFrom 到该合约。攻击者无法从中获利,因此风险可能并不严重。

然而,这是一种威胁,如果发生这种情况,你可能很难找回你的资金。

我们强烈建议删除对合约 ADDRESS 的“TOKEN”代币的授权。你可以使用 etherscan 工具执行此操作,或任何其他受信任的授权删除工具。

(此威胁是使用 Dedaub 的 Watchdog 分析自动识别的,但该威胁已通过概念验证实现手动确认。)

谢谢。

半天后,我们开始收到“谢谢”消息。

经验教训

  • etherscan 聊天功能是直接联系未知账户持有者的绝佳工具。但响应时间可能不尽如人意,因为持有者需要在 etherscan 上轮询其账户页面,并且聊天功能尚未得到广泛的认识和使用。
  • 这种形式的代币授权可以说是比智能合约问题更多的 UI 问题,这就是为什么作为账户持有者,了解现有授权非常重要(就像在签署交易之前验证交易一样)。

很高兴 Dedaub 和 SecuRing 之间进行这次合作,希望我们能帮助改善以太坊的安全性。

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

0 条评论

请先 登录 后评论
Dedaub
Dedaub
Security audits, static analysis, realtime threat monitoring