查看原文
其他

BitsLab 旗下 ScaleBit 安全团队发现一个可转走 Uniswap Wallet 上所有资产的 0 day 漏洞

ScaleBit ScaleBit
2025-01-10

2024年10月,BitsLab 旗下 ScaleBit 安全团队在 Uniswap iOS 钱包中发现了一个漏洞,命名为 “助记词未授权访问”(Unauthorized Access to Mnemonic Phrases)。该漏洞允许拥有设备物理访问权限的攻击者绕过钱包的身份验证机制,直接访问存储在设备中的助记词。


这意味着任何能够访问解锁设备的人,都能够在3分钟内获取到钱包的助记词。而在日常生活场景中,短暂借用他人手机是一个并不罕见的情况,尤其是在情侣和朋友之间。但在这一漏洞的影响下,这种看似无害的借用行为却可能直接导致钱包助记词的泄漏。

1. 背景介绍

助记词是区块链领域用于访问和管理链上资产的核心凭据,其泄露可能直接导致用户资产丢失。此次漏洞的发现揭示了部分钱包在用户身份验证流程和密钥存储机制中存在安全薄弱环节。


值得注意的是,该漏洞目前仍存在于 Uniswap Wallet 在 App Store 发布的最新版本(Version 1.42)中。我们建议所有使用 Uniswap Wallet 的用户提高警惕,避免将设备借用给他人,以免资产安全受到威胁。同时,用户应密切关注 Uniswap Wallet 的版本更新动态,及时更新修复版本。


我们深刻认识到这一问题可能会对用户资产造成安全隐患,从去年十月开始我们多次提醒 Uniswap 项目方及时修复,但是未受到应有重视。因此,我们选择公开这一问题的目的是引起广大用户和开发者的重视,提高用户的安全防范意识。我们坚决反对任何形式的恶意利用行为,并始终致力于通过专业的安全审计,为区块链生态系统的健康发展保驾护航。


2. 漏洞分析

2.1 在同类产品 Metamask、Unisat 等钱包的密钥存储方案中,通常会使用 AES-256-CBC 等对称加密算法对助记词进行加密存储。但在 Uniswap Wallet 的鉴权流程中,可能为了提升用户体验,仅提供了 FaceID 验证,用户进入钱包,发起交易或查看助记词前需要通过 FaceID 验证,并不会要求用户提供密码。这意味着用户的助记词并未被加密存储,或仅使用固定密钥加密。通过审查源码,确认在存储助记词的过程中,并没有实施有效加密。


https://github.com/Uniswap/interface/blob/a1f64eb8de1f43673917fdb599f99158aa90ceb4/apps/mobile/ios/Uniswap/RNEthersRs/RNEthersRS.swift#L119-L129


在该实现中,助记词通过 keychain.set 方法存储在 Keychain 中,但未使用任何额外的加密措施。虽然 iOS 的 Keychain 提供了一些底层加密存储和访问控制机制(例如 accessibleWhenUnlockedThisDeviceOnly), 但这些保护措施主要依赖系统级安全功能,而非应用层加密,不足以保障助记词的安全。

2.2 当用户直接卸载钱包应用时,存储在设备上的助记词不会被删除也并未被加密,但钱包的 FaceID 校验开关会被重置。

2.3 Uniswap Wallet 支持将助记词加密后上传到 iCloud,并支持从 iCloud 恢复助记词。同时,应用提供了一个恢复页面。当应用处于恢复模式时,会检索并显示需要恢复的助记词列表。


https://github.com/Uniswap/interface/blob/f1dfab33d1e13f0b2c7790516b03620d703ddea5/apps/mobile/src/screens/AppLoadingScreen.tsx#L206


然而,恢复模式的触发条件不仅限于从 iCloud 恢复助记词。当本地存储的助记词数量大于 1 时,也会触发恢复页面的显示。在这种情况下,应用可能意外暴露多个未加密的助记词。


这一设计为攻击者提供了便利。但即使没有恢复模式,助记词未加密存储这一核心问题仍然存在。攻击者可能通过其他手段直接提取设备上存储的未加密助记词,只不过这些方式通常需要更高的利用条件,例如对设备进行越狱以获取对系统文件的完全访问权限,或者侧载安装经过修改的应用程序。因此,助记词的未加密存储会成为潜在攻击的主要切入点。确保助记词的本地存储经过强加密保护,是防范敏感信息泄露的关键。


3. PoC:

3.1 安装uniswap wallet,创建钱包,并打开所有权限验证开关。

记录钱包助记词:


打开权限验证开关:

3.2 卸载,重新安装uniswap wallet,并再创建一个新的钱包。

3.3 再次卸载并重新安装uniswap wallet。


此时,助记词数量满足 OnDeviceRecovery 页面触发条件,在设备进入 Recovery 模式并显示 Recovery 页面后,可以访问硬盘中的所有未加密助记词。这暴露了用户助记词,并且表明 Uniswap Wallet 在处理助记词存储和恢复机制方面存在设计缺陷。

3.4 校验其中的一个助记词,和我们第一次创建钱包的助记词是一致的。

4.TimeLine

漏洞于2024年10月21日通过Cantina提交。2024年11月28日,项目方表示由于利用漏洞需要物理访问解锁的设备,Likelihood 可能会下调,但其影响仍然很高,计划确认问题并提出解决方案。2024年12月5日,项目方进一步回复说这个是已知漏洞,并拒绝提供任何奖励。


时间线如下:

2024年10月21日:通过Cantina提交漏洞。

2024年11月28日:项目方承认影响,并计划提出解决方案。

2024年12月5日:项目方称该漏洞是已知漏洞,并拒绝提供漏洞奖励。

我们在 2024年12月18号 和 2025年1月2号,多次提醒 Uniswap团队及时修复此问题或者向用户披露该问题,但并未获得回复。


我们始终相信,用户有权知晓涉及其资产面临的潜在安全风险,考虑到该漏洞迟迟未被修复且用户并不知情,我们选择了公开该漏洞,并已在一周前告知了Uniswap 团队我们的披露计划。


5. 总结

此次漏洞的根本原因在于助记词的存储和访问机制设计存在缺陷。助记词未经过有效的应用层加密,并且恢复页面的触发条件不合理,使得攻击者在具备设备物理访问权限的情况下,能够轻松绕过钱包的身份验证机制,直接获取钱包中的助记词。

目前,该漏洞仍存在于 Uniswap Wallet 最新版本 (Version 1.42) 中,为所有使用该钱包的用户带来了潜在风险。因此,用户在使用过程中需格外注意设备的物理安全,避免泄露解锁密码或将设备借给他人。

这也提醒我们,在设计钱包应用时,需要将用户资产的安全性作为首要考量。助记词作为访问和管理链上资产的关键凭据,其安全性至关重要。建议开发者采用应用层强加密方式保障助记词的安全,例如使用 AES-256-CBC 对助记词进行加密存储,并结合用户密码通过 PBKDF2 或 Argon2 派生加密密钥。

同时,普通用户也应提高安全意识,妥善保管助记词,优先选择经过安全审计的钱包应用,确保其具备强加密保护和完善的安全机制,尽量避免使用安全性未知或未经验证的钱包来管理资产。

我们希望通过此次漏洞的披露,引起开发者与用户对钱包安全性的重视。只有开发者加强安全设计,用户提升安全意识,安全团队不断贡献技术力量,三方协同努力,才能共同构建一个更加安全、可靠的区块链生态系统。



关于ScaleBit

ScaleBit,BitsLab 旗下安全子品牌,是一个为 Web3 Mass Adoption 提供安全解决方案的区块链安全团队。凭借在区块链跨链和零知识证明等扩展技术方面的专业能力,我们主要为 ZKP、Bitcoin Layer 2 和跨链应用提供细致和尖端的安全审计。


ScaleBit 团队由在学术界和企业界都有丰富经验的安全专家组成,致力于为可扩展的区块链生态系统的大规模应用提供安全保障。


https://www.scalebit.xyz/

https://twitter.com/scalebit_


继续滑动看下一个
ScaleBit
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存