Type confusion in string addition in QuickJS
Default status is the baseline for the product, each version can override it (e.g. patched versions marked unaffected).
| Vendor | Product | Default status | Versions | ||||||
|---|---|---|---|---|---|---|---|---|---|
| QuickJS | QuickJS | unaffected |
|
No data.
| Vendor | Product | Versions |
|---|---|---|
| Quickjs-ng | Quickjs | — |
No CVSS v3.0
No CVSS v2
This CVE is not in the KEV list.
Exploit prediction score: < 1% (0.468% probability within 30 days)
| Type | Values Removed | Values Added |
|---|---|---|
| First Time appeared |
Quickjs Project
Quickjs Project quickjs |
|
| CPEs | cpe:2.3:a:quickjs_project:quickjs:*:*:*:*:*:*:*:* | |
| Vendors & Products |
Quickjs Project
Quickjs Project quickjs |
|
| Metrics |
cvssV3_1
|
| Type | Values Removed | Values Added |
|---|---|---|
| First Time appeared |
Quickjs-ng
Quickjs-ng quickjs |
|
| Vendors & Products |
Quickjs-ng
Quickjs-ng quickjs |
| Type | Values Removed | Values Added |
|---|---|---|
| Metrics |
ssvc
|
| Type | Values Removed | Values Added |
|---|---|---|
| Description | 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); | |
| Title | Type confusion in string addition in QuickJS | |
| Weaknesses | CWE-191 | |
| References |
| |
| Metrics |
cvssV4_0
|