漏洞概述 PrainsonAI 的 recipe registry pull 流程存在路径遍历(Path Traversal)漏洞。该流程在提取攻击者控制的 tar 归档文件时,使用了不安全的 方法,且在提取前未验证归档成员的路径。恶意发布者可以上传包含 遍历条目的 recipe bundle。当受害者拉取该 recipe 时,文件会被写入到指定的输出目录之外,导致任意文件写入。 影响范围 受影响方: 从不可信或共享的 PrisonAI registry 拉取 recipe 的用户。 运行内部 registry 的团队(一个发布者可能影响其他拉取者)。 自动化系统或 CI 作业(将 recipe 拉取到敏感项目文件附近的目录)。 安全影响: 完整性: 影响较高,攻击者可以在预期提取目录之外创建或覆盖文件。 可用性: 影响显著,如果覆盖目标是配置文件、项目文件、启动脚本或其他操作工件,将导致服务中断。 该漏洞跨越了真实的安全边界,因为攻击者只需发布恶意 recipe,受害者拉取操作即可触发写入。 修复方案 1. 替换提取方法: 用安全的提取例程替换原始的 ,该例程需在提取前验证每个 成员。拒绝绝对路径、 段以及任何绕过预期提取目录的路径。 2. 统一验证: 在 和 中应用相同的归档成员验证,确保本地和远程 registry 客户端共享相同的安全保证。 3. 发布时验证: 考虑在发布时也验证 tar 内容,以便在恶意 bundle 进入 registry 之前将其拒绝,防止其被下游用户使用。 POC 代码 截图中提供了验证脚本的运行命令及验证命令: 运行验证脚本: 手动验证创建的文件: 脚本内部逻辑: 1. 启动本地 PrisonAI recipe registry 服务器。 2. 构建包含恶意 tar 条目 的恶意 bundle。 3. 将恶意 bundle 发布到本地 HTTP registry。 4. 模拟受害者从 拉取 recipe。 5. 确认文件在选定目录外创建。