一个你女朋友可以把你 Uniswap 钱包资产全部转走的 0 day 漏洞
2025-01-10 11:01
MoveBit Blog
2025-01-10 11:01
订阅此专栏
收藏此文章
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 派生加密密钥。

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

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


关于 MoveBit




MoveBit (莫比安全),BitsLab 旗下子品牌, 是一家专注于 Move 生态的区块链安全公司,通过率先使用形式化验证使 Move 生态成为最安全的 Web3 生态系统。MoveBit 已经陆续与全球多家知名项目合作,并为合作伙伴提供了全方位的安全审计服务。MoveBit 团队由学术界安全大牛和企业界安全领军人物组成,具有 10 年的安全经验,在 NDSS、CCS 等顶级国际安全学术会议上发表安全研究成果。并且他们是 Move 生态最早期的贡献者,与 Move 开发者共同制定安全 Move 应用的标准。

END




【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。

MoveBit Blog
数据请求中
查看更多

推荐专栏

数据请求中
在 App 打开