Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2025-65945-poc — Prueba de concepto para CVE-2025-65945 (Verificación inadecuada de la firma criptográfica en node-jws) | Kitploit
Herramientas/GitHubGitHub/jedisct1/cve-2025-65945-poc
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebCriptografíaPruebas de PenetraciónAutenticación
GitHubjedisct1/cve-2025-65945-poc

CVE-2025-65945-poc

Prueba de concepto para CVE-2025-65945 (Verificación inadecuada de la firma criptográfica en node-jws)

Ver Repositorio
512hace 8 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2025-65945: Bypass de verificación de firma en node-jws

Esto es una prueba de concepto para un bypass de verificación de firma en la librería node-jws. El error permite a atacantes falsificar JWTs válidos cuando el servidor deriva secretos HMAC de datos controlados por el usuario.

¿Cuál es el error?

La función jws.createVerify() no valida que se haya proporcionado un secreto cuando se usan algoritmos HMAC. Si tu aplicación busca secretos basándose en algo del JWT (como un encabezado kid) y esa búsqueda falla, podrías terminar verificando con un secreto vacío.

Un atacante puede explotar esto:

  1. Enviando un JWT con un ID de clave falso que no exista en tu base de datos
  2. Firmando su payload malicioso con una cadena vacía como secreto
  3. La búsqueda de tu servidor devuelve undefined, que se convierte a cadena vacía
  4. Ambos lados ahora coinciden en el "secreto" (cadena vacía), por lo que la firma se valida

El atacante puede ahora suplantar a cualquier persona o concederse privilegios de administrador.

Versiones afectadas

  • jws 3.2.2 y anteriores
  • jws 4.0.0

Actualiza a 3.2.3+ o 4.0.1+ para solucionarlo.

Ejecutando el PoC

Asegúrate de tener Bun instalado, luego:

root@kitploit:~
# Instalar la versión vulnerable
bun install [email protected]

# Ejecutar el exploit
bun run exploit.js

Deberías ver una salida que muestra un token de administrador falsificado siendo aceptado como válido.

¿Qué hace el exploit?

El PoC simula un servidor que:

  • Tiene un almacén de secretos con un par de claves API
  • Busca secretos basándose en el encabezado kid (ID de clave) del JWT
  • Usa createVerify() con la API de streaming

El atacante crea un JWT con kid: "non-existent-key" y lo firma con un secreto vacío. Cuando el servidor intenta buscar esta clave, obtiene undefined, escribe una cadena vacía en el flujo de verificación, y el token falsificado pasa la validación.

Probando la corrección

root@kitploit:~
# Actualizar a la versión parcheada
bun install [email protected]

# Ejecutar de nuevo – debería fallar ahora
bun run exploit.js

Con la versión parcheada, verás un error: secret must be a string or buffer or a KeyObject. La corrección valida que las operaciones HMAC tengan un secreto adecuado antes de proceder.

El patrón de código vulnerable

Si tu código se parece a esto, podrías estar afectado:

root@kitploit:~
const decoded = jws.decode(token);
const secret = lookupSecret(decoded.header.kid); // podría devolver undefined!

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

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

Referencias

  • GitHub Advisory
  • Commit de corrección
Descargar herramienta