【15万$】通过阅读文档发现Evmos中的高危漏洞

admin 2025年2月12日15:17:49评论8 views字数 2499阅读8分19秒阅读模式

 

作为 Web3 安全研究员的生活通常涉及深入研究难以掌握的技术主题。因此,我们有时会认为关键漏洞应该是复杂且难以发现的,但实际上,情况可能恰恰相反。一些最赚钱的漏洞通常非常简单,只需稍加研究就能迅速发现。
这正是我在 Immunefi[1] 的 Evmos 漏洞赏金计划中遇到的情况。简单来说,我通过阅读 Evmos 所基于的 Cosmos 文档,发现了一个关键漏洞,该漏洞可以导致 Evmos 区块链及其上所有 dApp 停止运行。希望这个案例能向其他安全研究员展示,虽然深入理解协议对于发现复杂漏洞至关重要,但也不要忽视那些“低垂的果实”(容易被忽视的简单漏洞)。

Evmos 和 Cosmos 区块链

Evmos 区块链是基于 Cosmos 模块化区块链框架构建的,该框架允许用户轻松搭建特定于应用的区块链。Cosmos 采用 Golang 编写,这对于习惯 Solidity 语言的安全研究员来说可能是完全不同的体验。不过,经过一两周的学习和实践,掌握 Cosmos 还是相对容易的。
了解了这些背景后,让我们看看我是如何仅通过阅读 Cosmos 文档就发现 Evmos 的关键漏洞的。

Cosmos 文档

Cosmos 框架提供了详细的文档[2],帮助开发者快速上手。作为一名合格的 Web3 安全研究员,我的第一步就是审查 Cosmos 文档,因为它是 Evmos 的基础。通过学习文档,我开始了解 Cosmos 模块系统,它提供了区块链的基本功能。例如,bank 模块具备内置的账户间资金转移功能。
在深入研究 bank 模块时,我发现了一个有趣的概念:“模块账户(module accounts)”。这些账户执行与模块相关的特定任务,但通常不应该接收资金。官方文档[3] 对此进行了详细解释:
x/bank 模块接受一个地址映射,这些地址被视为黑名单,禁止直接接收资金。
通常,这些地址是模块账户。如果这些地址收到超出状态机规则的资金,可能会破坏区块链的不变量,并导致网络停止运行。
读到这里,一个优秀的安全研究员可能会想到:“他们直接告诉了我们如何让 Cosmos 区块链崩溃。” 那么……我们来试试看吧。

漏洞分析

我们的目标是向一个不应接收资金的模块账户转账,以破坏区块链的不变量,从而导致整个 Evmos 区块链停止运行。测试该漏洞的步骤如下:
1.克隆 Evmos 区块链代码的 GitHub 仓库。
2.在 Cosmos 区块链中,通常需要执行一系列步骤来正确启动区块链。这些步骤大致相同,包括:
-初始化区块链-添加有资金的创世账户-生成创世交易-收集创世交易-启动区块链
这些命令通常如下所示:
evmosd init evmos -oevmosd add-genesis-account bob 100000000000stake,100000000000aevmosevmosd gentx bob 70000000stake--chain-id evmosevmosd collect-gentxsevmosd start
幸运的是,Evmos 已经提供了一个脚本来自动执行这些命令,因此我只需要使用特定参数运行 evmosd start 命令,即可启动区块链并生成区块。
evmosd start --inv-check-period 5--pruning=nothing $TRACE --log_level $LOGLEVEL --minimum-gas-prices=0.0001aevmos--json-rpc.api eth,txpool,personal,net,debug,web3.
3. 发送资金至分发模块账户
在区块链运行时,打开另一个终端,并执行以下命令,将资金发送到 distribution(分发)模块账户。在安全的 Cosmos 区块链中,这种操作本应被禁止。
所有的模块账户地址可以通过在另一个终端运行以下命令查看:
evmosd query auth accounts
要获取 mykey 账户(区块链初始化时默认的账户),可以运行以下命令:
evmosd keys list
运行后,你会看到 mykey 账户地址,它的前缀是 evmos。然后,使用以下命令向 distribution 模块账户 发送资金(请替换 <mykey 地址> 和 <distribution 账户地址>)。
evmosd tx bank send <mykey 地址><distribution 账户地址>100aevmos--gas-prices 20aevmos
4. 触发漏洞,导致 Evmos 区块链崩溃
执行上述命令后,我成功地向 distribution 模块账户 发送了资金,导致了以下错误:
ERR CONSENSUS FAILURE!!! err="invariant broken: distribution"
至此,区块链 不再生成任何新区块,整个链完全停止运行,从而导致 Evmos 区块链及其上的所有 dApp 崩溃
当然,这个漏洞已经被 Evmos 团队修复。
【15万$】通过阅读文档发现Evmos中的高危漏洞

img

总结

这个相对简单的漏洞最终为我带来了 $150,000 的漏洞赏金,属于关键级别(critical)的发现。这个漏洞让我作为安全研究人员学到了几个重要的经验:
首先,最明显的一点是——始终要彻底阅读你正在研究的项目文档。 其次,一个更深刻的体会是——有时最关键的漏洞可能极其简单。 第三,我们不必人为地让漏洞挖掘变得更困难,有时候最简单的漏洞往往价值最高。 最后,在寻找复杂漏洞的过程中,我们绝不能忽视那些“低垂的果实”(容易发现的漏洞)

References

[1] Immunefi: https://immunefi.com/
[2] 文档: https://docs.cosmos.network/v0.46/intro/overview.html
[3] 官方文档: https://docs.cosmos.network/v0.46/modules/bank/02_keepers.html#common-types

声明:⽂中所涉及的技术、思路和⼯具仅供以安全为⽬的的学习交流使⽤,任何⼈不得将其⽤于⾮法⽤途以及盈利等⽬的,否则后果⾃⾏承担。

原文始发于微信公众号(白帽子左一):【15万$】通过阅读文档发现Evmos中的高危漏洞

 

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年2月12日15:17:49
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【15万$】通过阅读文档发现Evmos中的高危漏洞https://cn-sec.com/archives/3732006.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息