Prhub

#21789 Fix CVEs in Docker image: pillow, linux-libc-dev, and broken sgl-model-gateway build

sgl-project/sglang · 作者 Kangyan-Zhou · 合并时间 2026-04-01 11:07

分析状态 已生成
文件变更 1提交数 1 · 评论 1
代码增减 +10 / -7
security bugfix

执行摘要

修复 Docker 镜像中的安全漏洞和构建错误,显著降低 CVE 数量。

PR body 指出 Docker 镜像存在三个主要安全问题和构建缺陷:1) Pillow CVE-2026-25990 (HIGH 级别,涉及越界写入),需升级到 12.1.1 以上;2) linux-libc-dev 包包含 16 个内核 CVEs,需升级到最新版本;3) Rust cargo cache CVEs 源自 sgl-model-gateway 构建失败,由于二进制从 sglang-router 重命名为 sgl-model-gateway 后 Dockerfile 未更新,导致构建错误被忽略,遗留了 2.6GB Rust 工件。目标是通过修复这些问题提升镜像安全性并优化构建流程。

建议安全团队和 DevOps 工程师精读此 PR,特别是关注 Dockerfile 中构建优化和清理机制的设计,以及依赖升级的版本管理,有助于提高容器化部署的最佳实践。

讨论亮点

Review 评论为空,没有发生讨论或争议点。

实现拆解

修改了 docker/Dockerfile 文件,关键改动点包括:在框架和运行时阶段添加并更新 linux-libc-dev 包;修复 Rust 构建步骤,将构建目标从 sglang-router 更新为 sgl-model-gateway,并使用 trap cleanup EXIT 机制确保构建完成后无条件清理 Rust 工具链和相关目录(如 /root/.cargo, /root/.rustup);同时升级 pillow 包到 12.1.1 以上。这些改动集中在一个文件中,通过依赖升级和构建流程优化解决了安全和构建问题。

文件 模块 状态 重要度
docker/Dockerfile Docker 构建基础设施 modified 6.0

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

关键符号

cleanup() 函数(在 Dockerfile 中定义)

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

风险相对较低:主要风险是依赖升级可能引入新的兼容性问题,例如 pillow 或 linux-libc-dev 版本变化可能影响现有功能;另外,Dockerfile 的 trap 机制改动可能在不正常退出时导致清理不彻底,但测试计划已验证清理效果。安全风险方面,仍有 7 个 CVEs 来自上游 hf-xet Go stdlib,未在此 PR 中解决,需依赖第三方更新。

对用户:Docker 镜像安全性和大小得到改善,减少了 77% 的 CVEs,且构建过程更可靠;对系统:降低了潜在安全攻击面,提高了部署的安全性;对团队:增强了 DevOps 流程的健壮性,支持持续集成和安全扫描。影响范围局限于 Docker 镜像构建,不影响核心业务逻辑。

依赖升级兼容性 安全修复不彻底

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

执行摘要

此 PR 修复了 Docker 镜像中的多个安全漏洞和构建缺陷,包括 Pillow CVE-2026-25990、linux-libc-dev 内核 CVEs 以及由于二进制重命名导致的 Rust 构建失败问题,通过依赖升级和构建流程优化,将 CVEs 从 31 个减少到 7 个,显著提升了镜像安全性,对开发和部署流程有积极影响。

功能与动机

本 PR 旨在解决 Docker 镜像的安全风险和构建可靠性问题。根据 PR body,动机源自三个关键发现:1) Pillow 包存在 HIGH 级别漏洞 CVE-2026-25990,需升级到 12.1.1 以上;2) linux-libc-dev 包包含 16 个内核 CVEs,需更新到最新版本;3) Rust cargo cache 因构建失败遗留了 2.6GB 带 CVE 的工件,根源是 sgl-model-gateway 二进制从 sglang-router 重命名后 Dockerfile 未同步更新,导致 cargo build --bin sglang-router 失败且清理步骤被跳过。修复这些问题是提升容器化部署安全性和稳定性的必要步骤。

实现拆解

所有改动集中在 docker/Dockerfile 文件中,按模块拆解如下:

  • 依赖升级模块
    • 添加 linux-libc-dev 包到框架和运行时阶段,确保内核库版本更新。
    • 升级 pillow 包,通过 RUN python3 -m pip install --upgrade "urllib3>=2.6.3" "pillow>=12.1.1" 行实现。
  • Rust 构建优化模块
    • 定义 cleanup() 函数和 trap cleanup EXIT,确保无论构建是否成功都能清理 Rust 工具链。
    • 将构建目标从 sglang-router 更新为 sgl-model-gateway,修正 cargo build 命令和二进制复制路径。
      关键代码逻辑示例:
cleanup() { rm -rf /root/.cargo /root/.rustup ...; }
&& trap cleanup EXIT
&& cargo build --release --bin sgl-model-gateway ...

评论区精华

此 PR 未发生任何 review 讨论,无争议点或技术交锋。

风险与影响

风险分析

  • 依赖升级风险:pillow 和 linux-libc-dev 的新版本可能引入与现有代码的兼容性问题,但测试计划已部分验证功能。
  • 构建脚本风险:trap 机制依赖于正常退出,异常场景下可能导致清理不彻底,不过测试确认了清理效果。
  • 安全残留风险:仍有 7 个 CVEs 来自上游 hf-xet Go stdlib,不受本 PR 控制,需监控第三方更新。

影响分析

  • 对用户:镜像更安全、更小,构建失败问题得到解决,提升了部署体验。
  • 对系统:减少了安全攻击面,镜像扫描得分改善,支持更安全的运行环境。
  • 对团队:加强了 CI/CD 流程的健壮性,为后续安全扫描(如 PR #21772)奠定了基础。

关联脉络

本 PR 与历史 PR 存在以下关联:

  • PR #14312:此 PR body 提到二进制重命名发生在此 PR,是本 PR 修复构建失败问题的根源,揭示了跨 PR 同步更新的重要性。
  • PR #21772:近期历史 PR 中涉及添加 Trivy 漏洞扫描到 Docker 构建,与本 PR 的安全修复主题形成互补,共同推动仓库的安全治理趋势。整体来看,仓库正通过一系列 PR 强化安全性和基础设施可靠性。

参与讨论