
Detecções para CVE-2021-44228 dentro de binários aninhados
Este repositório contém um conjunto de regras YARA para detectar versões do log4j que são vulneráveis a CVE-2021-44228, CVE-2021-45046 e/ou CVE-2021-45105, procurando uma série de características presentes nas versões afetadas.
Esta ferramenta opera recursivamente em arquivos binários, como imagens Docker, pacotes de sistema, imagens de sistema de arquivos e até mesmo mídias de instalação. Veja a seção "Como funciona?" para uma lista completa dos formatos de arquivo suportados.
JndiManager (< 2.15.0).Interpolator que não importam JndiManager (< 2.16.0).AbstractConfiguration que não importam ConfigurationStrSubstitutor (< 2.17.0).Embora existam vários recursos disponíveis para detectar o uso inseguro do log4j usando CodeQL ou Semgrep, ainda não foram disponibilizados recursos para detecção de versões potencialmente vulneráveis do log4j dentro de artefatos binários.
Isso representa um desafio para organizações que executam aplicações empresariais que não foram desenvolvidas internamente, ou onde o código-fonte não está imediatamente disponível para as equipes que realizam a triagem inicial.
Como essa vulnerabilidade provavelmente aparecerá em vários locais "inesperados", essa ferramenta tem como objetivo auxiliar na detecção de versões vulneráveis do log4j dentro de artefatos compilados, que podem então ser revisados manualmente para determinar a possibilidade de exploração.
Código ofuscado resultará em falsos negativos, onde um componente potencialmente vulnerável não pode ser detectado devido ao uso de ofuscação.
Para executar esta ferramenta, clone este repositório e siga os passos abaixo. Presume-se que Docker e jq estejam instalados.
artifacts/./quickstart.sh)Alternativamente, a execução pode ser personalizada usando o seguinte comando:
docker run \
--rm \
--mount type=bind,source=$(pwd)/artifacts,target=/mnt/stacs/input \
--mount type=bind,source=$(pwd)/rules,target=/mnt/stacs/rules \
stacscan/stacs:latest \
--rule-pack "/mnt/stacs/rules/vulnerability.json" \
"/mnt/stacs/input"
Se você deseja apenas procurar por CVE-2021-44228, o seguinte comando pode ser usado:
docker run \
--rm \
--mount type=bind,source=$(pwd)/artifacts,target=/mnt/stacs/input \
--mount type=bind,source=$(pwd)/rules,target=/mnt/stacs/rules \
stacscan/stacs:latest \
--rule-pack "/mnt/stacs/rules/CVE-2021-44228.json" \
"/mnt/stacs/input"
Se você deseja apenas procurar por CVE-2021-45046, o seguinte comando pode ser usado:
docker run \
--rm \
--mount type=bind,source=$(pwd)/artifacts,target=/mnt/stacs/input \
--mount type=bind,source=$(pwd)/rules,target=/mnt/stacs/rules \
stacscan/stacs:latest \
--rule-pack "/mnt/stacs/rules/CVE-2021-45046.json" \
"/mnt/stacs/input"
Se você deseja apenas procurar por CVE-2021-45105, o seguinte comando pode ser usado:
docker run \
--rm \
--mount type=bind,source=$(pwd)/artifacts,target=/mnt/stacs/input \
--mount type=bind,source=$(pwd)/rules,target=/mnt/stacs/rules \
stacscan/stacs:latest \
--rule-pack "/mnt/stacs/rules/CVE-2021-45105.json" \
"/mnt/stacs/input"
Esta ferramenta também pode ser executada sem Docker. Consulte as instruções de instalação do STACS para saber como instalar o STACS sem Docker.
Para escanear uma imagem Docker, ela primeiro precisa ser exportada para o diretório artifacts para escaneamento. Isso pode ser feito usando o seguinte comando:
IMAGE="alpine:latest"
NAME="alpine_latest"
docker export $(docker create ${IMAGE}) -o artifacts/${NAME}.tar
Alternativamente, um contêiner em execução pode ser exportado usando apenas:
# Replace CONTAINER_ID with the correct container identifier.
CONTAINER_ID="c29209118f9a"
NAME="widget_example"
docker export ${CONTAINER_ID} -o artifacts/${NAME}.tar
Você precisará investigar o uso de log4j na aplicação para entender se o
produto é vulnerável. Se isso não for possível, devido à falta de acesso ao código-fonte ou
outros motivos, você deve verificar se o fornecedor publicou algum aviso sobre o
assunto.
Não há garantia de que a inclusão de uma versão vulnerável do log4j signifique que o produto é vulnerável!
Se você não encontrar nenhum aviso, entre em contato com o fornecedor para perguntar sobre o impacto dessa vulnerabilidade no produto.
Consulte também as mitigações publicadas pelo projeto log4j. Alternativamente, e de preferência, atualize para uma versão não afetada do log4j.
Embora não tenha sido projetada para esse fim, esta ferramenta usa o mecanismo STACS para decomposição e análise em massa de binários.
STACS é um scanner estático de credenciais baseado em YARA que suporta formatos de arquivos binários, análise de arquivos aninhados, conjuntos de regras e listas de exclusão componíveis e relatórios SARIF.
Como exemplo, esta ferramenta pode analisar um tarball que contém uma imagem Docker exportada, que contém um JAR em algum lugar do sistema de arquivos afetado por esta vulnerabilidade.
Ela também pode analisar arquivos aninhados nos formatos tar, jar, war, ear, zip, apk, bz2, tgz,
xz, rpm, iso, etc.
Abra uma issue no Github descrevendo o problema e, quando possível, com um link para o artefato binário afetado.
Pull requests para ajustar os conjuntos de regras também seriam muito apreciados!
Consulte o diretório validation/ para obter um conjunto de arquivos de log da validação deste conjunto de regras.