Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
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
spring-RCE-CVE-2022-22965 — Análise educacional e exploit de prova de conceito para CVE-2022-22965, uma vulnerabilidade de execução remota de código no Spring MVC/WebFlux via vinculação de dados em JDK 9+ com implantação WAR no Tomcat. | Kitploit
Ferramentas/GitHubGitHub/enokiy/spring-rce-cve-2022-22965
Análise de VulnerabilidadesAnálise de CódigoExploraçãoExploração de Aplicações WebAprendizado e Educação
GitHubenokiy/spring-rce-cve-2022-22965

spring-RCE-CVE-2022-22965

Análise educacional e exploit de prova de conceito para CVE-2022-22965, uma vulnerabilidade de execução remota de código no Spring MVC/WebFlux via vinculação de dados em JDK 9+ com implantação WAR no Tomcat.

Ver Repositório
11há 4 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

Introdução à Vulnerabilidade

Recentemente, a Spring revelou uma vulnerabilidade CVE de alto impacto. As informações do CVE indicam: "A Spring MVC or Spring WebFlux application running on JDK 9+ may be vulnerable to remote code execution (RCE) via data binding. The specific exploit requires the application to run on Tomcat as a WAR deployment. If the application is deployed as a Spring Boot executable jar, i.e. the default, it is not vulnerable to the exploit. However, the nature of the vulnerability is more general, and there may be other ways to exploit it." Esta análise estuda o princípio da vulnerabilidade através da reprodução do CVE.

API Java Bean

Antes de analisar o princípio da ligação de parâmetros do Spring MVC, vamos examinar algumas APIs relacionadas ao Java Bean.

  • Java Bean: Na verdade, é uma especificação. Quando uma classe atende a essa especificação, ela pode ser chamada por outras classes específicas. Uma classe usada como Java Bean contém um conjunto de propriedades privadas, com métodos públicos get/is() ou set() para ler e escrever as propriedades.
  • Introspector (Introspecção): The Introspector class provides a standard way for tools to learn about the properties, events, and methods supported by a target Java Bean. For each of those three kinds of information, the Introspector will separately analyze the bean's class and superclasses looking for either explicit or implicit information and use that information to build a BeanInfo object that comprehensively describes the target bean. (O Java fornece um tratamento padrão para propriedades, eventos e métodos de classes Java Bean. Por exemplo, ao procurar uma propriedade/método em uma classe bean, se não for encontrada na própria classe, a busca continua nas superclasses, seguindo essa convenção.)
  • BeanInfo: Introspect on a Java Bean and learn about all its properties, exposed methods, and events. If the BeanInfo class for a Java Bean has been previously Introspected then the BeanInfo class is retrieved from the BeanInfo cache. (Realiza a introspecção de um Java Bean e descobre todas as suas propriedades, métodos expostos e eventos. Se a classe BeanInfo de um Java Bean já foi inspecionada anteriormente, ela é recuperada do cache BeanInfo.)
  • PropertyDescriptor: Usado para descrever as propriedades expostas por um Java Bean através de um conjunto de métodos accessors.

Declare a seguinte classe Java Bean:```java public class User { private String name;

public User() {
}
public void setName(String name) {
    this.name = name;
}
public String getName() {
    return this.name;
}
public int getAge() {
    return 18;
}

}

Utilize o seguinte código de teste para ver as informações obtidas por `Introspector.getBeanInfo`:```java
@Test
    public  void testIntrospector() throws IntrospectionException {
        BeanInfo beanInfo = Introspector.getBeanInfo(User.class);
        for (PropertyDescriptor pdesc:beanInfo.getPropertyDescriptors()){
            System.out.println("Property: " + pdesc.getName() + ",Class:" + pdesc.getPropertyType());
        }
//        for (MethodDescriptor md:beanInfo.getMethodDescriptors()) {
//            System.out.println("Method: " + md.getName());
//        }
    }

[No source content provided to translate.]```text Property: age,Class:int Property: class,Class:class java.lang.Class Property: name,Class:class java.lang.String

Além do esperado 'age' e 'então', há também um atributo 'class', o nome da classe é 'Class'. Se continuar chamando Introspector.getBeanInfo(Class.class), você pode obter mais informações como 'classLoader', etc.:```text jdk11:
Property: annotatedInterfaces
Property: annotatedSuperclass
Property: annotation
Property: annotations
Property: anonymousClass
Property: array
Property: canonicalName
Property: class
Property: classLoader
Property: classes
Property: componentType
Property: constructors
Property: declaredAnnotations
Property: declaredClasses
Property: declaredConstructors
Property: declaredFields
Property: declaredMethods
Property: declaringClass
Property: enclosingClass
Property: enclosingConstructor
Property: enclosingMethod
Property: enum
Property: enumConstants
Property: fields
Property: genericInterfaces
Property: genericSuperclass
Property: interface
Property: interfaces
Property: localClass
Property: memberClass
Property: methods
Property: modifiers
Property: module
Property: name
Property: nestHost
Property: nestMembers
Property: package
Property: packageName
Property: primitive
Property: protectionDomain
Property: signers
Property: simpleName
Property: superclass
Property: synthetic
Property: typeName
Property: typeParameters

Além disso, compare a diferença das informações obtidas por Introspector.getBeanInfo(Class.class) em diferentes versões do JDK: acima está a saída no jdk-11, abaixo está a saída no JDK8:```text jdk8: Property: annotatedInterfaces Property: annotatedSuperclass Property: annotation Property: annotations Property: anonymousClass Property: array Property: canonicalName Property: class Property: classLoader Property: classes Property: componentType Property: constructors Property: declaredAnnotations Property: declaredClasses Property: declaredConstructors Property: declaredFields Property: declaredMethods Property: declaringClass Property: enclosingClass Property: enclosingConstructor Property: enclosingMethod Property: enum Property: enumConstants Property: fields Property: genericInterfaces Property: genericSuperclass Property: interface Property: interfaces Property: localClass Property: memberClass Property: methods Property: modifiers Property: name Property: package Property: primitive Property: protectionDomain Property: signers Property: simpleName Property: superclass Property: synthetic Property: typeName Property: typeParameters

[No input content provided to translate.]```text
Property: annotatedInterfaces
Property: annotatedSuperclass
Property: annotation
Property: annotations
Property: anonymousClass
Property: array
Property: canonicalName
Property: class
Property: classLoader
Property: classes
Property: componentType
Property: constructors
Property: declaredAnnotations
Property: declaredClasses
Property: declaredConstructors
Property: declaredFields
Property: declaredMethods
Property: declaringClass
Property: enclosingClass
Property: enclosingConstructor
Property: enclosingMethod
Property: enum
Property: enumConstants
Property: fields
Property: genericInterfaces
Property: genericSuperclass
Property: interface
Property: interfaces
Property: localClass
Property: memberClass
Property: methods
Property: modifiers
Property: module
Property: name
Property: package
Property: packageName
Property: primitive
Property: protectionDomain
Property: signers
Property: simpleName
Property: superclass
Property: synthetic
Property: typeName
Property: typeParameters

jdk9相比JDK8多出来两个属性module和packageName,而JDK11上除了module和packageName属性之外还有另外两个属性nestHost和nestMembers。

Baixar ferramenta