CVE-2026-73040 in Dockge
摘要
由 VulDB • 2026-08-20
Dockge 仅在写入路径上验证堆栈名称。在 backend/stack.ts 中,validate() 函数中的白名单检查(要求名称匹配 ^[a-z0-9_-]+$)仅通过 save() 触发;而 getter 方法返回 path.join(this.server.stacksDir, this.name),且 Stack.getStack 使用 path.join(server.stacksDir, stackName) 构建路径,未进行任何验证。backend/agent-socket-handlers/docker-socket-handler.ts 中的 socket 处理程序确认调用者已登录且名称为字符串后,直接将其传递给 Stack.getStack,因此包含遍历序列的名称会解析到受管理的堆栈目录之外。经过身份验证的用户因此可以读取服务器进程可访问的任何目录的 composeENV 和 composeYAML 值,从而泄露该目录中 .env 文件或 Compose 文件中的机密信息;还可以调用 delete() 方法,该方法执行 docker compose down,随后对遍历的路径以递归(recursive)和强制(force)模式运行 fsAsync.rm,从而删除该目录。披露范围仅限于名为 .env 或符合接受的 Compose 文件名的文件;而删除操作要求目标目录中包含有效的 Compose 文件,以便 docker compose down 能够成功退出。Dockge 通常以 root 身份运行并拥有 Docker socket 的访问权限,因此可访问的范围包括主机上无关的应用程序。配置了 disableAuth(一种自动将调用者登录为管理员的支持选项)的实例会在无需认证的情况下暴露上述两种操作。
If you want to get best quality of vulnerability data, you may have to visit VulDB.