
Scripts de uma linha para verificar a vulnerabilidade de servidores e imagens Docker ao CVE-2024-3094, incluindo detecção de versão e varredura de repositórios em busca de referências ao xz.
Este repositório fornece scripts simples, porém poderosos, em uma única linha, projetados para ajudar a determinar rapidamente se o seu servidor é vulnerável ao CVE-2024-3094, uma vulnerabilidade de segurança crítica encontrada em certas versões do utilitário xz. Além disso, oferecemos uma maneira conveniente de digitalizar seus repositórios de código em busca de referências à biblioteca xz, o que pode indicar possíveis vulnerabilidades indiretas.
Para saber se o seu servidor é suscetível ao CVE-2024-3094, execute o seguinte comando no seu terminal:
(type dpkg &>/dev/null && dpkg -l xz 2>/dev/null | awk '/^ii/{print $3}' | grep -qE '^(5.6.0|5.6.1)$' && echo "Vulnerable: CVE-2024-3094" || echo "Not vulnerable or xz not installed") || (type rpm &>/dev/null && rpm -q --qf "%{VERSION}\n" xz 2>/dev/null | grep -qE '^(5.6.0|5.6.1)$' && echo "Vulnerable: CVE-2024-3094" || echo "Not vulnerable or xz not installed")
O comando acima verificará os pacotes na distribuição Linux.
Ou tente esta outra opção onde o comando será executado, o que geralmente não é recomendado:
xzcommand -v xz &>/dev/null && { xz_version=$(xz --version | head -n 1 | awk '{print $4}'); [[ $xz_version == "5.6.0" || $xz_version == "5.6.1" ]] && echo "Vulnerable: CVE-2024-3094" || echo "Not vulnerable: CVE-2024-3094"; } || echo "xz not installed"
Este script executa as seguintes ações:
xz está instalado.xz.Para equipes que usam Docker e estão preocupadas com vulnerabilidades em suas imagens de contêiner, oferecemos um exemplo sofisticado usando o Trivy, um scanner de vulnerabilidades de código aberto da Aqua Security. Este método verifica vulnerabilidades em imagens Docker, incluindo o CVE-2024-3094, e fornece uma saída clara sobre o status de segurança da imagem.
O seguinte comando utiliza o Trivy para escanear uma imagem Docker (debian:experimental-20240311) em busca de vulnerabilidades e filtra os resultados para o CVE-2024-3094 relacionado ao liblzma5:
docker run --rm -v $('pwd'):/project -w /project aquasec/trivy:latest image --format cyclonedx --scanners vuln --output /project/result.json debian:experimental-20240311@sha256:16cc2b09c44d991d36f63153f13a7c98fb7da6bd2ba9d7cc0f48baacb7484970 && jq -r '.components[] | .properties[] | select(.name == "aquasecurity:trivy:PkgID" and (.value | tostring | test("liblzma5@(5\\.6\\.0|5\\.6\\.1)"))) | .value' result.json | grep -qE '5\.6\.0|5\.6\.1' && echo "Vulnerable: CVE-2024-3094" || echo "Not vulnerable or liblzma5 not found"
Como Funciona:
Comando Docker Run: Inicia um contêiner Trivy, montando o diretório atual como um volume para o contêiner. Essa configuração permite que o Trivy envie os resultados da varredura diretamente para um arquivo (result.json) no diretório atual do host.
Varredura Trivy: Escaneia a imagem Docker especificada em busca de vulnerabilidades, gerando os resultados no formato CycloneDX (um formato padronizado para lista de materiais de software).
Processamento com jq: Filtra os resultados da varredura para identificar o pacote liblzma5 e verifica as versões "5.6.0" ou "5.6.1".
Verificação de Vulnerabilidade: Usa grep para pesquisar versões vulneráveis de liblzma5. Imprime "Vulnerable: CVE-2024-3094" se encontrado; caso contrário, exibe "Not vulnerable or liblzma5 not found".
Este método é altamente eficaz para pipelines automatizados e pode ser adaptado para verificar várias vulnerabilidades em diferentes imagens Docker, garantindo que suas implantações estejam seguras.
Para usar o comando fornecido para escanear suas próprias imagens Docker, siga estas etapas para personalizar o comando de acordo com suas necessidades:
Substitua a Imagem Docker: Altere debian:experimental-20240311@sha256:16cc2b09c44d991d36f63153f13a7c98fb7da6bd2ba9d7cc0f48baacb7484970 pela imagem que deseja escanear. Você pode especificar sua imagem pelo nome e tag (por exemplo, suaimagem:suatag) ou pelo seu digest.
Ajuste a Verificação de Vulnerabilidade: Se você estiver verificando vulnerabilidades diferentes do CVE-2024-3094, modifique as expressões jq e grep para segmentar os pacotes e versões específicos relevantes para as vulnerabilidades de interesse.
Por exemplo, para escanear sua imagem chamada suaimagem:suatag:
docker run --rm -v $('pwd'):/project -w /project aquasec/trivy:latest image --format cyclonedx --scanners vuln --output /project/result.json suaimagem:suatag && jq -r '.components[] | .properties[] | select(.name == "aquasecurity:trivy:PkgID" and (.value | tostring | test("liblzma5@(5\\.6\\.0|5\\.6\\.1)"))) | .value' result.json | grep -qE '5\.6\.0|5\.6\.1' && echo "Vulnerable: CVE-2024-3094" || echo "Not vulnerable or liblzma5 not found"
Dicas para Personalização:
Para Diferentes Vulnerabilidades: Substitua "liblzma5@(5\\.6\\.0|5\\.6\\.1)" no comando jq pelo pacote e versões de seu interesse. Por exemplo, para verificar openssl versão "1.1.1", você pode usar openssl@(1\\.1\\.1).
Para Diferentes Propriedades: Dependendo da vulnerabilidade ou pacote, pode ser necessário ajustar .name == "aquasecurity:trivy:PkgID" para segmentar propriedades diferentes na saída CycloneDX.
Atualizações Regulares: Certifique-se de que sua instância do Trivy seja atualizada regularmente para ter as definições de vulnerabilidade mais recentes. Isso geralmente pode ser obtido puxando a imagem mais recente do aquasec/trivy antes de executar as varreduras.
Entendendo a Saída: Familiarize-se com o formato de saída do Trivy e o processamento jq para interpretar corretamente os resultados e entender as implicações para suas imagens Docker.
xzSe você está mantendo código que potencialmente interage ou depende da biblioteca xz, é crucial identificar quaisquer referências explícitas a versões vulneráveis da biblioteca. Use os seguintes comandos para escanear seus repositórios:
O projeto tukaani é a sede do utilitário xz. Para encontrar menções no seu código:
grep -rnH "tukaani" .
Para projetos Java que usam Maven, você pode especificar xz como uma dependência no seu pom.xml. Para localizar essas referências:
grep -rnH "org.tukaani:xz:" .
Esses comandos pesquisarão recursivamente o diretório atual (e subdiretórios) pelos padrões especificados, relatando o nome do arquivo, número da linha e a linha contendo a correspondência.
Nota: Certifique-se de ter as permissões necessárias para executar esses scripts no seu servidor ou para escanear repositórios. Sempre verifique e teste os scripts em um ambiente seguro antes de usá-los em produção.
Sinta-se à vontade para contribuir ou sugerir melhorias a este repositório enviando um pull request ou abrindo uma issue. Seu feedback e contribuições são muito apreciados!