Alardiians/pocketbase-CVE-2026-44166
GitHub: Alardiians/pocketbase-CVE-2026-44166
一个针对 PocketBase OAuth2 账户预劫持漏洞(CVE-2026-44166)的离线安全实验室,包含漏洞分析文档、PoC 脚本和修复验证工具。
Stars: 0 | Forks: 1
# CVE-2026-44166:PocketBase OAuth2 账户预劫持
启用了 OAuth2 的 PocketBase auth collection 允许客户端在注册时传递一个 `createData` 对象。`createData` 内部的 email 从未与 OAuth2 提供商验证的 email 进行核对。在已配置的提供商上拥有账户的任何人,都可以注册一条包含他人 email 的记录,并将其链接到自己的 OAuth2 身份。
如果只配置了一个提供商,真正的所有者将被锁定。如果配置了两个或更多,所有者稍后通过不同的提供商登录时,最终会与攻击者共享该账户。
受影响版本:`< 0.22.42` 和 `>= 0.30.0, < 0.37.4`。已在 `0.22.42` 和 `0.37.4` 中修复。
安全公告:[GHSA-pq7p-mc74-g65w](https://github.com/pocketbase/pocketbase/security/advisories/GHSA-pq7p-mc74-g65w)。CWE-287。CVSS 4.0 6.1。
完整分析:[WRITEUP.md](WRITEUP.md)
## 快速开始
```
python fetch_binaries.py # pulls vulnerable 0.37.3 + patched 0.37.4 for your OS
python poc.py # pre-claim and lockout against the vulnerable build
python verify_fix.py 0.37.4 # same steps on the patched build, attacker gets evicted
```
Python 3.8+,仅使用标准库。该 PoC 在本地离线针对内置的 mock OAuth2 提供商运行,因此没有真实的 IdP 或网络目标。
### 预期输出
存在漏洞的 `0.37.3`:
```
[1] Attacker token issued for: victim@company.com (verified=False)
[2] Victim login: HTTP 400 -- Failed to authenticate.
[3] Attacker re-auth: victim@company.com -- same record: True
```
已修复的 `0.37.4`:
```
[1] Attacker pre-claims: email=victim@company.com verified=False id=...
[2] Victim login: SUCCESS verified=True id=... => victim owns the account
[3] Attacker re-auth: email=attacker@evil.com id=... same-as-victim=False
```
## 文件
| 文件 | 用途 |
|---|---|
| [`WRITEUP.md`](WRITEUP.md) | 根本原因分析、两种攻击变体、修复方案、检测方法 |
| `fetch_binaries.py` | 下载适用于您的 OS/arch 的 0.37.3 / 0.37.4 二进制文件 |
| `mock_oauth2_server.py` | 小型离线 mock OAuth2 提供商(包含 token 和 userinfo) |
| `poc.py` | 针对漏洞构建版本的 exploit |
| `verify_fix.py` | 在任意构建版本上执行相同步骤并报告结果 |
## 仅限授权使用
仅用于教育和授权的安全测试:您自己的 lab、CTF 和 HTB 靶机、范围内的漏洞赏金目标。该 lab 完全离线,绝不会触及任何您未亲自运行的内容。
标签:OAuth2, Python, 无后门, 漏洞分析, 漏洞复现, 路径探测, 逆向工具