基于 Docker 的实验环境,复现 CVE-2024-31218,即 Webhood 中未认证的 PocketBase 管理员创建漏洞,包含 PoC、检测和修复验证。
本项目是一个受控的安全研究与漏洞复现实验环境,针对 CVE-2024-31218,这是一个影响 Webhood 0.9.1 之前版本的关键身份验证漏洞。
该漏洞与在不存在管理员账户时未经身份验证创建 PocketBase 管理员账户有关。能够访问受影响 API 的攻击者可能无需事先身份验证即可创建管理账户。
本实验的目标是:
安全提示: 本项目仅适用于隔离的本地实验环境。易受攻击的应用程序绝不能暴露在公共互联网上,也不得在未经授权的情况下用于攻击系统。
| 字段 | 详情 |
|---|
| CVE | CVE-2024-31218 |
| 项目 | Webhood |
| 受影响版本 | Webhood <= 0.9.0 |
| 修复版本 | Webhood 0.9.1 |
| 严重性 | 严重 |
| CVSS v3.1 | 9.8 |
| CWE | CWE-306 — 关键功能缺少身份验证 |
| 攻击向量 | 网络 |
| 攻击复杂度 | 低 |
| 所需权限 | 无 |
| 用户交互 | 无 |
| 机密性 | 高 |
| 完整性 | 高 |
| 可用性 | 高 |
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
2. 漏洞描述
CVE-2024-31218 是由于受影响的 Webhood/PocketBase 应用程序中围绕管理员创建的身份验证保护不足所导致的。
当应用程序未配置管理员账户时,管理员创建功能可以在未经身份验证的情况下被访问。
因此,能够访问受影响 API 的攻击者可以尝试创建第一个管理员账户。
成功利用可能导致对应用程序的管理访问权限。
该漏洞被归类为:
CWE-306:关键功能缺少身份验证
3. 受影响版本和修复版本
易受攻击的版本范围是:
Webhood <= 0.9.0
该漏洞已在以下版本中修复:
Webhood 0.9.1
因此,应使用已修补版本进行修复验证。
4. 攻击面
相关攻击面是 PocketBase 管理 API。
易受攻击的功能涉及管理员账户创建。
从概念上讲,攻击流程是:
攻击者
|
| HTTP 请求
v
Webhood / PocketBase API
|
| 管理员创建端点
v
管理员账户创建
|
v
未经授权的管理访问
当存在易受攻击的初始管理员条件时,该攻击不需要现有的已身份验证会话。
5. 根本原因
根本原因是身份验证控制失败。
当不存在管理员账户时,管理员创建功能未能充分限制访问。
安全边界应确保特权管理功能不能被未经身份验证的远程客户端滥用。
因此,易受攻击的行为代表了围绕安全敏感操作缺少身份验证检查。
6. 受控实验架构
该实验环境复现了 CVE-2024-31218 所依据的 PocketBase 管理 API 行为。
Docker 环境直接使用 PocketBase 组件,而非声称打包了完整的 Webhood 0.9.0 应用程序。
实验架构为:
+-------------------------+
| 主机机器 |
| |
| PowerShell / Python |
+------------+------------+
|
| 127.0.0.1:8090
v
+-------------------------+
| Docker 容器 |
| |
| +-------------------+ |
| | PocketBase | |
| | 管理 API | |
| +-------------------+ |
| |
+-------------------------+
该服务仅绑定到 localhost,不打算暴露在公共互联网上。
复现过程中使用的所有凭据均为合成的实验凭据。
7. 仓库结构
CVE-2024-31218-WEBHOOD-LAB/
│
├── README.md
│
├── vulnerable/
│ ├── Dockerfile
│ └── docker-compose.yml
│
├── exploit/
│ └── reproduce.py
│
├── detection/
│ └── detect.py
│
├── patched/
│ └── README.md
│
├── evidence/
│ └── README.md
│
└── blog/
└── CVE-2024-31218-Technical-Blog.pdf
8. 易受攻击环境
易受攻击环境旨在在隔离的 Docker 容器中复现与 CVE-2024-31218 相关的 PocketBase 管理 API 行为。
该实验直接使用 PocketBase 作为受影响组件,而非声称复现完整的 Webhood 0.9.0 应用程序。
Docker 配置将:
- 构建实验环境。
- 在本地启动 PocketBase。
- 将服务绑定到 localhost。
- 保持服务与外部系统隔离。
- 提供可复现的测试环境。
- 允许复现脚本与管理 API 交互。
当前实验使用合成的管理员账户,不包含真实用户数据或凭据。
9. 复现方法
复现过程仅针对本地实验环境。
步骤 1 — 启动易受攻击的容器
docker compose up --build
步骤 2 — 验证服务
确认用于组件级实验的 PocketBase 服务在本地有响应。
步骤 3 — 执行受控复现脚本
复现脚本将向本地易受攻击实例发送相关请求。
示例:
python exploit/reproduce.py
步骤 4 — 观察响应
响应应表明应用程序是否接受未经身份验证的管理员创建请求。
步骤 5 — 验证结果状态
实验应验证是否创建了管理员账户。
绝不应使用外部目标。
10. 检测
检测应识别与未经授权的管理员创建尝试相关的指标。
潜在指标包括:
对管理员创建功能的请求
对管理端点的未经身份验证请求
意外创建第一个管理员账户
来自意外客户端的 HTTP 请求
重复的管理员创建尝试
应用程序初始化后立即创建管理员账户
检测脚本位于:
detection/detect.py
11. 修复
主要修复方法是将 Webhood 升级到修复版本:
Webhood 0.9.1
易受攻击的版本不应在生产环境中使用。
在无法立即升级的情况下,一种有记录的变通方法是限制对受影响管理员 API 功能的访问。
修复后:
停止易受攻击的容器。
将易受攻击版本替换为修复版本。
重新构建容器。
启动已修补环境。
重复复现尝试。
确认易受攻击行为不再可能发生。
检查应用程序日志中是否有意外的管理请求。
12. 修复与验证
CVE-2024-31218 的官方 Webhood 修复已使用实际的 Webhood `v0.9.1` 源代码发布版本进行验证。
修复提交为:
`735e7fa2814edeec9a2c07778ed51b3c018609f9`
该修复添加了迁移:
`src/backend/migrations/1712252550_generate_random_admin.js`
该迁移检查管理员是否已存在。如果不存在管理员,则创建一个带有随机生成密码的管理员账户。这可以防止未经身份验证的请求者通过暴露的 `/api/admins` 端点抢占第一个管理员。
#### 验证过程
1. 检出官方 Webhood `v0.9.1` 源代码标签。
2. 使用其 Dockerfile 从官方源代码在本地构建后端。
3. 将生成的镜像在本地主机的 `8091` 端口上运行。
4. 将用于攻击易受攻击实验的同一未经身份验证的管理员创建请求重放到已修复的后端。
5. 易受攻击环境此前以 HTTP `200` 接受了该请求。
6. 已修复的 `v0.9.1` 后端以 HTTP `401` 拒绝了同一请求。
观察到的已修复环境响应:
```text
HTTP status: 401
{"code":401,"message":"The request requires valid admin authorization token to be set.","data":{}}
这证实了此前演示的未经身份验证的管理员创建攻击路径在本地构建的 Webhood v0.9.1 后端中已被阻止。
修复已验证:是
证据:
evidence/05-remediation-verified.png
13. 安全影响
成功利用可能向未经授权方提供管理权限。
潜在后果包括:
未经授权的管理访问
修改应用程序数据
泄露应用程序信息
修改或删除记录
进一步滥用应用程序的管理权限
因此,根据已发布的 CVSS 评估,严重性被归类为严重。
14. 证据
evidence/ 目录旨在包含以下截图:
易受攻击应用程序启动
Docker 容器状态
易受攻击版本
复现请求
成功的易受攻击行为
检测输出
已修补版本
修复后失败/被阻止的复现
截图不应包含真实凭据、个人信息、API 密钥或其他敏感数据。
15. 局限性
在准备本实验期间,本地 Windows 环境在启动 Docker Linux 后端时遇到问题。
Windows 返回:
Error: 14098
The component store has been corrupted.
所需的 Windows 功能最初也处于禁用状态:
VirtualMachinePlatform
Microsoft-Windows-Subsystem-Linux
因此,任何复现结果或截图都必须准确区分:
漏洞研究
实验配置
预期复现过程
成功执行的复现
除非确实在隔离实验环境中执行过,否则不应声称成功利用了漏洞。
16. 安全注意事项
本项目仅用于授权的安全研究。
实验环境应:
在本地运行。
避免公开暴露。
避免使用真实凭据。
避免使用真实用户数据。
避免针对第三方系统进行测试。
使用一次性测试账户。
使用隔离的 Docker 网络。
测试后销毁易受攻击环境。
清理示例:
docker compose down
17. 参考资料
National Vulnerability Database — CVE-2024-31218
Webhood 安全公告
Webhood/PocketBase 源代码仓库
与 CVE-2024-31218 相关的修复提交
CWE-306 — 关键功能缺少身份验证
FIRST CVSS v3.1 规范
18. 免责声明
本仓库是一个网络安全教育和漏洞研究项目。
易受攻击配置是为受控测试而有意复现的。不得将其部署为可公开访问的服务。
作者对本仓库中包含的技术或工件的未经授权使用不承担任何责任。