漏洞概述 漏洞标题: Authenticated Remote Code Execution via Command Injection in /listen-deployment WebSocket Endpoint 漏洞描述: 在Dokploy的 WebSocket端点中存在命令注入漏洞。该漏洞允许任何组织成员在通过Dokploy管理的远程服务器上执行任意系统命令,导致服务器完全被控制。 受影响文件: 漏洞详情: WebSocket端点通过SSH 命令流式传输部署日志。 参数通过 函数进行验证,该函数仅检查解析后的路径是否以配置的 (生产环境中为 )开头。 由于 将shell元字符(如 )视为Linux上的有效文件名字符,验证被绕过。 参数随后直接插入到shell命令字符串中,并通过SSH执行(第73-75行)。 授权检查: 该WebSocket端点不经过IRPC权限中间件链。其手写授权仅检查: 1. 用户已认证(通过 ) 2. 服务器属于用户组织 3. 服务器已配置SSH密钥 它不检查 、 或调用 ,因此任何组织成员(默认“member”角色)都可以针对组织中的任何服务器。 影响范围 类型: OS命令注入(CWE-78) 严重程度: 关键(CVSS 9.9) 向量: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H 认证: 需要,但任何注册用户(默认“member”角色)都可以利用此漏洞 后果: 以SSH用户权限在组织内所有配置了SSH密钥的管理服务器上执行远程代码 修复方案 选项A(推荐): 在 之前添加严格的正则表达式验证 ,拒绝shell元字符: 选项B: 对路径值进行Base64编码以避免shell解释: 选项C: 使用SFTP流式传输来读取文件,而不是使用 和 。 POC代码 前提条件: 1. 在目标Dokploy实例上注册用户账户 2. 创建组织 3. 组织中至少有一台服务器配置了SSH密钥 复现步骤: 1. 使用包含shell元字符的 参数连接到WebSocket端点: (包括会话cookie或 头用于认证) 2. 命令将通过SSH在远程服务器上执行,输出将通过WebSocket连接返回。 示例 - 反向shell: Shell如何解释命令: