24h | 7d | 30d

Overview

  • QuickJS
  • QuickJS
  • JS_ConcatStringInPlace

16 Oct 2025
Published
16 Oct 2025
Updated

CVSS v4.0
HIGH (7.1)
EPSS
Pending

KEV

Description

A type confusion vulnerability exists in the handling of the string addition (+) operation within the QuickJS engine. * The code first checks if the left-hand operand is a string. * It then attempts to convert the right-hand operand to a primitive value using JS_ToPrimitiveFree. This conversion can trigger a callback (e.g., toString or valueOf). * During this callback, an attacker can modify the type of the left-hand operand in memory, changing it from a string to a different type (e.g., an object or an array). * The code then proceeds to call JS_ConcatStringInPlace, which still treats the modified left-hand value as a string. This mismatch between the assumed type (string) and the actual type allows an attacker to control the data structure being processed by the concatenation logic, resulting in a type confusion condition. This can lead to out-of-bounds memory access, potentially resulting in memory corruption and arbitrary code execution in the context of the QuickJS runtime.

Statistics

  • 1 Post
  • 3 Interactions

Last activity: 7 hours ago

Overview

  • QuickJS
  • QuickJS
  • js_std_promise_rejection_check

16 Oct 2025
Published
16 Oct 2025
Updated

CVSS v4.0
HIGH (8.8)
EPSS
Pending

KEV

Description

A Use-After-Free (UAF) vulnerability exists in the QuickJS engine's standard library when iterating over the global list of unhandled rejected promises (ts->rejected_promise_list). * The function js_std_promise_rejection_check attempts to iterate over the rejected_promise_list to report unhandled rejections using a standard list loop. * The reason for a promise rejection is processed inside the loop, including calling js_std_dump_error1(ctx, rp->reason). * If the promise rejection reason is an Error object that defines a custom property getter (e.g., via Object.defineProperty), this getter is executed during the error dumping process. * The malicious custom getter can execute JavaScript code that calls catch() on the same rejected promise being processed. * Calling catch() internally triggers js_std_promise_rejection_tracker, which then removes and frees the current promise entry (JSRejectedPromiseEntry) from the rejected_promise_list. * Since the list iteration continues using the now-freed memory pointer (el), the subsequent loop access results in a Use-After-Free condition.

Statistics

  • 1 Post
  • 3 Interactions

Last activity: 7 hours ago

Overview

  • QuickJS
  • QuickJS
  • js_print_object

16 Oct 2025
Published
16 Oct 2025
Updated

CVSS v4.0
HIGH (8.8)
EPSS
Pending

KEV

Description

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.

Statistics

  • 1 Post
  • 3 Interactions

Last activity: 7 hours ago

Overview

  • QuickJS
  • QuickJS
  • js_typed_array_indexOf

16 Oct 2025
Published
16 Oct 2025
Updated

CVSS v4.0
MEDIUM (5.9)
EPSS
Pending

KEV

Description

A vulnerability stemming from floating-point arithmetic precision errors exists in the QuickJS engine's implementation of TypedArray.prototype.indexOf() when a negative fromIndex argument is supplied. * The fromIndex argument (read as a double variable, $d$) is used to calculate the starting position for the search. * If d is negative, the index is calculated relative to the end of the array by adding the array's length (len) to d: $$d_{new} = d + \text{len}$$ * Due to the inherent limitations of floating-point arithmetic, if the negative value $d$ is extremely small (e.g., $-1 \times 10^{-20}$), the addition $d + \text{len}$ can result in a loss of precision, yielding an outcome that is exactly equal to $\text{len}$. * The result is then converted to an integer index $k$: $k = \text{len}$. * The search function proceeds to read array elements starting from index $k$. Since valid indices are $0$ to $\text{len}-1$, starting the read at index $\text{len}$ is one element past the end of the array. This allows an attacker to cause an Out-of-Bounds Read of one element immediately following the buffer. While the scope of this read is small (one element), it can potentially lead to Information Disclosure of adjacent memory contents, depending on the execution environment.

Statistics

  • 1 Post
  • 3 Interactions

Last activity: 7 hours ago
Showing 41 to 44 of 44 CVEs