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.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 团队我们的披露计划。
此次漏洞的根本原因在于助记词的存储和访问机制设计存在缺陷。助记词未经过有效的应用层加密,并且恢复页面的触发条件不合理,使得攻击者在具备设备物理访问权限的情况下,能够轻松绕过钱包的身份验证机制,直接获取钱包中的助记词。
目前,该漏洞仍存在于 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
【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。