You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker镜像已移除pip,Xray仍检测到CVE-2018-20225漏洞

问题解答

你遇到的这种情况,核心原因是Docker镜像的分层特性以及扫描工具的检测逻辑,并非当前镜像中还存在可执行的pip。具体来说有以下几点:

1. 镜像分层历史残留痕迹

Docker镜像是分层构建的,你的base阶段中执行过依赖安装操作(必然用到了pip),这些操作会被记录在base层的文件系统中。虽然final阶段删除了pip的可执行文件和相关包,但base层的内容并没有被真正移除——镜像的所有历史层都会被保留,只是在final层中做了“删除标记”。扫描工具(比如Xray)会遍历镜像的所有层进行检测,一旦在base层中发现pip的使用痕迹(尤其是涉及额外索引URL的操作记录),就会触发CVE-2018-20225的告警。

2. 残留的pip配置或元数据文件

即使你删除了pip的核心文件,镜像中可能还残留着一些与pip相关的配置或元数据:

  • 系统层面的pip配置文件(比如/etc/pip.conf)
  • 虚拟环境中的元数据文件(比如pip-selfcheck.json、依赖安装记录里的索引URL信息)
  • 其他隐藏的pip缓存或日志文件

这些文件里可能包含了与CVE-2018-20225相关的额外索引URL配置,扫描工具检测到这些内容后就会触发告警。

3. 扫描工具的检测逻辑特性

部分漏洞扫描工具的告警逻辑并非只检查镜像当前运行时的状态,而是会基于“镜像中是否存在过风险组件或风险配置的痕迹”来触发告警。只要工具检测到镜像历史中有pip的使用记录,并且该记录符合CVE-2018-20225的触发条件(比如使用了额外索引URL),就会发出告警,不管当前pip是否被删除。


解决办法

方法一:彻底隔离构建层与运行层

改用更严格的多阶段构建,从干净的基础镜像开始构建final阶段,只复制运行所需的文件,避免继承base层的历史痕迹:

FROM ubuntu:23.04 AS base

RUN python3 -m venv venv && \
    . venv/bin/activate && \
    # 这里执行依赖安装,比如:
    pip install your-dependency-packages

# 从全新的ubuntu镜像开始构建final阶段
FROM ubuntu:23.04 AS final

# 只复制虚拟环境中运行必需的文件,而非整个base层
COPY --from=base /venv /venv

# 清理系统pip及残留文件
RUN apt-get remove --purge -y python3-pip && \
    apt-get autoremove --purge -y && \
    apt-get clean && \
    rm -rf /venv/lib/python3.11/site-packages/pip* && \
    rm -rf /venv/bin/pip*

方法二:清理所有pip相关残留文件

在final阶段添加命令,查找并删除所有pip相关的配置、元数据和缓存文件:

RUN find / -type f \( -name "pip.conf" -o -name "pip.ini" -o -name "pip-selfcheck.json" \) -o -type d -name "*pip*cache*" | xargs rm -rf

方法三:针对性排查告警来源

查看Xray扫描报告的详细信息,确认告警是来自哪个镜像层或哪个具体文件,然后针对该文件或层做针对性清理。


内容的提问来源于stack exchange,提问作者tenticon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 07:53:28