CVE-2026-27971: 
JavaScript vulnerability analysis and mitigation

Overview

CVE-2026-27971 is a critical unauthenticated Remote Code Execution (RCE) vulnerability in the Qwik JavaScript framework, caused by unsafe deserialization in the server$ RPC mechanism. It affects all versions of @builder.io/qwik up to and including 1.19.0, and impacts any deployment where Node.js require() is available at runtime. The vulnerability was published on March 2, 2026, by researcher sebastianosrt, and patched in version 1.19.1. It carries a CVSS v3.1 score of 9.8 (Critical) and a CVSS v4.0 score of 9.2 (Critical) (GitHub Advisory, Qwik Advisory).

Technical details

The root cause is improper deserialization of untrusted data (CWE-502) within Qwik's server$ RPC mechanism, which is used to expose server-side functions callable from the client. An attacker can craft a malicious HTTP request containing a serialized payload that, when deserialized server-side, triggers arbitrary code execution via Node.js's require() function — a classic gadget-chain-based deserialization attack pattern (CAPEC-586: Object Injection). No authentication, user interaction, or special privileges are required; the attack is fully network-accessible. The vulnerability is only exploitable in deployments where require() is available at runtime, which is typical of standard Node.js server environments (GitHub Advisory, Qwik Advisory).

Impact

Successful exploitation grants an unauthenticated remote attacker full code execution on the server running the Qwik application, resulting in complete compromise of confidentiality, integrity, and availability. Attackers can exfiltrate sensitive data, modify or destroy application data, establish persistent backdoors, and potentially pivot laterally within the hosting infrastructure. The single-request exploitation model makes this vulnerability trivially automatable at scale (GitHub Advisory, Feedly).

Exploitability

As of the time of reporting, no public proof-of-concept exploit code has been confirmed, and no active in-the-wild exploitation has been observed (Feedly). However, a Nuclei detection template was developed and merged into the ProjectDiscovery nuclei-templates repository, indicating active tooling interest from the security community (Nuclei Templates). The EPSS score is approximately 13.4% (per Feedly data) to 26.2% (per GitHub Advisory Database, 96th percentile), reflecting elevated exploitation probability. The vulnerability is not currently listed in the CISA Known Exploited Vulnerabilities (KEV) catalog. Emerging Threats released network detection rules for this CVE in their March 17, 2026 ruleset update (Emerging Threats).

Exploitation steps

  1. Reconnaissance: Identify internet-facing Qwik applications running @builder.io/qwik ≤1.19.0 using tools like Shodan, Censys, or by inspecting npm package metadata in publicly accessible package.json files.
  2. Identify the server$ RPC endpoint: Locate the HTTP endpoint exposed by Qwik's server$ mechanism, typically a POST endpoint that accepts serialized function call data from the client (e.g., /qwik-city-server-data.json or similar framework-specific routes).
  3. Craft a malicious deserialization payload: Construct a serialized payload exploiting a known Node.js deserialization gadget chain (e.g., using libraries like node-serialize or similar patterns) that triggers require() with a controlled module path or executes OS commands upon deserialization.
  4. Send the exploit request: Deliver the crafted payload via a single HTTP POST request to the server$ RPC endpoint without any authentication headers or session tokens.
  5. Achieve code execution: The server deserializes the payload and executes the embedded code as the Node.js process user, enabling reverse shell establishment, credential harvesting, or further lateral movement (Qwik Advisory, SecurityOnline).

Indicators of compromise

  • Network: Unexpected or anomalous HTTP POST requests to Qwik server$ RPC endpoints (e.g., paths containing qwik-city-server-data or similar framework-specific patterns) with unusually large or binary-encoded request bodies; outbound connections from the Node.js server process to unknown external IPs or C2 infrastructure.
  • Logs: Web server access logs showing POST requests to server$ endpoints from unfamiliar source IPs, especially with non-standard Content-Type headers or encoded payloads; Node.js error logs showing deserialization exceptions or unexpected module load attempts.
  • Process: Unusual child processes spawned by the Node.js server process (e.g., sh, bash, curl, wget, python, nc); unexpected network listeners opened by the Node.js process.
  • File System: New or modified files in the application directory, especially scripts or binaries not part of the original deployment; new cron jobs or systemd services created by the application service account; web shells dropped in publicly accessible directories.

Mitigation and workarounds

The vulnerability is fixed in @builder.io/qwik version 1.19.1; all users should upgrade immediately (GitHub Advisory, Qwik Advisory). For deployments where immediate patching is not feasible, restrict network access to the Qwik application using firewall rules or WAF policies, and disable the server$ RPC mechanism if it is not essential to application functionality. Review server logs for suspicious HTTP requests targeting server$ endpoints as a detection measure while patching is pending (Feedly).

Community reactions

SecurityOnline covered the vulnerability with an article titled "Critical RCE Flaw in Qwik Framework Allows Server Takeover via Single Request," highlighting the severity and ease of exploitation (SecurityOnline). Researcher sebastianosrt published a technical write-up at sebsrt.xyz detailing the RCE mechanism (sebsrt blog). Ostorlab also published a technical analysis on their blog (Ostorlab). The ProjectDiscovery community developed and merged a Nuclei detection template, and Emerging Threats added network detection rules in their March 17, 2026 ruleset update, reflecting broad community engagement with this vulnerability (Emerging Threats).

Additional resources


Source: This report was generated using AI

Related JavaScript vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

GHSA-gvwc-5hr5-44p8HIGH7.5
  • JavaScript logoJavaScript
  • probe-image-size
NoYesOct 26, 2026
GHSA-5jh3-w3fj-6758LOW3.7
  • JavaScript logoJavaScript
  • probe-image-size
NoYesOct 26, 2026
GHSA-5v8x-rm7w-m4c7LOW3.7
  • JavaScript logoJavaScript
  • probe-image-size
NoYesOct 26, 2026
GHSA-7pqp-3q23-mwr8LOW3.7
  • JavaScript logoJavaScript
  • probe-image-size
NoYesOct 26, 2026
GHSA-3qg4-7mq2-gm93MEDIUMN/A
  • JavaScript logoJavaScript
  • probe-image-size
NoYesOct 26, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Additional Wiz resources

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management