
Kubernetes DaemonSet que implanta um hotpatch de nível JVM para mitigar o Log4j2 CVE-2021-44228 desabilitando as pesquisas JNDI em todos os contêineres e host JVMs.
Este projeto está sendo descontinuado conforme descrito abaixo.
O projeto deixará de aceitar issues e não será atualizado a partir de 2023-01-01. Após esta data, este projeto não será suportado e nenhum novo release ou artefato associado a este projeto será gerado.
O repositório do projeto será permanentemente arquivado (tornado somente leitura) a partir de 2023-04-01.
Conforme observado na documentação original do projeto, isso sempre foi uma medida temporária para auxiliar os usuários do Kubernetes e forneceu apenas uma mitigação parcial da exposição de segurança do Log4j2 CVE-2021-44228 e CVE-2021-45046. É fortemente recomendado que todos os usuários do Log4j atualizem para uma versão corrigida do projeto para mitigar completamente qualquer risco associado a esses CVEs.
Os artefatos de release associados ao último release permanecerão permanentemente disponíveis para consumidores deste projeto que continuarem a implantá-lo em seus ambientes Kubernetes. Especificamente, o manifesto DaemonSet e a imagem de contêiner pública do ECR permanecerão disponíveis após a descontinuação, mas não serão mais suportados ou atualizados.
A AWS desenvolveu um RPM que realiza um hot-patch no nível da JVM que desabilita as consultas JNDI da biblioteca Log4j2, mitigando Log4j2 CVE-2021-44228 e CVE-2021-45046.
O agente de nó Apache Log4j2 CVE-2021-44228 é um projeto de código aberto construído pela equipe Kubernetes da AWS. Ele foi projetado para ser executado como um DaemonSet e mitigar o impacto do Log4j2 CVE-2021-44228, que afeta aplicações que executam versões do Apache Log4j2 < 2.15.0 ao processar entradas de fontes não confiáveis. Executar este DaemonSet corrigirá JVMs em execução em contêineres, bem como no host.
O que ele faz: Uma entrada cron será instalada em cada nó de trabalho que executa um processo que procura por JVMs em execução e injeta um agente que mitiga o CVE do Log4J2. Todas as JVMs, incluindo aquelas em execução em contêineres, serão corrigidas dessa forma. Atualmente, o processo de hot-patch está configurado para ser executado a cada 30 minutos com um jitter de 15 minutos. A janela efetiva pode variar de 15 a 45 minutos entre as execuções.
Nota: Você pode encontrar informações adicionais sobre a vulnerabilidade do Log4j2 e a resposta da AWS no Boletim de Segurança da AWS.
Nota: Em 20/04/22, a imagem (v0.0.16) foi atualizada com o patch mais recente para Amazon Linux 1 e 2. Se você instalou uma versão anterior deste DaemonSet e ele ainda está em execução, você deve reaplicar o arquivo daemonset.yaml para instalar o RPM mais recente. Se você não precisar mais do patch do log4j, deve excluir o DaemonSet e desinstalar o RPM, pois versões mais antigas do RPM (< 1.1-16) tinham uma vulnerabilidade que poderia permitir que um invasor escapasse de um contêiner e obtivesse acesso ao host subjacente.
Nota: a versão 1.3-5 aborda ALAS2-2022-1806 e ALAS-2022-1601. Consulte Amazon Linux "log4j hotpatch" <1.3-5 local privilege escalation to root para obter informações adicionais.
kubectl apply -f https://raw.githubusercontent.com/aws-samples/kubernetes-log4j-cve-2021-44228-node-agent/main/daemonset.yaml
Verifique um único pod:
kubectl get pods -l job=node-patch-installer -n node-configuration-daemonset
kubectl logs <pod-name> -c node-patch-installer -n node-configuration-daemonset
ou obtenha confirmação para cada nó:
kubectl logs -l job=node-patch-installer -c node-patch-installer -n node-configuration-daemonset | grep 'installed'
Se a instalação foi bem-sucedida, a última linha no arquivo de log exibirá installed and verified, caso contrário, um erro será registrado.
daemonset.yaml para refletir a nova URI:tag da imagem e, em seguida, aplique o manifesto ao seu cluster.Os recursos JNDI do Apache Log4j2 < 2.15.0 usados na configuração, mensagens de log e parâmetros não protegem contra LDAP controlado por atacante e outros endpoints relacionados ao JNDI. Um atacante que pode controlar mensagens de log ou parâmetros de mensagens de log pode executar código arbitrário carregado de servidores LDAP quando a substituição de pesquisa de mensagens está habilitada. A partir das versões do Log4j2 < 2.15.0, esse comportamento foi desabilitado por padrão. Detalhes completos podem ser encontrados no boletim CVE.
Você pode encontrar informações adicionais sobre a vulnerabilidade do Log4j2 no Boletim de Segurança da AWS.
A AWS desenvolveu um RPM que realiza um hot-patch no nível da JVM, desabilitando as consultas JNDI da biblioteca Log4j2, mitigando o problema do Log4j2 para JVMs no host, bem como para JVMs em execução em contêineres. Este projeto empacota o RPM como um DaemonSet do Kubernetes.
Quando instalado, um processo será executado em cada nó de trabalho que procura por JVMs em execução e injeta um agente na JVM para mitigar a vulnerabilidade do Log4j2. O agente tenta corrigir o método lookup() de todas as instâncias carregadas de org.apache.logging.log4j.core.lookup.JndiLookup para retornar incondicionalmente a string Patched JndiLookup::lookup(). Isso foi projetado para abordar a vulnerabilidade de execução remota de código CVE-2021-44228 no Log4j2 sem reiniciar o processo Java.
Este processo, por padrão, está configurado para ser executado a cada 30 minutos e adicionará uma camada de proteção em clusters onde as aplicações ainda não foram corrigidas com uma dependência atualizada do Log4j2.
Você pode encontrar mais detalhes sobre o hot-patch no blog de código aberto da AWS.
A imagem do contêiner está hospedada no repositório público do ECR da aws-containers.