慢雾:简析 MetaMask 钱包 demonic 漏洞_ACK:ION

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

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

漏洞分析

慢雾:Transit Swap事件中转移到Tornado Cash的资金超过600万美元:金色财经报道,慢雾 MistTrack 对 Transit Swap 事件资金转移进行跟进分析,以下将分析结论同步社区:

Hacker#1 攻击黑客(盗取最大资金黑客),获利金额:约 2410 万美元

1: 0x75F2...FFD46

2: 0xfa71...90fb

已归还超 1890 万美元的被盗资金;12,500 BNB 存款到 Tornado Cash;约 1400 万 MOONEY 代币和 67,709 DAI 代币转入 ShibaSwap: BONE Token 合约地址。

Hacker#2 套利机器人-1,获利金额:1,166,882.07 BUSD

0xcfb0...7ac7(BSC)

保留在获利地址中,未进一步转移。

Hacker#3 攻击模仿者-1,获利金额:356,690.71 USDT

0x87be...3c4c(BSC)

Hacker#4 套利机器人-2,获利金额:246,757.31 USDT

0x0000...4922(BSC)

已全部追回。

Hacker#5 套利机器人-3,获利金额:584,801.17 USDC

0xcc3d...ae7d(BSC)

USDC 全部转移至新地址 0x8960...8525,后无进一步转移。

Hacker#6 攻击模仿者-2,获利金额:2,348,967.9 USDT

0x6e60...c5ea(BSC)

Hacker#7 套利机器人-4,获利金额:5,974.52 UNI、1,667.36 MANA

0x6C6B...364e(ETH)

通过 Uniswap 兑换为 30.17 ETH,其中 0.71 支付给 Flashbots,剩余 ETH 未进一步转移。[2022/10/6 18:41:10]

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

慢雾:DEUS Finance 二次被黑简析:据慢雾区情报,DEUS Finance DAO在4月28日遭受闪电贷攻击,慢雾安全团队以简讯的形式将攻击原理分享如下:

1.攻击者在攻击之前先往DeiLenderSolidex抵押了SolidexsAMM-USDC/DEI的LP。

2.在几个小时后攻击者先从多个池子闪电贷借出143200000USDC。

3.随后攻击者使用借来的USDC在BaseV1Pair进行了swap操作,兑换出了9547716.9个的DEI,由于DeiLenderSolidex中的getOnChainPrice函数是直接获取DEI-USDC交易对的代币余额进行LP价格计算。因此在此次Swap操作中将拉高getOnChainPrice函数获取的LP价格。

4.在进行Swap操作后,攻击者在DeiLenderSolidex合约中通过borrow函数进行借贷,由于borrow函数中用isSolvent进行借贷检查,而在isSolvent是使用了getOnChainPrice函数参与检查。但在步骤3中getOnChainPrice的结果已经被拉高了。导致攻击者超额借出更多的DEI。

5.最后着攻击者在把用借贷出来DEI兑换成USDC归还从几个池子借出来的USDC,获利离场。

针对该事件,慢雾安全团队给出以下防范建议:本次攻击的原因主要在于使用了不安全的预言机来计算LP价格,慢雾安全团队建议可以参考Alpha Finance关于获取公平LP价格的方法。[2022/4/28 2:37:18]

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

慢雾:Titano Finance被黑因池子被设置成恶意PrizeStrategy合约造成后续利用:据慢雾区情报消息,2月14日,BSC链上的Titano Finance项目遭受攻击,损失约190万美元,最初获利地址为0xad9217e427ed9df8a89e582601a8614fd4f74563,目前被黑资金已被攻击者转移到其他23个钱包。该攻击主要由于owner角色可以任意设置setPrizeStrategy函数,导致了池子被设置成恶意的PrizeStrategy合约造成后续利用。[2022/2/14 9:51:14]

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

声音 | 慢雾:警惕“假充值”攻击:慢雾分析预警,如果数字货币交易所、钱包等平台在进行“EOS 充值交易确认是否成功”的判断存在缺陷,可能导致严重的“假充值”。攻击者可以在未损失任何 EOS 的前提下成功向这些平台充值 EOS,而且这些 EOS 可以进行正常交易。

慢雾安全团队已经确认真实攻击发生,但需要注意的是:EOS 这次假充值攻击和之前慢雾安全团队披露过的 USDT 假充值、以太坊代币假充值类似,更多责任应该属于平台方。由于这是一种新型攻击手法,且攻击已经在发生,相关平台方如果对自己的充值校验没有十足把握,应尽快暂停 EOS 充提,并对账自查。[2019/3/12]

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

为了解决问题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-7:135ms