CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-32701

CVE-2026-32701: Array Method Pollution and Denial of Service in Qwik City Middleware

Amit Schendel
Amit Schendel
Senior Security Researcher

Mar 20, 2026·5 min read·21 visits

Executive Summary (TL;DR)

A structural flaw in Qwik City's form parser allows attackers to overwrite native array methods by mixing numeric and string keys in dotted form paths, leading to unhandled TypeErrors and Denial of Service.

Qwik City middleware versions prior to 1.19.2 contain an array method pollution vulnerability within the form parsing component. Unauthenticated remote attackers can overwrite native array methods via crafted multipart or URL-encoded HTTP requests, resulting in type confusion and server-side Denial of Service (DoS).

Vulnerability Overview

Qwik City operates as a meta-framework providing routing and middleware capabilities for Qwik applications. The formToObj function within the request handler is responsible for deserializing incoming form data into structured JavaScript objects. This function processes both URL-encoded and multipart payloads, converting dotted key notations into nested objects or arrays.

Prior to version 1.19.2, this parser lacked rigorous structural validation during object construction. The vulnerability arises from an improper implementation of a one-pass parsing algorithm that fails to enforce type consistency across sibling keys. This oversight allows attackers to inject string properties into instantiated arrays, polluting native array methods.

When the application subsequently attempts to invoke these overwritten methods during form processing, the Node.js runtime throws an unhandled TypeError. This exception terminates the execution context of the active request, resulting in a targeted Denial of Service condition. The flaw exposes applications to unauthenticated remote attacks with low complexity.

Root Cause Analysis

The core logical flaw exists in how the legacy parser inferred data types from dotted form keys. When evaluating a key like items.0, the parser examined the numeric segment 0 and initialized the items property as a standard JavaScript Array. This instantiation occurred immediately during the first pass over the form data.

Because the parser processed keys sequentially without validating the full key set, it remained blind to subsequent type contradictions. If the next key in the payload was items.push=polluted, the parser applied the value "polluted" directly to the existing items array. Since arrays in JavaScript are objects, this operation successfully overwrites the native Array.prototype.push method for that specific instance.

The application fails when the parser encounters a subsequent numeric key, such as items.1. The parser recognizes items as an array and attempts to append the new value using the standard push method. Because the attacker previously replaced the push function with a string, the runtime evaluates "polluted"("value"), throwing a fatal type error and crashing the request handler.

Exploit Methodology

Attackers exploit this vulnerability by submitting a maliciously crafted HTTP POST request containing specific form field sequences. The payload must target a route that processes form data using the vulnerable qwik-city middleware. No authentication or specific user roles are required to deliver the payload.

The attack relies on strict ordering of form fields to manipulate the parser state. The first parameter, items.0=first_item, forces the initialization of the array. The second parameter, items.push=polluted, executes the property overwrite. The third parameter, items.1=trigger_crash, triggers the application crash when the parser attempts the insertion.

Beyond the standard push overwrite, attackers can manipulate other native properties. Supplying a payload like items.length=999999999 forces the array length to an artificially high value. If downstream application logic iterates over this array, it induces severe memory allocation overhead or excessive CPU consumption, amplifying the Denial of Service impact.

Code Analysis and Patch Walkthrough

The remediation, introduced in commit 7b5867c3dd8925df9aa96c4296b1e95a4c2af87d, fundamentally alters the parsing architecture. The maintainers abandoned the one-pass inference model in favor of a robust two-pass evaluation process. The first pass explicitly maps and validates all array paths before any object instantiation occurs.

During the new getArrayPaths pass, the middleware scans the complete set of FormData keys. A parent path is classified as an array exclusively if every single child segment associated with it passes a strict regular expression check. The regex /^(0|[1-9]\d*)$/ enforces canonical, non-negative integer formats, rejecting strings, padded numbers, and scientific notation.

If a path contains any non-numeric sibling keys, the second pass initializes it as a plain object using Object.create(null). This specific instantiation method ensures the resulting object lacks a __proto__ property, immunizing the parser against broader prototype pollution vectors. The strict isolation between verified arrays and prototype-less objects eliminates the type confusion vector entirely.

Impact Assessment

The primary impact of this vulnerability is a targeted Denial of Service affecting the availability of the application. The unhandled exception occurs synchronously within the request processing pipeline. This causes the specific HTTP request to fail abruptly, typically resulting in a 500 Internal Server Error or a complete connection drop.

While the vulnerability leverages property injection, it does not achieve arbitrary code execution. The injected values are constrained to data properties on the specific array instance within the request context. The attack does not overwrite global prototypes or persist across different user sessions, isolating the crash to the immediate request thread.

The CVSS v3.1 base score of 7.5 accurately reflects the high availability impact combined with the low attack complexity. Attackers can easily automate the generation of these payloads and rapidly deplete server resources or disrupt specific application endpoints by repeatedly triggering the type error.

Detection and Mitigation Guidance

Organizations utilizing Qwik must update the qwik-city package to version 1.19.2 or later. This release contains the two-pass parser and strict index validation logic required to prevent the method pollution. The update is a drop-in replacement and requires no changes to application-level form handling logic.

If immediate patching is unfeasible, security teams should deploy Web Application Firewall (WAF) rules to inspect incoming form data. The rules must block application/x-www-form-urlencoded and multipart/form-data requests containing dotted keys that end in native array methods. Key targets for blocking include .push, .pop, .shift, .unshift, and .length.

Detection engineering teams can proactively identify exploitation attempts by monitoring application logs for specific stack traces. Alerts should trigger on instances of TypeError: ... is not a function occurring within the formToObj middleware module. Network scanners can also utilize Nuclei templates mimicking the PoC structure to verify exposure across external footprints.

Official Patches

QwikDevSource code patch introducing strict array validation.
QwikDevOfficial GitHub Security Advisory.

Fix Analysis (1)

Technical Appendix

CVSS Score
7.5/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
EPSS Probability
0.05%
Top 84% most exploited

Affected Systems

Qwikqwik-city middleware

Affected Versions Detail

Product
Affected Versions
Fixed Version
Qwik (qwik-city)
QwikDev
< 1.19.21.19.2
AttributeDetail
CWE IDCWE-843
Secondary CWECWE-1321
Attack VectorNetwork
CVSS v3.1 Score7.5
ImpactDenial of Service
EPSS Score0.00053
Exploit StatusProof of Concept

MITRE ATT&CK Mapping

T1059Command and Scripting Interpreter
Execution
T1574Hijack Execution Flow
Persistence
CWE-843
Access of Resource Using Incompatible Type ('Type Confusion')

The application allocates or initializes a resource such as a pointer, object, or variable using one type, but it later accesses that resource using a type that is incompatible with the original type.

Known Exploits & Detection

Vendor AdvisoryFunctional proof-of-concept demonstrating array method pollution in qwik-city form parser.

References & Sources

  • [1]NVD Record for CVE-2026-32701
  • [2]CVE.org Record for CVE-2026-32701
  • [3]GitHub Security Advisory GHSA-whhv-gg5v-864r
  • [4]Fix Commit 7b5867c3dd8925df9aa96c4296b1e95a4c2af87d

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•about 4 hours ago•GHSA-H5X8-XP6M-X6Q4
7.1

GHSA-H5X8-XP6M-X6Q4: Unvalidated Signature Generation in @jhb.software/payload-cloudinary-plugin

The @jhb.software/payload-cloudinary-plugin exposes an endpoint that performs unvalidated cryptographic signing of Cloudinary API parameters, allowing authenticated users with minimal privileges to forge valid signatures for arbitrary actions. This flaw allows attackers to overwrite remote storage assets, execute unauthorized file uploads, alter asset visibility parameters, trigger SSRF webhooks, and perform directory traversal within Cloudinary repositories.

Alon Barad
Alon Barad
2 views•6 min read
•about 4 hours ago•GHSA-G2GW-Q38M-VJFC
8.7

GHSA-G2GW-Q38M-VJFC: Server-Side Request Forgery and Bearer Token Exfiltration in @merill/lokka

A Server-Side Request Forgery (SSRF) and Bearer Token Exfiltration vulnerability exists in the @merill/lokka (Lokka) Model Context Protocol (MCP) server prior to version 2.1.2. The server constructed Azure Resource Manager request URLs by concatenating user-controlled path parameters directly into destination request strings. By injecting authority-redefinition characters, an attacker can manipulate URL parsing to execute a host-escape attack, forcing the server to send high-privilege Azure Resource Manager (ARM) Bearer tokens to an external attacker-controlled host. This allows complete administrative access to the associated Azure subscriptions.

Alon Barad
Alon Barad
4 views•7 min read
•about 6 hours ago•GHSA-4XGF-CPJX-PC3J
5.3

GHSA-4xgf-cpjx-pc3j: Directory Traversal and Symlink Following in Pydantic Settings

A directory traversal and symlink following vulnerability exists in Pydantic Settings when using the NestedSecretsSettingsSource with nested subdirectory lookups enabled. An attacker capable of writing to the secrets directory can bypass size limitations, read arbitrary host files, or cause a denial-of-service condition via cyclic symlinks.

Amit Schendel
Amit Schendel
2 views•7 min read
•about 7 hours ago•GHSA-H5RG-8P7F-47G2
4.1

GHSA-h5rg-8p7f-47g2: Server-Side Request Forgery (SSRF) in SurrealDB Identity & Access Management (IAM) JWKS Fetcher

A Server-Side Request Forgery (SSRF) vulnerability exists in SurrealDB's Identity & Access Management (IAM) module prior to version 3.1.5. When configuring JSON Web Key Set (JWKS) URLs for token verification, the remote fetcher follows HTTP redirects by default without validating redirect targets against configured network capabilities. This allows high-privileged users to bypass network access limits and perform blind port scanning of internal network resources.

Amit Schendel
Amit Schendel
4 views•6 min read
•about 8 hours ago•GHSA-CC8F-FCX3-GPJR
7.7

GHSA-cc8f-fcx3-gpjr: Arbitrary File Disclosure via DEFINE ANALYZER mapper filter in SurrealDB

A local file disclosure vulnerability exists in SurrealDB's full-text search capabilities, allowing authenticated users with database EDITOR or OWNER roles to read arbitrary files from the host system filesystem. This occurs by abusing the mapper() filter inside a DEFINE ANALYZER statement to point to system files.

Alon Barad
Alon Barad
6 views•6 min read
•about 9 hours ago•GHSA-H4H3-3RFJ-X6FQ
4.3

GHSA-H4H3-3RFJ-X6FQ: Value-Ordering Oracle Side-Channel via Indexed ORDER BY in SurrealDB

SurrealDB versions 3.0.0 through 3.1.4 contain an information exposure vulnerability (CWE-203) where the query planner optimizes sorted queries using indexes on fields with field-level SELECT restrictions. Because the query planner performs index-based sorting before enforcing permission-based redaction, unauthorized users can observe the physical order of returned rows to deduce the relative values of protected fields.

Alon Barad
Alon Barad
4 views•8 min read