OKX Pay,谷歌密码管理器,和被覆盖的Passkey
发表于:2025-05-01 |

OKX Pay,谷歌密码管理器,和被覆盖的Passkey

OKX Pay, Google Password Manager, and the overwritten Passkey

The thing

OKX最近推出了他们的Pay产品,强化社交和支付概念、弱化了区块链钱包概念,本质是”自托管“多签区块链钱包,OKX托管+用户Passkey各存有一半权限的私钥*。目前在推广期,给出了APY5%的存款年利率。

*存疑,推特有用户说OKX存的那一份私钥也是完整权限,如果是这样的话,本质是OKX+用户各拥有一份完整权限私钥。

The cause

第一次打开OKX Pay页面要求新建Passkey,安卓是默认保存到谷歌密码管理器。

在其它未登录谷歌账号(或已登录谷歌账号,但是长期未使用需要验证)的新设备上打开OKX Pay支付时会提示没有Passkey,这个时候可以选择”登录密码管理器“或”新建Passkey“。如果选择新建Passkey,并且登录了和先前设备同一个谷歌账号,则会导致谷歌密码管理器中的已有Passkey被覆盖为新的Passkey。因为本质是个多签钱包,所以新Passkey需要已有Passkey进行授权才能正常进行支付操作。bug就来了:已有的Passkey已经被新的Passkey覆盖了,没有已有的Passkey进行授权,新的Passkey就是个废物。

The bug

谷歌密码管理器会”覆盖“同一个user id的Passkey。

好消息是,这只是界面上的覆盖,先前的Passkey未被删除,仍然存在于谷歌密码管理器云服务里,但是无法在谷歌密码管理器界面、网页版中查看到,也无法在本地Passkey发现中调用。

OKX添加Passkey时,虽然不同的Passkey使用了不同的Username,但是使用了同一个user id,导致在同一个谷歌账号中添加多个Passkey会存在覆盖效果。

如图中所示,okx.com的三个Passkey user id均为b3365d…,导致了覆盖效果。

image-20250501163255633

The solution

需要一台已经root的安卓手机,登录同一个谷歌账号,打开一次OKXPay支付界面进行Passkey云同步。

利用代理软件禁用com.google.android.gms的网络防止云同步最新的Passkey数据,然后手动编辑(编辑前备份)

1
2
3
4
5
adb shell
su
sqlite3 /data/data/com.google.android.gms/databases/chromesync.data_store

delete from webauthn_credential_index where id="...";

谷歌云服务同步文件,将webauthn_credential_index中之后的Passkey条目删除,即可调用先前的Passkey。

(哪条Passkey是之后添加的?可以通过id字段join sync_entities表中value列进行查找。数据是Protobuf格式)

使用旧Passkey进行任意支付操作,会同时给最新的Passkey进行授权。之后恢复网络,会同步最新的Passkey数据消除本地编辑。

The result

覆盖添加Passkey的bug反馈给OKX了,也不知道之后会不会修。

另外,OKX宣传称有ZK Email技术可以找回Passkey,但是在我和客服的对话中藏着不给用。

下一篇:
CTF比赛中,一键将本地运行的EXP反弹到VPS端口