Type confusion in string addition in QuickJS
Key facts
- Attack vector
- Adjacent network
- Privileges required
- Low
- User interaction
- Passive
- Attack complexity
- High
- Attack requirements
- Present
- Impact type
- Code execution
- Confidentiality · integrity · availability
- High · High · Low
- Fix status
- Fixed
Attack profile from CVSS 4.0 · CNA. Fix status from CNA. Impact type from CWE-191 and the CVSS impact.
Summary
An integer overflow vulnerability exists in the QuickJS regular expression engine (libregexp) due to an inconsistent representation of the bytecode buffer size. * The regular expression bytecode is stored in a DynBuf structure, which correctly uses a $\text{size}\_\text{t}$ (an unsigned type, typically 64-bit) for its size member. * However, several functions, such as re_emit_op_u32 and other internal parsing routines, incorrectly cast or store this DynBuf $\text{size}\_\text{t}$ value into a signed int (typically 32-bit). * When a large or complex regular expression (such as those generated by a recursive pattern in a Proof-of-Concept) causes the bytecode size to exceed $2^{31}$ bytes (the maximum positive value for a signed 32-bit integer), the size value wraps around, resulting in a negative integer when stored in the int variable (Integer Overflow). * This negative value is subsequently used in offset calculations. For example, within functions like re_parse_disjunction, the negative size is used to compute an offset (pos) for patching a jump instruction. * This negative offset is then incorrectly added to the buffer pointer (s->byte\_code.buf + pos), leading to an out-of-bounds write on the first line of the snippet below: put_u32(s->byte_code.buf + pos, len);
Why it matters now
SSVC decision points
CISA ADP · SSVC 2.0.3
- Exploitation
- Poc
- Automatable
- No
- Technical impact
- Total
The decision (Track, Attend, Act) also depends on your mission and well-being impact; see CISA's SSVC guide.
Affected products
Remediation
- Fix · CNA QuickJS (QuickJS) Fixed in 2025-09-13
Fixed in the same release
Records fixed by the same vendor advisory or release, as the CNA lists them.
- Release ·
QuickJS 2025-09-13
7 records Highest priority Priority HIGH 4 HIGH, 3 MEDIUM
Other records, highest priority first
- TI-2025-38733 Use-after-free in js_std_promise_rejection_check in QuickJSPriority HIGH 73
- TI-2025-38738 Integer overflow in js_bigint_from_string in QuickJSPriority HIGH 66
- TI-2025-38736 Type confusion in string addition in QuickJSPriority HIGH 66
Timeline
- 2026-10-02 Threatist record created from CVE-2025-62495
- 2026-10-03 Alias added: GHSA-g8rq-rjvv-4hcc
References
More Quickjs vulnerabilities
- TI-2025-38733 Use-after-free in js_std_promise_rejection_check in QuickJS CVSS 4.0HIGH 8.8
- TI-2025-42911 A crafted JavaScript input executed with the QuickJS release 2025-09-13, fixed in commit… CVSS 3.1HIGH 7.5
- TI-2025-29366 quickjs-ng through 0.9.0 has an incorrect size calculation in JS_ReadBigInt for a BigInt… CVSS 3.1HIGH 8.4
- TI-2025-38738 Integer overflow in js_bigint_from_string in QuickJS CVSS 4.0HIGH 7.1
- TI-2025-38736 Type confusion in string addition in QuickJS CVSS 4.0HIGH 7.1
- TI-2023-15270 QuickJS commit 2788d71 was discovered to contain a stack-overflow via the component js_proxy_isArray at quickjs.c. CVSS 3.1HIGH 7.5
Sources
- CVE-2025-62495 · CVE Program
- CVE-2025-62495 · NVD
- FIRST EPSS
- GHSA-g8rq-rjvv-4hcc · GitHub Advisory Database · CC BY 4.0
This product uses the NVD API but is not endorsed or certified by the NVD. Sources and licences