Integer overflow in js_bigint_from_string 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-190 and the CVSS impact.
Summary
A vulnerability exists in the QuickJS engine's BigInt string parsing logic (js_bigint_from_string) when attempting to create a BigInt from a string with an excessively large number of digits. The function calculates the necessary number of bits (n_bits) required to store the BigInt using the formula: $$\text{n\_bits} = (\text{n\_digits} \times 27 + 7) / 8 \quad (\text{for radix 10})$$ * For large input strings (e.g., $79,536,432$ digits or more for base 10), the intermediate calculation $(\text{n\_digits} \times 27 + 7)$ exceeds the maximum value of a standard signed 32-bit integer, resulting in an Integer Overflow. * The resulting n_bits value becomes unexpectedly small or even negative due to this wrap-around. * This flawed n_bits is then used to compute n_limbs, the number of memory "limbs" needed for the BigInt object. Since n_bits is too small, the calculated n_limbs is also significantly underestimated. * The function proceeds to allocate a JSBigInt object using this underestimated n_limbs. * When the function later attempts to write the actual BigInt data into the allocated object, the small buffer size is quickly exceeded, leading to a Heap Out-of-Bounds Write as data is written past the end of the allocated r->tab array.
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-38737 Type confusion in string addition 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-62496
- 2026-10-03 Alias added: GHSA-p8pr-fr36-rgmq
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-38737 Type confusion in string addition 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-62496 · CVE Program
- CVE-2025-62496 · NVD
- FIRST EPSS
- GHSA-p8pr-fr36-rgmq · 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