← back
CVE-2022-22965criticalunder attackCWE-94

CVE-2022-22965

100Vexday Risk Score

Patch now. It under exploitation confirmed by CISA and has a working public exploit.

ssvc Actcvss 9.8epss 100%
from disclosure to weapon0 days
Published on NVDApr 1
1st PoCMar 26
metasploitMar 31
CISA KEV+3d
exploitation probability
100%top 1% of all CVEs
observed exploitation
yesCISA + VulnCheck
160 public exploit(s)
Action required by CISAfederal deadline: 2022-04-25

Apply updates per vendor instructions.

Summary

Falha de code injection (CWE-915, modificação não controlada de atributos de objeto) no data binding do Spring Framework, que ficou conhecida como Spring4Shell. Permite RCE remota e não autenticada, mas apenas sob um conjunto específico de pré-condições — JDK 9+, deploy como WAR em Tomcat e dependência de spring-webmvc ou spring-webflux — o que faz o impacto real ser muito menor do que o CVSS 9.8 sugere para a maioria dos deploys Spring Boot padrão (jar executável embutido).

Technical detail

O Spring DataBinder permite vincular parâmetros de requisição HTTP a propriedades de objetos Java expostos por um controller (o clássico padrão de data binding do Spring MVC/WebFlux). O problema é que esse binding, se não restringido, alcança propriedades encadeadas via getters/setters de reflexão — incluindo a cadeia class.classLoader, que no JDK 9+ passou a expor métodos adicionais no ClassLoader que não existiam (ou eram protegidos) em versões anteriores do Java.

Em um deploy WAR sob Apache Tomcat, essa cadeia dá acesso ao ClassLoader do próprio Tomcat, e a partir dele é possível alcançar objetos internos do container, como o AccessLogValve. Manipulando propriedades desse Valve (padrão de log, diretório, prefixo, sufixo, formato de data) via parâmetros de request, um atacante consegue fazer o Tomcat escrever um arquivo controlado por ele em um local dentro do diretório da aplicação web — efetivamente um write primitivo arbitrário disfarçado de configuração de logging.

É essencialmente uma reincidência de uma vulnerabilidade antiga do Spring (CVE-2010-1622), que havia sido mitigada mas voltou a ser explorável por causa da mudança de superfície do ClassLoader no JDK 9+ combinada com o comportamento padrão de exposição de propriedades encadeadas do DataBinder.

O atacante controla os valores dos parâmetros de request que o binder mapeia para as propriedades do objeto de destino; não precisa de nenhum input privilegiado, upload de arquivo ou endpoint administrativo — qualquer controller com data binding ativo em um objeto exposto é superfície potencial.

How it’s exploited

O vetor é uma requisição HTTP simples (GET ou POST) para qualquer endpoint da aplicação que faça data binding de parâmetros para um objeto — não precisa ser um endpoint sensível, qualquer form-backed object ou @ModelAttribute serve como porta de entrada. Não há autenticação envolvida na maioria dos casos documentados, o que torna a exploração pré-autenticação quando as pré-condições de ambiente são atendidas.

As pré-condições reais, e a informação mais importante da página, são: JDK 9 ou superior, Apache Tomcat como servlet container, aplicação empacotada como WAR (não como jar executável do Spring Boot, que é o padrão), e dependência direta de spring-webmvc ou spring-webflux. A VMware afirma explicitamente que a distribuição padrão do Spring Boot (jar executável) não é vulnerável a esse exploit específico, embora reconheça que a falha é mais geral e outros vetores de exploração podem existir fora desse cenário.

Uma vez satisfeitas as condições, o resultado documentado publicamente é escrita de um arquivo (tipicamente uma JSP webshell) dentro do diretório da aplicação via manipulação das propriedades do AccessLogValve do Tomcat, seguida de uma segunda requisição para acessar esse arquivo e obter execução de comando com os privilégios do processo do Tomcat. A CVE está no catálogo KEV da CISA — houve exploração ativa confirmada em campo, curto tempo entre disclosure e exploração massiva, e existe módulo Metasploit, template Nuclei e PoC pública, o que tornou a varredura em massa trivial nos dias seguintes ao anúncio.

Versions

Affected
Spring Framework 5.3.0 até 5.3.17; 5.2.19 e versões anteriores dessa ramificação (segundo a VMware/Tanzu).
Fixed in
5.3.18 (branch 5.3.x) e 5.2.20 (branch 5.2.x), disponíveis como OSS.

How to protect

A correção do fornecedor é atualizar o Spring Framework para 5.3.18 ou 5.2.20 (ou versões posteriores dessas ramificações). Segundo a VMware, nenhuma etapa adicional é necessária após o upgrade — a correção trata a causa raiz no data binder.

Quando o upgrade imediato não é viável, o próprio blog de anúncio antecipado da Spring (referenciado pela VMware) lista mitigações alternativas para quem não pode atualizar de imediato; essa página não reproduz os detalhes técnicos exatos dessas mitigações porque não estavam nas fontes lidas — consulte o post oficial 'Spring Framework RCE Early Announcement' para os passos específicos (customização de WebDataBinder, restrição de campos permitidos no binding, etc.).

O que não resolve por si só: apenas trocar de JDK 9+ para uma versão anterior não é uma mitigação suportada oficialmente, e depender exclusivamente do fato de 'estar em Spring Boot com jar executável' como mitigação é arriscado — a VMware é explícita que a falha é mais ampla que o exploit demonstrado contra WAR/Tomcat, e outros vetores podem existir. Ambientes com WAF podem tentar bloquear padrões de parâmetros como 'class.module.classLoader' ou 'class.classLoader' nas requisições como controle compensatório temporário, mas isso é paliativo e contornável, não substitui o patch.

How to detect

Em logs de acesso do Tomcat ou do WAF, procurar requisições HTTP (GET/POST) contendo parâmetros com os prefixos 'class.module.classLoader' ou 'class.classLoader' seguidos de propriedades como 'resources.context.parent.pipeline' — esse é o padrão característico usado nos PoCs públicos para alcançar o AccessLogValve do Tomcat. A presença de arquivos JSP inesperados recém-criados em diretórios da aplicação web, especialmente com nomes ou conteúdo incomuns, é outro indicador forte de exploração bem-sucedida (webshell plantado via write primitivo).

Como o vetor pode variar (a própria VMware reconhece que existem outras formas potenciais de exploração), a ausência desses padrões específicos nos logs não garante que não houve tentativa — trate a superfície do data binding como ponto amplo, não como assinatura única confiável.

Researched and written with AI from the vendor advisory and public analysis, with the sources above. Always confirm the fixed version in the official advisory before acting.
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.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Affected products
n/a · Spring Framework
public PoCs found160
githubgithub.com/BobTheShoplifter/Spring4Shell-POC377githubgithub.com/reznok/Spring4Shell-POC324githubgithub.com/tpt11fb/SpringVulScan154githubgithub.com/TheGejr/SpringShell131githubgithub.com/zangcc/CVE-2022-22965-rexbb102githubgithub.com/alt3kx/CVE-2022-22965101githubgithub.com/SecNN/SpringFramework_CVE-2022-22965_RCE72githubgithub.com/4nth0ny1130/spring4shell_behinder63githubgithub.com/Mr-xn/spring-core-rce50githubgithub.com/FourCoreLabs/spring4shell-exploit-poc44githubgithub.com/colincowie/Safer_PoC_CVE-2022-2296544githubgithub.com/tangxiaofeng7/CVE-2022-22965-Spring-Core-Rce39githubgithub.com/Kirill89/CVE-2022-22965-PoC32githubgithub.com/k3rwin/spring-core-rce28githubgithub.com/liangyueliangyue/spring-core-rce26githubgithub.com/p1ckzi/CVE-2022-2296523githubgithub.com/DDuarte/springshell-rce-poc19githubgithub.com/Bouquets-ai/CVE-2022-22965-GUItools17githubgithub.com/alt3kx/CVE-2022-22965_PoC17githubgithub.com/itsecurityco/CVE-2022-2296516githubgithub.com/wjl110/CVE-2022-22965_Spring_Core_RCE16githubgithub.com/me2nuk/CVE-2022-2296514githubgithub.com/viniciuspereiras/CVE-2022-22965-poc13githubgithub.com/zer0yu/CVE-2022-2296512githubgithub.com/fracturelabs/go-scan-spring12githubgithub.com/gpiechnik2/nmap-spring4shell8githubgithub.com/sunnyvale-it/CVE-2022-22965-PoC7githubgithub.com/Wrin9/CVE-2022-229657githubgithub.com/wikiZ/springboot_CVE-2022-229656githubgithub.com/GuayoyoCyber/CVE-2022-229656githubgithub.com/mariomamo/CVE-2022-229655githubgithub.com/khidottrivi/CVE-2022-229654githubgithub.com/nu0l/CVE-2022-229654githubgithub.com/iloveflag/Fast-CVE-2022-229654githubgithub.com/Loneyers/Spring4Shell4githubgithub.com/wshon/spring-framework-rce4githubgithub.com/0xrobiul/CVE-2022-229653githubgithub.com/BKLockly/CVE-2022-229653githubgithub.com/likewhite/CVE-2022-229653githubgithub.com/netcode/Spring4shell-CVE-2022-22965-POC3githubgithub.com/CalumHutton/CVE-2022-22965-PoC_Payara3githubgithub.com/twseptian/cve-2022-229652githubgithub.com/rwincey/spring4shell-CVE-2022-229652githubgithub.com/bL34cHig0/Telstra-Cybersecurity-Virtual-Experience-2githubgithub.com/LudovicPatho/CVE-2022-22965_Spring4Shell2githubgithub.com/irgoncalves/irule-cve-2022-229652githubgithub.com/datawiza-inc/spring-rec-demo2githubgithub.com/jakabakos/CVE-2022-22965-Spring4Shell2githubgithub.com/D1mang/Spring4Shell-CVE-2022-229652githubgithub.com/fracturelabs/spring4shell_victim2githubgithub.com/gokul-ramesh/Spring4Shell-PoC-exploit1githubgithub.com/cxzero/CVE-2022-22965-spring4shell1githubgithub.com/Joe1sn/CVE-2022-229651githubgithub.com/daniel0x00/Invoke-CVE-2022-22965-SafeCheck1githubgithub.com/Snip3R69/spring-shell-vuln1githubgithub.com/salo-404/firewall1githubgithub.com/clemoregan/SSE4-CVE-2022-229651githubgithub.com/c4mx/CVE-2022-22965_PoC1githubgithub.com/mylo-2001/GhostStrike1githubgithub.com/lcarea/CVE-2022-229651githubgithub.com/helsecert/CVE-2022-229651githubgithub.com/YUTING-HUANG0/Spring4Shell-CTF0githubgithub.com/snicoll-scratches/spring-boot-cve-2022-229650githubgithub.com/mebibite/springhound0githubgithub.com/mwojterski/cve-2022-229650githubgithub.com/0xr1l3s/CVE-2022-229650githubgithub.com/luoqianlin/CVE-2022-229650githubgithub.com/t3amj3ff/Spring4ShellPoC0githubgithub.com/fransvanbuul/CVE-2022-22965-susceptibility0githubgithub.com/te5t321/Spring4Shell-CVE-2022-22965.py0githubgithub.com/Omaraitbenhaddi/-Spring4Shell-CVE-2022-22965-0githubgithub.com/Enokiy/spring-RCE-CVE-2022-229650githubgithub.com/ClemExp/CVE-2022-22965-PoC0githubgithub.com/devengpk/CVE-2022-229650githubgithub.com/ajith737/Spring4Shell-CVE-2022-22965-POC0githubgithub.com/c33dd/CVE-2022-229650githubgithub.com/dbgee/Spring4Shell0githubgithub.com/sohamsharma966/Spring4Shell-CVE-2022-229650githubgithub.com/LucasPDiniz/CVE-2022-229650githubgithub.com/ESSAFAR/Firewall-Rules0githubgithub.com/xsxtw/SpringFramework_CVE-2022-22965_RCE0githubgithub.com/Aur3ns/Block-Spring4Shell0githubgithub.com/guigui237/Expoitation-de-la-vuln-rabilit-CVE-2022-229650githubgithub.com/jashan-lefty/Spring4Shell0githubgithub.com/brunoh6/web-threat-mitigation0githubgithub.com/osungjinwoo/CVE-2022-229650githubgithub.com/Nosie12/fire-wall-server0githubgithub.com/shoucheng3/spring-projects__spring-framework_CVE-2022-22965_5-2-19-RELEASE0githubgithub.com/NickoPS87/Spring4Shell-Python-Firewall-POC0githubgithub.com/xenosf/CS4239-Spring4Shell-POC0githubgithub.com/nhattanhh/CVE-2022-229650githubgithub.com/Shakur1314/CVE-2022-22965-Spring4Shell-Security-Operations-Analysis0githubgithub.com/suyash-R-K/dfir-malware-investigation0githubgithub.com/aditidutta696-dev/Spring4Shell-CVE-2022-22965-Exploitation-Attempt0githubgithub.com/0xBlackash/CVE-2022-229650githubgithub.com/felisha-elmer/Sandbox-Challenge-Spring4Shell-CVE-2022-22965-0githubgithub.com/march0n/PoC-CVE-2022-22965-Spring4Shell0githubgithub.com/ernestom-commits/jfrog-apptrust-demo0vulncheckvulncheck.com/xdb/b352d0391cf6unverifiedvulncheckvulncheck.com/xdb/a3bc31588469unverifiedvulncheckvulncheck.com/xdb/0e01e1f9bd5aunverifiedvulncheckvulncheck.com/xdb/a1ab2e7f37bdunverifiedvulncheckvulncheck.com/xdb/cdc0fd2e25dcunverifiedvulncheckvulncheck.com/xdb/697638d15686unverifiedvulncheckvulncheck.com/xdb/b383e52d60ddunverifiedvulncheckvulncheck.com/xdb/30bd37a7b9c8unverifiedvulncheckvulncheck.com/xdb/32aee2a0b3b4unverifiedvulncheckvulncheck.com/xdb/b2f106eac2b1unverifiedvulncheckvulncheck.com/xdb/4ae197406cecunverifiedvulncheckvulncheck.com/xdb/3532ae2b1db3unverifiedvulncheckvulncheck.com/xdb/44a4aa67f46dunverifiedvulncheckvulncheck.com/xdb/a2a434dff59dunverifiedvulncheckvulncheck.com/xdb/f697d4d9577bunverifiedvulncheckvulncheck.com/xdb/16f47f13dfb3unverifiedvulncheckvulncheck.com/xdb/e538f647f0f7unverifiedvulncheckvulncheck.com/xdb/43e4620d8285unverifiedvulncheckvulncheck.com/xdb/2f1e13cd31bbunverifiedvulncheckvulncheck.com/xdb/99a67c155fa1unverifiedvulncheckvulncheck.com/xdb/598802190749unverifiedvulncheckvulncheck.com/xdb/a99dfc9a1fa0unverifiedvulncheckvulncheck.com/xdb/a00bd5404625unverifiedvulncheckvulncheck.com/xdb/2fa78259b5d9unverifiedvulncheckvulncheck.com/xdb/1d2c273a6a58unverifiedvulncheckvulncheck.com/xdb/41c3baef6240unverifiedvulncheckvulncheck.com/xdb/c5654abe65ddunverifiedvulncheckvulncheck.com/xdb/2d17c8128624unverifiedvulncheckvulncheck.com/xdb/20accf3817faunverifiedvulncheckvulncheck.com/xdb/3f8ffc5be01funverifiedvulncheckvulncheck.com/xdb/b98563f18c75unverifiedvulncheckvulncheck.com/xdb/ba950aab55adunverifiedvulncheckvulncheck.com/xdb/c982d62ac774unverifiedvulncheckvulncheck.com/xdb/7f595932a60cunverifiedvulncheckvulncheck.com/xdb/f1130a964b4funverifiedvulncheckvulncheck.com/xdb/94d4cd3e1504unverifiedvulncheckvulncheck.com/xdb/01a71759b184unverifiedvulncheckvulncheck.com/xdb/ae290b96b916unverifiedvulncheckvulncheck.com/xdb/a06a094eaf77unverifiedvulncheckvulncheck.com/xdb/5978e9609a96unverifiedcve_referencepacketstormsecurity.com/files/167011/Spring4Shell-Spring-Framework-Class-Property-Remote-Code-Execution.htmlunverifiedvulncheckvulncheck.com/xdb/813cebc364f3unverifiedcve_referencepacketstormsecurity.com/files/166713/Spring4Shell-Code-Execution.htmlunverifiedvulncheckvulncheck.com/xdb/7c26b11a86f0unverifiedvulncheckvulncheck.com/xdb/cb8af208c905unverifiedvulncheckvulncheck.com/xdb/079a4eabc6cbunverifiedvulncheckvulncheck.com/xdb/6db677f753b7unverifiedvulncheckvulncheck.com/xdb/4b35b8084b29unverifiedvulncheckvulncheck.com/xdb/a73d53d733d9unverifiedvulncheckvulncheck.com/xdb/29679c6bfbb1unverifiedvulncheckvulncheck.com/xdb/fabec78da0ffunverifiedvulncheckvulncheck.com/xdb/e2354921ce12unverifiedvulncheckvulncheck.com/xdb/5e9e936704a6unverifiedvulncheckvulncheck.com/xdb/16356d1c89dbunverifiedvulncheckvulncheck.com/xdb/dd66e42c90b5unverifiedvulncheckvulncheck.com/xdb/c3b4b774db0eunverifiedvulncheckvulncheck.com/xdb/0560b073b083unverifiedvulncheckvulncheck.com/xdb/30d6ff807f1funverifiedvulncheckvulncheck.com/xdb/6f90b74eefe8unverifiedvulncheckvulncheck.com/xdb/8b60ecb426c1unverifiedvulncheckvulncheck.com/xdb/95e0360c39a0unverifiedvulncheckvulncheck.com/xdb/303de791b29cunverified
⚠ Public resources, to assess the exposure of systems you control or are authorized to test. Test only with authorization.