ZCyberNews
English
漏洞严重5 分钟阅读
CVE-2026-45408

CVE-2026-45408: Shell Injection in Dokku PaaS Lets Authenticated

CVE-2026-45408 (CVSS 9.0) 在 Dokku <0.38.2 中允许经过身份验证的用户通过在 git push 操作中使用精心制作的应用程序名称注入 shell 命令。目前还没有公开的漏洞利用代码。

CVE-2026-45408: Shell Injection in Dokku PaaS Lets Authenticated

执行摘要

Dokku,开源的Docker驱动的Platform-as-a-Service (PaaS)平台,存在一个关键的Shell注入漏洞,允许经过身份验证的用户通过推送到一个git远程仓库,且应用名称经过精心构造,从而在宿主系统上执行任意命令。这个漏洞被追踪为CVE-2026-45408,分配了一个CVSS得分9.0(严重),影响所有0.38.2之前的Dokku版本。该漏洞源于git预接收钩子脚本中应用程序名称的不足清理,用户输入的输入未加引号嵌入到bash heredoc中。在多租户环境中运行Dokku的防御者应将此视为完全主机泄露风险,并优先升级到0.38.2版本。

技术分析

根据Dokku维护者发布的咨询和相关的拉取请求(PR #8590),根本原因在于Dokku使用的应用程序名称验证正则表达式:^[a-z0-9][^/:_A-Z]*$。虽然这个正则表达式限制了某些字符,但它允许像反引号、美元符号和分号这样的Shell元字符。当经过身份验证的用户发起一个git push到一个包含这些字符的远程名称时,Dokku的fn-git-create-hook()函数(在plugins/git/internal-functions的第378行定义)直接将应用程序名称嵌入到bash预接收钩子脚本中。

关键错误是使用了未加引号的heredoc分隔符(<<EOF而不是<<'EOF')。在bash中,未加引号的heredoc分隔符会导致shell在heredoc主体中展开变量并执行命令替换。因为应用程序名称在heredoc被评估之前就被插值到脚本中,攻击者可以构造包含Shell元字符的应用程序名称,从而跳出预期的变量分配并在Dokku主机上执行任意命令。

例如,像test$(id)test;id这样的应用程序名称会在git推送操作期间导致shell执行id命令。攻击者必须已经拥有对Dokku实例的经过身份验证的访问权限,并且能够创建或推送到git远程仓库——这是任何Dokku用户的标凈能力。该漏洞不需要事先访问主机的Shell。

修复此问题的拉取请求已在0.38.2版本发布前的一个未公开日期合并到Dokku代码库中。修复将heredoc分隔符从未加引号更改为单引号(<<'EOF'),这阻止了heredoc主体中的shell展开。此外,应用程序名称验证正则表达式被收紧,直接拒绝Shell元字符。

在撰写本文时,尚未发布公开的概念验证漏洞代码,也没有关于野外活跃利用的报告。然而,鉴于攻击的低复杂性——只需要一个精心制作的git推送——防御者应该预期在公开披露后不久就会被武器化。

缓解措施与建议

唯一的完全缓解措施是将Dokku升级到0.38.2或更高版本。这个修复是向后兼容的,不需要配置更改。在多租户环境中运行Dokku的组织——其中经过身份验证的用户可能不被完全信任——应该将这次升级视为紧急事项。对于无法立即修补的环境,管理员应该审计所有当前应用程序名称中的Shell元字符,并限制只有受信任的用户才能访问git推送。将Dokku主机从不受信任的网络中隔离在网络级别可以减少成功漏洞利用的影响范围,但不能阻止经过身份验证的用户进行利用。

订阅更新

将最新的网络安全资讯直接发送到您的邮箱。

标签:#cve-2026-45408#dokku#shell-injection#paas#remote-code-execution

相关文章