我有一个基于Ubuntu 23.04的Docker镜像。运行docker scout cves
会显示来自pkg:golang/ [[email protected]](https://stackoverflow.com/cdn-cgi/l/email-protection)
包的文件stdlib 1.19.4
中的几个关键漏洞。(CVE-2023-24540和CVE-2023-24538)。
问题是,我完全不知道这个包裹是从哪里来的。我没有在自己的代码中使用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
1条答案
按热度按时间7fyelxc51#
从桌面上看,它比终端imho更明显。
桌面视图
如果您查看从Dockerfile构建的镜像视图,您可以在右侧看到这些小图标。一个绿色的意味着它的一切都很好,红色和黄色在不同的色调意味着一个漏洞被引入到该层。
现在,如果您单击其中一个,它会在右侧的详细信息视图中显示引入的漏洞:
现在,在您的情况下,它有点困难,因为您在一个层中添加多个包。然而,在本例中,我们正在寻找基于go的软件,因此不在此层(
vim cron geoipupdate git logrotate mysql-client openssh-server redis rsync supervisor unzip zip
)的列表中,应该只有geoipupdate
。在一个维护得更好的软件包中,你会在安全选项卡on the github page下看到一个免责声明或其他东西,而这里显然不是这样。然而,如果你看看go.mod,你会发现它使用的是一个容易受到攻击的go版本。一个给定的修复方法是https://github.com/maxmind/geoipupdate/pull/251(并不是说我仍然需要修复测试,但现在已经足够好了)。终端
在终端中,您可以像这样使用
--locations
标志这样,它会打印出问题的来源,在这种情况下,这将再次指向相同的包。数字和散列实际上是引入它的层。同样,如果您以前看过桌面输出,它就更有意义了。在这里你也可以看到,它是第14层,在那里引入了问题。