AJP Proxy - CVE-2020-1938 - POC

Na documentação oficial, o AJP (Apache JServ Protocol) ou JK é definido como um protocolo wire. É uma versão otimizada do HTTP que permite um servidor web (Ex.: Apache, NGinx) se comunicar com o Tomcat. A documentação oficial do AJP pode ser acessada no link AQUI

A ideia é que o conteúdo estático seja disposnibilizado pelo servidor web e os outros conteúdos sejam disponibilizados pelo servidor Tomcat através de requisições para o servidor configurado como proxy upstream. 

Durante um pentest ou ataque, ao encontrar a porta 8009 do AJP, é possível configurar um servidor web com o módulo AJP e na configuração adicionar o servidor-alvo como o proxy upstream. No exemplo abaixo, o servidor web "atacante" é o NGinx. 

CVE-2020-1938 - Ghostcat - Tomcat AJP File Read/Inclusion

O Tomcat trata as conexões AJP como confiáveis. Nas versões do Apache Tomcat 9.0.0.M1 até 9.0.0.30, 8.5.0 até 8.5.50 e 7.0.0 até 7.0.99, o AJP é habilitado por padrão. A recomendação é que o AJP seja desabilitado caso não seja necessário. 

A vulnerabilidade reportada informa que um atacante remoto não autenticado pode ler arquivos da aplicação web. Nas aplicações en que o upload de arquivos é permitido, um atacante pode fazer o upload de arquivos do tipo JSP (JavaServer Pages) e executar código remotamente (Remote Code Execution - RCE). 

POC - Prova de Conceito

Para executar a exploração do AJP no servidor-alvo, usei uma instancia do NGinx onde configurei no /etc/nginx/conf/nginx.conf o servidor-alvo como proxy upstream. Veja abaixo.

No ambiente de produção, o servidor-alvo deve ser configurado usando a porta do AJP 8009. No exemplo, a porta usada é outra pois trata-se de um ambiente de teste. Quando o servidor-alvo receber a requisição vinda do NGinx a porta 30682 será redirecionada para 8009. 



Após adicionar no nginx.conf o servidor-alvo, basta acessar fazendo uma requisição simples para o servidor web "atacante" http://127.0.0.1:80


Dessa forma, é possível confirmar a vulnerabilidade pois a partir do servidor web "atacante" foi possível acessar a página default do Tomcat no servidor-alvo. 

Em um ambiente real, o Apache Tomcat pode não estar acessível diretamente, mas se o AJP estiver habilitado, através desse módulo, é possível explorar a vulnerabilidade. 

Exploit-DB Publicação

O exploit 48143 foi publicado em 20/02/2020 com o script em python para explorar a vulnerabilidade. O autor do exploit é ydhcui


Referências:

[+] CVE-2020-1938

https://nvd.nist.gov/vuln/detail/CVE-2020-1938

[+] Exploit-DB Publicação

https://www.exploit-db.com/exploits/48143




Comentários

Postagens mais visitadas