CVE-2026-44166 实验与 writeup:利用未验证的 createData.email 对 PocketBase OAuth2 账户进行预劫持
启用 OAuth2 的 PocketBase 认证集合允许客户端在注册时传递 createData 对象。此对象中的电子邮件地址从未与 OAuth2 提供商验证的电子邮件进行核对。任何在已配置提供商上拥有账户的人都可以注册一条记录,该记录携带他人的电子邮件,并链接到自己的 OAuth2 身份。
若只配置了一个提供商,真实所有者将被锁定。若配置了两个或更多,所有者后续通过不同提供商登录,最终会与攻击者共享账户。
受影响版本:< 0.22.42 和 >= 0.30.0, < 0.37.4。修复版本:0.22.42 和 0.37.4。
安全公告:GHSA-pq7p-mc74-g65w。CWE-287。CVSS 4.0 6.1。
完整分析文章:WRITEUP.md
python fetch_binaries.py # 为你的操作系统下载有漏洞的 0.37.3 和已修复的 0.37.4
python poc.py # 对漏洞版本进行预声明和锁定
python verify_fix.py 0.37.4 # 在已修复版本上执行相同步骤,攻击者被驱逐
Python 3.8+,仅使用标准库。PoC 离线运行,针对捆绑的模拟 OAuth2 提供商,因此没有真实的 IdP 或网络目标。
漏洞版本 0.37.3:
[1] 攻击者令牌颁发给:[email protected] (verified=False)
[2] 受害者登录:HTTP 400 -- 认证失败。
[3] 攻击者重新认证:[email protected] -- 相同记录:True
已修复版本 0.37.4:
[1] 攻击者预声明:[email protected] verified=False id=...
[2] 受害者登录:成功 verified=True id=... => 受害者拥有账户
[3] 攻击者重新认证:[email protected] id=... same-as-victim=False
| 文件 | 用途 |
|---|---|
WRITEUP.md | 根因分析、两种攻击变体、修复措施、检测方法 |
fetch_binaries.py | 为你的操作系统/架构下载 0.37.3 / 0.37.4 二进制文件 |
mock_oauth2_server.py | 小型离线模拟 OAuth2 提供商(令牌 + 用户信息) |
poc.py | 针对漏洞版本的利用程序 |
verify_fix.py | 在任何版本上执行相同步骤并报告结果 |
仅用于教育和授权安全测试:您自己的实验室、CTF 和 HTB 环境、范围内的漏洞赏金目标。该实验室离线运行,绝不会触及您未自行运行的任何内容。