Kimdir01/redaxo-cms-multi-vuln-cve
GitHub: Kimdir01/redaxo-cms-multi-vuln-cve
针对 Redaxo CMS 6.x 的漏洞概念验证项目,披露并验证了包括权限提升、RCE 和 SSRF 等在内的 16 个高危安全漏洞。
Stars: 0 | Forks: 0
# GitHub 安全公告:Redaxo CMS 6.x — 权限提升、RCE、SSRF、CSRF 绕过
## 公告信息
| 字段 | 值 |
|-------|-------|
| **严重程度** | Critical / High |
| **CWE** | CWE-862 (Missing Authorization) / CWE-918 (SSRF) / CWE-94 (Code Injection) / CWE-352 (CSRF) |
| **CVSS v3.1** | 9.1 (Privilege Escalation) / 8.8 (RCE via Backup) / 7.7 (SSRF) |
| **CVSS Vector** | AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H |
## 概述
Redaxo CMS 6.x(德国专业 CMS,包含 498 个 PHP 文件)存在 16 个漏洞,包括:(1) 通过完全没有授权检查的 AddonOperation API 进行权限提升;(2) 通过备份导入伴随脚本实现远程代码执行 (RCE);(3) 通过 Cronjob URL 请求类型进行 SSRF;(4) 多项 CSRF 绕过,包括在 token 检查前下载备份、无 token 的邮件发送程序配置。
## 漏洞详情
### 受影响的包/仓库
- **仓库:** `redaxo/redaxo`
- **受影响版本:** 6.x-dev (current)
- **修复版本:** N/A (0-day)
**Commit Hash (audited):** `042d10cfd60109629f3394109109098f96cc94f5`
## CVE-REQUEST-001:通过 AddonOperation API 进行权限提升 (CVSS 9.1)
**文件:** `src/Addon/ApiFunction/AddonOperation.php`, 第 26-56 行
```
#[AsApiFunction('addon_operation')]
final class AddonOperation extends ApiFunction
{
public function execute(): Result
{
if (Core::isLiveMode()) { throw ...; }
$function = Request::request('function', 'string');
// NO PERMISSION CHECK on the calling user!
$manager = AddonManager::factory($package);
$success = Type::bool($manager->$function());
}
}
```
**零授权。** 任何经过身份验证的后端用户 —— 无论角色如何 —— 都可以调用 `?rex-api-call=addon_operation&function=install&package=any_addon` 来安装、激活、停用或卸载任何 addon。该框架仅验证是否存在后端 session(`ApiFunction.php:170-178`),而不验证用户的权限。
**PoC:**
```
curl "http://target/redaxo/?rex-api-call=addon_operation&function=install&package=malicious_addon" \
-b "PHPSESSID=VALID_SESSION"
```
## CVE-REQUEST-002:通过备份导入伴随脚本实现 RCE (CVSS 8.8)
**文件:** `src/Backup/Backup.php`, 第 166, 474-479 行
```
self::importScript(str_replace('.sql', '.php', $filename), ...);
private static function importScript(string $filename, ...): void
{
if (is_file($filename)) {
require $filename; // EXECUTES COMPANION PHP SCRIPT
}
}
```
在导入数据库备份时,系统会查找具有相同基本文件名(basename)的伴随 `.php` 文件,并通过 `require()` 执行它。如果攻击者能够将 `.php` 文件写入备份目录,导入匹配的 `.sql` 文件就会触发任意代码执行。
## CVE-REQUEST-003:通过 Cronjob URL 请求类型进行 SSRF (CVSS 7.7)
**文件:** `src/Cronjob/Type/UrlRequestType.php`, 第 30 行
```
$response = Core::getHttpClient()->request($method, $this->getParam('url'), $options);
```
任意 URL 没有 validation、没有 hostname allowlisting、也没有 private-IP blocking。拥有 cronjob 权限的管理员可以针对 `169.254.169.254` 探测云元数据、内部数据库或内部 Web 应用程序。
## CVE-REQUEST-004:CSRF 绕过 —— 在 Token 检查前下载备份 (CVSS 5.4)
**文件:** `pages/backup/import.server.php`, 第 38-44 行
```
if ('download' == $function && $impname && is_readable(Backup::getDir() . '/' . $impname)) {
Response::sendFile(Backup::getDir() . '/' . $impname, ...);
exit; // EXITS BEFORE CSRF CHECK BELOW!
}
if ($function && !$csrfToken->isValid()) {
$error = I18n::msg('csrf_token_invalid');
}
```
下载功能在 CSRF token 验证**之前**执行并退出。`
` 标签可以触发包含带有密码哈希的数据库转储的备份下载。
## 其他发现(共 16 项):
| # | 漏洞 | CVSS | 类型 |
|---|--------------|------|------|
| H-3 | 后端 API 功能无 auth check | 8.8 | Broken Access Ctrl |
| H-5 | Tar 解压至项目根目录(path traversal) | 8.1 | Path Traversal |
| H-6 | enforceHttps() 中的 Host header 注入 | 6.1 | Open Redirect |
| M-2 | 邮件发送程序配置(SMTP 凭据)上的 CSRF | 6.5 | CSRF |
| M-4 | 媒体同步未净化的文件名(存储型 XSS) | 5.4 | XSS |
| M-6 | phpinfo() 对管理员暴露 | 4.9 | Info Disclosure |
| M-7 | Whoops 错误处理程序堆栈跟踪 | 5.5 | Info Disclosure |
| M-8 | SHA1 旧密码回退 | 5.9 | Weak Crypto |
| M-9 | 保持登录 cookie(3 个月) | 6.5 | Session Mgmt |
| M-10 | 非管理员可以枚举管理员账户 | 4.3 | Info Disclosure |
| L-5 | 媒体更新跳过扩展名检查 | — | File Upload |
## 值得肯定的安全控制
Redaxo 代码库在许多方面拥有典范的安全实践:
- 零 `unserialize()`、`eval()` 或 `create_function()` 调用
- 结合 `hash_equals()` 的全面 CSRF token 系统
- 通过 `enshrined/svg-sanitize` 进行 SVG 净化
- 通过 `password_hash()` 进行 bcrypt 密码哈希处理
- 登录时使用严格模式重新生成 session
- 内置 Psalm 污点分析
- 基于 Whitelist 的页面权限模型
## 影响
- 通过未经授权的 addon 安装/激活导致 **addon 生态系统受损**
- 通过备份伴随脚本导致 **服务器上的 RCE**
- 通过 SSRF 进行 **内部网络访问**
- 通过备份下载导致 **凭据窃取**(CSRF 绕过)
- 通过邮件发送程序配置上的 CSRF 导致 **SMTP 凭据窃取**
## 补丁 / 修复
1. 在 `AddonOperation::execute()` 中添加 `$this->requireUser()->isAdmin()` 检查
2. 移除或沙盒化 `importScript()` —— 不要对受用户影响的路径使用 `require()`
3. 在 `UrlRequestType` 中添加带有 private-IP blocking 的 URL validation
4. 将 CSRF token 检查移至下载操作之前
5. 为所有表单(邮件发送程序配置、customizer、日志删除)添加 CSRF token
6. 在 `sync.php` 中对来自文件系统的文件名进行转义
7. 在 `enforceHttps()` 中将 `$_SERVER['HTTP_HOST']` 替换为受信任的服务器名称
## 披露时间表
- **2026-06-28:** 由 Fatullayev Asadbek (Kimdir01) 发现了全部 16 个漏洞
- **TBD:** 向 REDAXO 维护者报告
- **TBD:** 通过 GitHub 请求 CVE
- **TBD:** 发布公告
## 致谢
- 发现者:Fatullayev Asadbek | GitHub:Kimdir01
- 独立安全研究员
## 参考
- CWE-862:Missing Authorization
- CWE-918:Server-Side Request Forgery (SSRF)
- CWE-94:Code Injection
- CWE-352:Cross-Site Request Forgery
标签:CISA项目, CMS漏洞, PoC, Web安全, Web报告查看器, 暴力破解, 漏洞披露, 蓝队分析