FAN:慢雾:简析 MetaMask 钱包 demonic 漏洞

使用过MetaMask版本低于10.11.3的用户,如在导入助记词时点击了ShowSecretRecoveryPhrase,那么助记词可能泄露了。

2022年6月16日,MetaMask官方公布白帽子发现的一个被称为demonicvulnerability的安全问题,漏洞影响的版本<10.11.3,由于MM的用户体量较大,且基于MM进行开发的钱包也比较多,所以这个漏洞的影响面挺大的,因此MM也慷慨支付了白帽子5万刀的赏金。当团队向我同步了这个漏洞后,我开始着手对这个漏洞进行分析和复现。

漏洞分析

慢雾:Grafana存在账户被接管和认证绕过漏洞:金色财经报道,据慢雾消息,Grafana发布严重安全提醒,其存在账户被接管和认证绕过漏洞(CVE-2023-3128),目前PoC在互联网上公开,已出现攻击案例。Grafana是一个跨平台、开源的数据可视化网络应用程序平台,用户配置连接的数据源之后,Grafana可以在网络浏览器里显示数据图表和警告。Grafana根据电子邮件的要求来验证Azure Active Directory账户。在Azure AD上,配置文件的电子邮件字段在Azure AD租户之间是不唯一的。当Azure AD OAuth与多租户Azure AD OAuth应用配置在一起时,这可能会使Grafana账户被接管和认证绕过。其中,Grafana>=6.7.0受到影响。加密货币行业有大量平台采用此方案用来监控服务器性能情况,请注意风险,并将Grafana升级到最新版本。[2023/6/25 21:58:31]

白帽子将这个漏洞命名为demonicvulnerability,具体的漏洞描述比较复杂,为了让大家更好的理解这个问题,我尽可能用简单的表述来说明这个问题。在使用MM浏览器扩展钱包导入助记词时,如果点击"ShowSecretRecoveryPhrase"按钮,浏览器会将输入的完整助记词明文缓存在本地磁盘,这是利用了浏览器本身的机制,即浏览器会将Tabs的页面中的Text文本从内存保存到本地,以便在使用浏览器的时候可以及时保存页面的状态,用于下次打开页面的时候恢复到之前的页面状态。

慢雾:警惕Web3钱包WalletConnect钓鱼风险:金色财经报道,慢雾安全团队发现 Web3 钱包上关于 WalletConnect 使用不当可能存在被钓鱼的安全风险问题。这个问题存在于使用移动端钱包 App 内置的 DApp Browser + WalletConnect 的场景下。

慢雾发现,部分 Web3 钱包在提供 WalletConnect 支持的时候,没有对 WalletConnect 的交易弹窗要在哪个区域弹出进行限制,因此会在钱包的任意界面弹出签名请求。[2023/4/17 14:08:53]

基于对这个漏洞的理解,我开始进行漏洞复现,由于MM仅对这个漏洞进行简要的描述并不公开漏洞细节,所以在复现的时候遇到了如下的问题:

慢雾:Ribbon Finance遭遇DNS攻击,某用户损失16.5 WBTC:6月24日消息,Ribbon Finance 发推表示遭遇 DNS 攻击,慢雾MistTrack通过链上分析发现攻击者与今天早前的Convex Finance 攻击者是同一个,地址 0xb73261481064f717a63e6f295d917c28385af9aa 是攻击者共用的用来调用恶意合约的钱包地址。同时分析发现,Ribbon Finance某用户在攻击中损失了 16.5 WBTC,具体交易为:https://etherscan.io/tx/0xd09057f1fdb3fa97d0ed7e8ebd8fd31dd9a0b5b61a29a22b46985d6217510850。[2022/6/24 1:29:35]

缓存被记录到磁盘中的文件路径未知

慢雾:Spartan Protocol被黑简析:据慢雾区情报,币安智能链项目 Spartan Protocol 被黑,损失金额约 3000 万美元,慢雾安全团队第一时间介入分析,并以简讯的形式分享给大家参考:

1. 攻击者通过闪电贷先从 PancakeSwap 中借出 WBNB;

2. 在 WBNB-SPT1 的池子中,先使用借来的一部分 WBNB 不断的通过 swap 兑换成 SPT1,导致兑换池中产生巨大滑点;

3. 攻击者将持有的 WBNB 与 SPT1 向 WBNB-SPT1 池子添加流动性获得 LP 凭证,但是在添加流动性的时候存在一个滑点修正机制,在添加流动性时将对池的滑点进行修正,但没有限制最高可修正的滑点大小,此时添加流动性,由于滑点修正机制,获得的 LP 数量并不是一个正常的值;

4. 随后继续进行 swap 操作将 WBNB 兑换成 SPT1,此时池子中的 WBNB 增多 SPT1 减少;

5. swap 之后攻击者将持有的 WBNB 和 SPT1 都转移给 WBNB-SPT1 池子,然后进行移除流动性操作;

6. 在移除流动性时会通过池子中实时的代币数量来计算用户的 LP 可获得多少对应的代币,由于步骤 5,此时会获得比添加流动性时更多的代币;

7. 在移除流动性之后会更新池子中的 baseAmount 与 tokenAmount,由于移除流动性时没有和添加流动性一样存在滑点修正机制,移除流动性后两种代币的数量和合约记录的代币数量会存在一定的差值;

8. 因此在与实际有差值的情况下还能再次添加流动性获得 LP,此后攻击者只要再次移除流动性就能再次获得对应的两种代币;

9. 之后攻击者只需再将 SPT1 代币兑换成 WBNB,最后即可获得更多的 WBNB。详情见原文链接。[2021/5/2 21:17:59]

缓存何时被记录到磁盘未知

为了解决问题1,我开始对浏览器的缓存目录结构进行分析和测试,发现在使用浏览器(chrome)的时候相关的Tabs缓存是记录到了如下的目录:

Tabs缓存路径:

/Users/$(whoami)/Library/ApplicationSupport/Google/Chrome/Default/Sessions/

然后继续解决问题2:Sessions目录会记录Tabs的缓存,为了找出缓存被记录的时间节点,我对导入助记词的整个流程进行了分解,然后在每一步操作之后去观察Sessions的数据变化。发现在如下这个页面输入助记词数据后,需要等待10-20s,然后关闭浏览器,明文的助记词信息就会被记录到Sessions缓存数据中。

分析结论

用户正常在使用MM的时候是将助记词相关的数据放入内存中进行存储,一般认为是相对较为安全的,但是由于demonicvulnerability这个漏洞导致助记词会被缓存到本地磁盘,因此就会有如下的新的利用场景:

明文的助记词数据缓存在本地磁盘,可以被其他应用读取,在PC电脑中很难保证其他应用程序不去读取Sessions缓存文件。

明文的助记词数据缓存在本地磁盘,如果磁盘未被加密,可以通过物理接触恢复助记词。比如在类似维修电脑等场景下,当他人对电脑进行物理接触时可以从硬盘中读取助记词数据。

作为普通用户,如果你使用过MetaMaskVersion<10.11.3,且在导入助记词的时候点击了ShowSecretRecoveryPhrase,那么你的助记词有可能泄露了,可以参考MetaMask的文章对磁盘进行加密并更换钱包迁移数字资产。

作为扩展钱包项目方,如果采用了在Tabs页面中以Text的方式输入助记词导入钱包,均受到demonicvulnerability漏洞的影响,可以参考MetaMaskVersion>=10.11.3的实现,为每个助记词定义单独的输入框,并且输入框的类型为Password。

原文标题:《MetaMask浏览器扩展钱包demonic漏洞分析》

撰文:Thinking@慢雾安全团队

来源:ForesightNews

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

金星链

[0:0ms0-1:327ms