Spring4Shell chega ao Glassfish e ao Payara: mesma vulnerabilidade, novo exploit
8 de abril de 2022
0 minutos de leituraNa semana passada, anunciamos a descoberta do Spring4Shell — uma vulnerabilidade de execução remota de código (RCE) em versões antigas do pacote spring-beans. Em nossa publicação Spring4Shell: explicação da vulnerabilidade zero-day de RCE no Spring Framework, mostramos como um exploit antigo do Tomcat para CVE-2010-1622 voltou a ser relevante. Devido à natureza do problema, esperávamos que outros payloads pudessem ser criados além do exploit conhecido para Tomcat. Hoje, nossa equipe de pesquisa de segurança confirmou que isso aconteceu. Agora há exploits semelhantes para Glassfish e Payara que aproveitam o mesmo problema no Spring, mas usam um payload diferente. A equipe do Payara foi informada sobre nossa descoberta, o que ajudou a confirmar a própria análise de que determinadas configurações do Payara poderiam estar vulneráveis.
Mas, antes de tudo, esta NÃO é uma nova vulnerabilidade. É apenas um novo exploit que confirma nossa expectativa de que o problema é mais amplo do que o caso inicial do Tomcat. Embora o Payara vá publicar uma correção emergencial para as versões afetadas do Payara Community e do Payara Enterprise, nossa recomendação de correção continua a mesma. Atualize o pacote spring-beans para a versão 5.3.18 ou 5.2.20 ou superior. Queremos reforçar que é absolutamente necessário atualizar para as versões mais recentes desse pacote. Essa deve ser sua prioridade, acima de qualquer outra coisa.
Encontrando mais propriedades graváveis para explorar
A equipe de pesquisa de segurança da Snyk usou a função abaixo para descobrir quais atributos graváveis estavam disponíveis no servidor de aplicações específico. Criada por Kirill Efimov, da nossa equipe de P&D em segurança, a função usa a API do Spring para percorrer todas as propriedades disponíveis e criar uma lista daquelas que podem ser usadas em uma possível invasão.
Ao chamar esta função HashSet<String> result = HandlingFormSubmissionApplication.findWritablePds(greeting, "", 100, null); no seu endpoint, você pode listar e inspecionar as propriedades com facilidade.
Explorando o servidor Glassfish / Payara
O GlassFish é um servidor de aplicações semelhante ao Tomcat. Não vamos entrar nos detalhes das diferenças, pois isso não é realmente relevante. O servidor Payara deriva do GlassFish e tem muitas semelhanças com ele. No entanto, são produtos diferentes: o Payara tem mais recursos do que o GlassFish original. A equipe do Payara escreveu uma excelente publicação no blog sobre essas diferenças, embora elas não sejam relevantes para este exploit.
Vamos usar a mesma aplicação da nossa publicação anterior no blog, mas agora implantá-la no Payara Server (Community) 5.2022.1. Ao usar a função do parágrafo anterior, descobrimos que os seguintes atributos podem ser gravados:
Uma das propriedades particularmente interessantes é class.module.classLoader.resources.dirContext.docBase, que usaremos em nosso novo exploit.
No exploit abaixo, usamos essa propriedade para definir o docBase como /. Como a raiz agora está definida como a raiz real da máquina, podemos acessar arquivos normalmente indisponíveis. O exemplo abaixo mostra que agora podemos baixar o conteúdo do arquivo /etc/passwd chamando:
Exploit
Nem é preciso dizer que isso é algo que você não quer que aconteça, pois agora podemos ler quaisquer arquivos do sistema de arquivos. Isso pode revelar informações valiosas para que pessoas mal-intencionadas preparem ataques subsequentes ou expor dados de usuários.
O projeto completo do exploit, criado por Calum Hutton, pesquisador de segurança da Snyk, está publicado no GitHub.
Atualize o Spring Framework o quanto antes
Vale repetir: esta NÃO é uma nova vulnerabilidade, mas outro exemplo de como explorar a mesma vulnerabilidade Spring4Shell em um servidor diferente. A principal lição é que esse problema no Spring não se limita ao Tomcat. O problema no próprio Spring é bastante amplo, e podemos acabar vendo muitos exploits diferentes para vários servidores. Portanto, ainda que não haja um exploit conhecido para o seu caso de uso, isso não significa que você não esteja vulnerável!
O melhor que você pode fazer — e, na minha opinião, deve fazer — é atualizar o Spring Framework (ou, pelo menos, o pacote spring-beans) para a versão mais recente. Pelo que podemos constatar, a atualização do pacote corrige esta vulnerabilidade, independentemente da aplicação que você usa.
A Snyk ajuda você a manter tudo sob controle com verificações regulares das suas aplicações. A Snyk alerta você e sua equipe quando novas vulnerabilidades são detectadas e recomenda as próximas etapas para manter suas aplicações seguras. Está esperando o quê? Comece a atualizar!
Comece a participar de desafios de Capture the Flag
Aprenda a resolver desafios de Capture the Flag assistindo sob demanda ao nosso workshop virtual introdutório.
