Skip to main content

QuickJS CVE-2025-62490

HIGH
Use After Free (CWE-416)
2025-10-16 cve-coordination@google.com
8.8
CVSS 4.0 · Vendor: google
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Deliver crafted JS to QuickJS
  2. Delivery
    Define array/Map with side-effecting callback
  3. Exploit
    Invoke object printing routine
  4. Execution
    Callback resizes container mid-iteration
  5. Impact
    Exploit use-after-free for code execution

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Memory lifecycle management
MITRE ATT&CK

2 techniques across 2 tactics: Execution, Privilege Escalation

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation requires that the embedding application (a) execute attacker-influenced JavaScript in QuickJS and (b) invoke the object-printing path (js_print_object / print / dump) on an attacker-crafted Array, Map, or Set whose elements trigger a user-defined callback (getter, Proxy trap, or valueOf/toString) during js_print_value; that callback must resize or remove elements so the previously fetched array length (len1) or the ms->records list becomes stale. LIMITING FACTORS: deployments that never print/dump attacker-controlled objects, or that do not run untrusted script, are not reachable; reliable code execution (versus a crash) additionally requires heap grooming to control the freed allocation. This is therefore a usage/configuration-dependent bug rather than a default remote-unauthenticated flaw.

Impact

Signals are mixed and must be weighed against deployment context. The input CVSS 4.0 vector (base 8.8) describes a fairly constrained path (AV:A adjacent, AC:H high complexity, AT:P present attack requirement, UI:P passive user interaction) yet rates confidentiality/integrity High with a scope change - this is internally tense for a scripting-engine memory-corruption bug, since in most QuickJS embeddings the triggering JavaScript executes in-process rather than over an adjacent network with user interaction. A publicly available exploit/PoC exists (Google issue tracker), which raises practical risk. This CVE is NOT listed in CISA KEV and NO EPSS score was provided in the input, so there is no evidence of active or widespread exploitation and no modeled exploitation probability to cite - these are missing data, not low values. Reported by Google's CVE coordination team and classified CWE-416 (use-after-free), the technical impact is genuine memory corruption that can escalate to code execution. Net: treat as a real priority for any product that evaluates untrusted/attacker-influenced JavaScript through QuickJS and prints objects, but materially lower priority for deployments that never run untrusted scripts. Note the conflict explicitly: the provided CVSS 4.0 vector implies adjacent access plus user interaction, whereas the description implies the vulnerability is reached by executing attacker-supplied script and printing a crafted object - verify the real exploitation path against your embedding.

Exploit ScenarioDerived

An application embeds QuickJS and evaluates untrusted JavaScript, then prints or dumps a resulting object (e.g., via print()/console.log-style output). The attacker supplies a script defining an array (or Map/Set) whose element access runs an attacker-defined callback during js_print_value; that callback resizes/empties the container mid-iteration so the cached length (len1) or records list points at freed memory, triggering a use-after-free. A public PoC exists on Google's issue tracker, so the trigger is reproducible, though reliable code execution still requires heap grooming.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
No patch listed yet 0.4% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 19, 2026

Use-after-free in QuickJS object-printing routines can corrupt memory when an attacker-influenced Array, Map, or Set is printed and a JavaScript callback mutates the container during js_print_value. The bug affects QuickJS deployments that expose the print/dump path to untrusted script; exploitation is usage- and configuration-dependent because the embedding application must execute attacker-influenced JavaScript and then print or dump the crafted object. Publicly available exploit code exists, but there is no confirmed active exploitation (CISA KEV), and reliable code execution beyond a crash requires heap grooming.

RemediationAI

An upstream changelog is referenced at https://bellard.org/quickjs/Changelog, but an exact fixed version is not independently confirmed in the provided data; obtain the current QuickJS release from https://bellard.org/quickjs/, review the changelog for the js_print_object fix, and rebuild and redeploy the embedding application with that engine version. If upgrading is not immediately possible, avoid exposing print/dump/diagnostic object-printing paths to attacker-controlled JavaScript and do not run untrusted scripts in the same process; isolate script execution in a sandboxed worker or separate process and restrict who can submit scripts. These compensating controls reduce reachability but do not fix the underlying memory-safety bug, and disabling print/dump removes diagnostic functionality.

Affects your stack

Find out whether the stacks and servers you run are on an affected version.

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

QuickJS is an embeddable JavaScript engine, and js_print_object is a diagnostic printing helper that snapshots an Array's length into len1 before iterating, or walks a Map/Set's ms->records list. Because js_print_value can invoke attacker-defined callbacks such as getters, Proxy traps, or valueOf/toString, the callback can resize the array or delete map/set records so the cached length or list pointer becomes stale, producing a CWE-416 use-after-free and possible memory corruption. The CPE quickjs_project:quickjs with a wildcard version indicates all released versions are treated as affected in this dataset; reachability depends on the embedding application invoking the print/dump path on attacker-crafted objects.

Know when Quickjs gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (google) PRIMARY 8.8 HIGH
CVSS:4.0/AV:A/AC:H/AT:P/PR:N/UI:P/VC:H/VI:H/VA:L/SC:H/SI:H/SA:L
vuln.today AI 8.1 HIGH

Triggered by executing untrusted script (AV:N, PR:N, UI:N), but reliable UAF exploitation needs the specific print path plus heap grooming (AC:H); memory corruption yields full C/I/A impact within the engine process (S:U).

3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
4.0 AV:N/AC:H/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (google).

CVSS VectorVendor: google

Attack Vector
Adjacent
Attack Complexity
High
Attack Requirements
Present
Privileges Required
None
User Interaction
Passive
Vulnerable system: Confidentiality
High
Vulnerable system: Integrity
High
Vulnerable system: Availability
Low
Subsequent system: Confidentiality
High
Subsequent system: Integrity
High
Subsequent system: Availability
Low

DescriptionCVE.org

In quickjs, in js_print_object, when printing an array, the function first fetches the array length and then loops over it. The issue is, printing a value is not side-effect free. An attacker-defined callback could run during js_print_value, during which the array could get resized and len1 become out of bounds. This results in a use-after-free.A second instance occurs in the same function during printing of a map or set objects. The code iterates over ms->records list, but once again, elements could be removed from the list during js_print_value call.

Executive ViewAI

Why It Matters

QuickJS object-printing routines contain a use-after-free that can crash or potentially corrupt memory in applications that execute untrusted JavaScript and then print or dump attacker-influenced Array, Map, or Set objects. Leadership should care because any product embedding QuickJS and exposing the print/dump path to customer- or partner-supplied scripts inherits availability and possible code-execution risk, and no vendor patch is available yet.

Business Impact: High
Compensating Controls

No vendor-released patch identified at time of analysis; restrict or disable print/dump of untrusted Array, Map, or Set containers, sandbox QuickJS with least privilege, avoid executing untrusted JavaScript where possible, and monitor for crashes or memory corruption.

Threat Intelligence Overview

EPSS Score
0.4%
Top 66% exploitable
Prevalence
Low
niche embeddable JavaScript engine, limited enterprise production footprint
Exploit
POC
Public exploit code exists
Data Quality
2 sources
Confidence: Low

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC Yes
EPSS 0.4%
Patch available No
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
Poc
System Exposure· derived
Controlled
Automatable· derived
No
Human Impact
High

Priority Score

64
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +44
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Use-after-free vulnerabilities occur when a program continues to access memory through a pointer after that memory has been deallocated.

Memory corruption occurs when a program writes data beyond the boundaries of allocated memory regions or accesses memory in unintended ways, violating the integrity of the process's address space.

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

Affected Products (CPE)CVE.org

cpe:2.3:a:quickjs_project:quickjs:*:*:*:*:*:*:*:*
CVE-2025-62491 HIGH POC
8.8 Oct 16

A use-after-free in QuickJS's quickjs-libc standard library lets JavaScript code corrupt heap memory from inside the int

CVE-2023-31922 HIGH POC
7.5 May 12

QuickJS commit 2788d71 was discovered to contain a stack-overflow via the component js_proxy_isArray at quickjs.c. Rated

CVE-2025-62496 HIGH POC
7.1 Oct 16

Heap out-of-bounds write in QuickJS's BigInt string parser can corrupt memory when an embedding application converts an

CVE-2025-62495 HIGH POC
7.1 Oct 16

Integer overflow in QuickJS's libregexp bytecode accounting can become an out-of-bounds write when a crafted recursive r

CVE-2025-62494 HIGH POC
7.1 Oct 16

Type confusion in QuickJS's handling of the string addition (+) operation allows local attackers to trigger out-of-bound

CVE-2025-62492 MEDIUM POC
5.9 Oct 16

Information disclosure in QuickJS occurs through a floating-point precision error in TypedArray.prototype.indexOf() when

CVE-2025-62493 MEDIUM POC
5.9 Oct 16

An out-of-bounds heap read in QuickJS's BigInt-to-string conversion (js_bigint_to_string1) lets script-controlled BigInt

CVE-2026-88378 CRITICAL
9.8 Sep 24

Heap out-of-bounds write in QuickJS's bytecode deserializer (JS_ReadFunctionTag) lets a crafted serialized blob corrupt

CVE-2025-46687 MEDIUM POC
5.6 Apr 27

quickjs-ng through 0.9.0 has a missing length check in JS_ReadString for a string, leading to a heap-based buffer overfl

CVE-2025-46688 MEDIUM POC
5.6 Apr 27

quickjs-ng through 0.9.0 has an incorrect size calculation in JS_ReadBigInt for a BigInt, leading to a heap-based buffer

CVE-2026-0821 MEDIUM POC
5.5 Jan 10

Heap-based buffer overflow in QuickJS up to version 0.11.0 within the js_typed_array_constructor function allows unauthe

CVE-2024-13903 MEDIUM POC
5.3 Mar 21

A vulnerability was found in quickjs-ng QuickJS up to 0.8.0. Rated medium severity (CVSS 5.3), this vulnerability is rem

References

Advisories & patches

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy