Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
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-2025-65945-poc — PoC para CVE-2025-65945 (Verificação Impropria de Assinatura Criptográfica em node-jws) | Kitploit
Ferramentas/GitHubGitHub/jedisct1/cve-2025-65945-poc
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebCriptografiaTestes de PenetraçãoAutenticação
GitHubjedisct1/cve-2025-65945-poc

CVE-2025-65945-poc

PoC para CVE-2025-65945 (Verificação Impropria de Assinatura Criptográfica em node-jws)

Ver Repositório
517há 9 mesesAinda 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-2025-65945: Bypass de Assinatura do node-jws

Esta é uma prova de conceito para um bypass de verificação de assinatura na biblioteca node-jws. O bug permite que atacantes forjem JWTs válidos quando o servidor deriva segredos HMAC de dados controlados pelo usuário.

Qual é o bug?

A função jws.createVerify() não valida se um segredo foi realmente fornecido ao usar algoritmos HMAC. Se seu aplicativo consulta segredos com base em algo no JWT (como um cabeçalho kid) e essa consulta falha, você pode acabar verificando contra um segredo vazio.

Um atacante pode explorar isso ao:

  1. Enviar um JWT com um ID de chave falso que não existe no seu banco de dados
  2. Assinar seu payload malicioso com uma string vazia como segredo
  3. A consulta do seu servidor retorna undefined, que é convertido para string vazia
  4. Ambos os lados agora concordam com o "segredo" (string vazia), então a assinatura é validada

O atacante agora pode se passar por qualquer pessoa ou conceder a si mesmo privilégios de administrador.

Versões afetadas

  • jws 3.2.2 e anteriores
  • jws 4.0.0

Atualize para 3.2.3+ ou 4.0.1+ para corrigir isso.

Executando o PoC

Certifique-se de ter o Bun instalado, então:

# Install the vulnerable version
bun install [email protected]

# Run the exploit
bun run exploit.js

Você deve ver uma saída mostrando um token de administrador forjado sendo aceito como válido.

O que o exploit faz?

O PoC simula um servidor que:

  • Possui um armazenamento de segredos com algumas chaves de API
  • Consulta segredos com base no cabeçalho kid (ID da chave) do JWT
  • Usa createVerify() com a API de streaming

O atacante cria um JWT com kid: "non-existent-key" e o assina com um segredo vazio. Quando o servidor tenta consultar essa chave, ele obtém undefined, escreve uma string vazia no fluxo de verificação, e o token forjado passa na validação.

Testando a correção

# Upgrade to patched version
bun install [email protected]

# Run again - should fail now
bun run exploit.js

Com a versão corrigida, você verá um erro: secret must be a string or buffer or a KeyObject. A correção valida que operações HMAC têm um segredo adequado antes de prosseguir.

O padrão de código vulnerável

Se seu código se parece com isso, você pode estar afetado:

const decoded = jws.decode(token);
const secret = lookupSecret(decoded.header.kid); // might return undefined!

const verifier = jws.createVerify({
  algorithm: "HS256",
  signature: token,
});

verifier.secret.write(secret); // oops
verifier.secret.end();

Referências

  • Advertência do GitHub
  • Commit de correção
Baixar ferramenta