Eu tenho uma imagem docker, baseada no Ubuntu 23.04. A execução docker scout cves
mostra, entre outras coisas, algumas vulnerabilidades críticas em um arquivo stdlib 1.19.4
de um pacote pkg:golang/[email protected]
. (CVE-2023-24540 e CVE-2023-24538).
O problema é que não tenho a menor ideia de onde vem esse pacote. Não estou usando a linguagem go em nenhum dos meus códigos. Não consigo encontrar o pacote em dpkg.log
. Se eu executar todos os meus apt
comandos manualmente, ele não aparecerá na saída. Percorrendo a árvore de pacotes afetados no Docker Desktop, também não consigo vê-lo – embora seja fácil perder.
Além de fazer um corte binário no meu Dockerfile até que as vulnerabilidades desapareçam, alguém pode explicar uma maneira sistemática de descobrir qual comando causou a instalação deste pacote?
Adendo: Conforme solicitado - aqui está um Dockerfile com todos os comandos de instalação, mas nenhum do meu próprio código:
# 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
Do ponto de vista da área de trabalho, é um pouco mais óbvio do que o terminal imho.
Visualização da área de trabalho
Se você observar a exibição da imagem criada a partir do seu Dockerfile, poderá ver esses pequenos ícones à direita. Um verde significa que está tudo bem e vermelho e amarelo em tons de cores diferentes significa que uma vulnerabilidade foi introduzida nessa camada.
Agora, se você clicar em um deles, ele mostrará qual vulnerabilidade foi introduzida ali, no lado direito, também conhecida como visualização de detalhes:
Agora no seu caso é um pouco mais difícil porque você adiciona vários pacotes em uma camada. No entanto, neste caso, estamos procurando um software baseado em go tão fora da lista nesta camada (
vim cron geoipupdate git logrotate mysql-client openssh-server redis rsync supervisor unzip zip
) que deveria ser apenasgeoipupdate
. Em um pacote com melhor manutenção, você veria um aviso ou algo mais na guia de segurança na página do github , o que aparentemente não é o caso aqui. No entanto, se você olhar para o go.mod , poderá ver que ele está usando uma versão do go que é vulnerável. Uma correção para isso seria https://github.com/maxmind/geoipupdate/pull/251 (não que eu ainda precise corrigir os testes para isso, mas bom o suficiente para mostrar por enquanto).terminal
No terminal você pode usar o
--locations
sinalizador assimDessa forma, ele imprimirá a origem do problema, o que, nesse caso, apontaria para o mesmo pacote novamente. O número e o hash são, na verdade, a camada onde ele é introduzido. Novamente, depois de examinar a saída da área de trabalho antes, ela faz mais sentido. Lá você também pode ver que é a camada 14 onde o problema é introduzido.