我有一个基于 Ubuntu 23.04 的 docker 映像。除其他外,运行显示包中docker scout cves
文件中的几个关键漏洞。(CVE-2023-24540 和 CVE-2023-24538)。stdlib 1.19.4
pkg:golang/[email protected]
问题是,我完全不知道这个包是从哪里来的。我没有在我自己的代码中使用 go 语言。我在 中找不到该包dpkg.log
。如果我手动运行所有apt
命令,它不会出现在输出中。在 Docker Desktop 中运行受影响的包树时,我也看不到它——尽管很容易错过。
在漏洞消失之前,没有对我的 Dockerfile 进行二进制切割,任何人都可以解释一种系统方法来找出哪个命令导致安装此软件包吗?
附录:根据要求 - 这是一个包含所有安装命令但没有我自己的代码的 Dockerfile:
# Start with a base Ubuntu image
FROM ubuntu:23.04
ARG xdebug
# Prevent any prompts during installation
ENV DEBIAN_FRONTEND noninteractive
# Set up apt with any additional repositories we need
RUN apt-get update
RUN apt-get install -y software-properties-common
RUN add-apt-repository ppa:maxmind/ppa
RUN apt-get update --fix-missing
RUN apt upgrade -y
# Install Apache and various other packages.
RUN apt-get install -y apache2
RUN apt-get install -y vim cron geoipupdate git logrotate mysql-client openssh-server redis rsync supervisor unzip zip
RUN apt-get install -y python3-pip python3-dev python3-setuptools python3-numpy python3-pandas python3-yaml python3-click python3-dotenv python3-mysql.connector python3.tqdm
RUN apt-get install -y gcc make dnsutils ncdu lsof
# Configure any Apache modules that weren't in the default
RUN cp /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled
RUN cp /etc/apache2/mods-available/expires.load /etc/apache2/mods-enabled
RUN cp /etc/apache2/mods-available/authz_groupfile.load /etc/apache2/mods-enabled
RUN cp /etc/apache2/mods-available/headers.load /etc/apache2/mods-enabled/
RUN cp /etc/apache2/mods-available/ssl.load /etc/apache2/mods-enabled
RUN cp /etc/apache2/mods-available/socache_shmcb.load /etc/apache2/mods-enabled
RUN cp /etc/apache2/mods-available/ssl.conf /etc/apache2/mods-enabled
# Suppress Apache warning on being unable to determine the fully qualified domain name
RUN echo "ServerName localhost">>/etc/apache2/apache2.conf
# Install PHP and plumb into Apache
RUN apt-get update --fix-missing
RUN apt-get install -y php8.1 php8.1-curl php8.1-gd php8.1-gettext php8.1-gmp php8.1-iconv php8.1-imap php8.1-intl php8.1-mbstring php8.1-mysql php8.1-oauth php8.1-redis php8.1-xml php8.1-yaml php8.1-zip
RUN if [ "$xdebug" = "with" ] ; then apt-get install -y php8.1-xdebug ; fi
RUN apt-get install -y libapache2-mod-php8.1
# The bcmath extension seems to have problems when installed in line with the other PHP modules, as of 2022-07-18
RUN apt-get update --fix-missing
RUN apt-get install -y php8.1-bcmath
# Install locales
RUN apt-get install -y locales
RUN locale-gen en_GB
RUN locale-gen en_GB.UTF-8
RUN locale-gen de_DE
RUN locale-gen de_DE.UTF-8
RUN locale-gen es_ES
RUN locale-gen es_ES.UTF-8
RUN locale-gen fr_FR
RUN locale-gen fr_FR.UTF-8
RUN locale-gen it_IT
RUN locale-gen it_IT.UTF-8
RUN update-locale
从桌面视图来看,它比终端恕我直言。
桌面视图
如果您查看从 Dockerfile 构建的映像的视图,您可以在右侧看到这些小图标。绿色意味着一切都很好,不同色调的红色和黄色意味着该层引入了漏洞。
现在,如果您单击其中一个,它将在右侧(又称详细信息视图)向您显示其中引入了哪个漏洞:
现在,在您的情况下,这有点困难,因为您在一层中添加了多个包。然而,在这种情况下,我们正在寻找基于 Go 的软件,因此在该层 ( ) 的列表中
vim cron geoipupdate git logrotate mysql-client openssh-server redis rsync supervisor unzip zip
应该只有geoipupdate
. 在维护得更好的包上,您会在github 页面的安全选项卡下看到免责声明或其他内容,但这里显然不是这种情况。不过,如果您查看go.mod,您会发现它使用的 go 版本很容易受到攻击。对此的给定修复将是https://github.com/maxmind/geoipupdate/pull/251(并不是说我仍然需要修复测试,但现在足以展示。)终端
在终端中,您可以
--locations
像这样使用该标志这样,它会打印出问题的根源,在这种情况下,它会再次向您指出同一个包。数字和哈希实际上是引入它的层。再次强调,一旦您之前查看过桌面输出,就会发现它更有意义。在那里您还可以看到问题是在第 14 层引入的。