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, 无后门, 漏洞分析, 漏洞复现, 路径探测, 逆向工具