CVE-2026-49293
Full vulnerability record from the local CVENow database.
Description
js-toml is a TOML parser for JavaScript, fully compliant with the TOML 1.0.0 Spec. Versions up to and including 1.1.0 parse hexadecimal / octal / binary integer literals via a hand-written `parseBigInt` loop that multiplies a `BigInt` accumulator by the radix once per input digit. Each iteration performs a `BigInt * BigInt` operation on an accumulator that grows linearly with the number of digits already consumed, so the whole loop is O(n²) in the literal length. The lexer regex places no upper bound on the literal length, so a single TOML document containing one ~500 kB hex literal pins one CPU core for ~40 seconds on a modern laptop (Apple M-series, Node v22). Memory amplification is bounded but CPU amplification is severe and grows quadratically: doubling the literal length quadruples the work. A caller that invokes `load()` on attacker-controlled TOML (configuration upload endpoints, CI/CD systems ingesting third-party `*.toml`, IDE plugins, build tools) is exposed to a single-request CPU exhaustion DoS. Version 1.1.1 fixes the issue.
View original CVE JSON
{
"id": "CVE-2026-49293",
"sourceIdentifier": "[email protected]",
"published": "2026-06-19T19:16:36.297",
"lastModified": "2026-10-25T23:10:00.167",
"vulnStatus": "Analyzed",
"cveTags": [],
"descriptions": [
{
"lang": "en",
"value": "js-toml is a TOML parser for JavaScript, fully compliant with the TOML 1.0.0 Spec. Versions up to and including 1.1.0 parse hexadecimal / octal / binary integer literals via a hand-written `parseBigInt` loop that multiplies a `BigInt` accumulator by the radix once per input digit. Each iteration performs a `BigInt * BigInt` operation on an accumulator that grows linearly with the number of digits already consumed, so the whole loop is O(n²) in the literal length. The lexer regex places no upper bound on the literal length, so a single TOML document containing one ~500 kB hex literal pins one CPU core for ~40 seconds on a modern laptop (Apple M-series, Node v22). Memory amplification is bounded but CPU amplification is severe and grows quadratically: doubling the literal length quadruples the work. A caller that invokes `load()` on attacker-controlled TOML (configuration upload endpoints, CI/CD systems ingesting third-party `*.toml`, IDE plugins, build tools) is exposed to a single-request CPU exhaustion DoS. Version 1.1.1 fixes the issue."
},
{
"lang": "es",
"value": "js-toml es un analizador TOML para JavaScript, totalmente compatible con la especificación TOML 1.0.0. Las versiones hasta la 1.1.0 inclusive analizan literales enteros hexadecimales / octales / binarios mediante un bucle parseBigInt escrito a mano que multiplica un acumulador BigInt por la base una vez por cada dígito de entrada. Cada iteración realiza una operación BigInt * BigInt en un acumulador que crece linealmente con el número de dígitos ya consumidos, por lo que todo el bucle es O(n²) en la longitud del literal. La expresión regular del analizador léxico no impone un límite superior a la longitud del literal, por lo que un único documento TOML que contenga un literal hexadecimal de ~500 kB fija un núcleo de CPU durante ~40 segundos en un portátil moderno (serie Apple M, Node v22). La amplificación de memoria está acotada, pero la amplificación de CPU es grave y crece cuadráticamente: duplicar la longitud del literal cuadruplica el trabajo. Un llamador que invoca load() en TOML controlado por un atacante (puntos finales de carga de configuración, sistemas CI/CD que ingieren *.toml de terceros, complementos de IDE, herramientas de compilación) está expuesto a un DoS por agotamiento de CPU de una sola solicitud. La versión 1.1.1 corrige el problema."
}
],
"affected": [
{
"source": "[email protected]",
"affectedData": [
{
"vendor": "sunnyadn",
"product": "js-toml",
"versions": [
{
"version": "< 1.1.1",
"status": "affected"
}
]
}
]
}
],
"metrics": {
"cvssMetricV31": [
{
"source": "[email protected]",
"type": "Secondary",
"cvssData": {
"version": "3.1",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H",
"baseScore": 7.5,
"baseSeverity": "HIGH",
"attackVector": "NETWORK",
"attackComplexity": "LOW",
"privilegesRequired": "NONE",
"userInteraction": "NONE",
"scope": "UNCHANGED",
"confidentialityImpact": "NONE",
"integrityImpact": "NONE",
"availabilityImpact": "HIGH"
},
"exploitabilityScore": 3.9,
"impactScore": 3.6
}
],
"ssvcV203": [
{
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"ssvcData": {
"timestamp": "2026-06-22T14:09:42.727540Z",
"id": "CVE-2026-49293",
"options": [
{
"exploitation": "poc"
},
{
"automatable": "yes"
},
{
"technicalImpact": "partial"
}
],
"role": "CISA Coordinator",
"version": "2.0.3"
}
}
]
},
"weaknesses": [
{
"source": "[email protected]",
"type": "Secondary",
"description": [
{
"lang": "en",
"value": "CWE-400"
},
{
"lang": "en",
"value": "CWE-407"
},
{
"lang": "en",
"value": "CWE-1333"
}
]
}
],
"configurations": [
{
"nodes": [
{
"operator": "OR",
"negate": false,
"cpeMatch": [
{
"vulnerable": true,
"criteria": "cpe:2.3:a:sunnyadn:js-toml:*:*:*:*:*:node.js:*:*",
"versionEndExcluding": "1.1.1",
"matchCriteriaId": "9C4EB3F2-9198-41C8-BF40-63A7E2BDFF11"
}
]
}
]
}
],
"references": [
{
"url": "https://github.com/sunnyadn/js-toml/commit/1abcb31dc7b1fa88e4c848a8d108891cfbb96fa2",
"source": "[email protected]",
"tags": [
"Patch"
]
},
{
"url": "https://github.com/sunnyadn/js-toml/releases/tag/v1.1.1",
"source": "[email protected]",
"tags": [
"Release Notes"
]
},
{
"url": "https://github.com/sunnyadn/js-toml/security/advisories/GHSA-wp3c-266w-4qfq",
"source": "[email protected]",
"tags": [
"Exploit",
"Mitigation",
"Vendor Advisory"
]
},
{
"url": "https://github.com/sunnyadn/js-toml/security/advisories/GHSA-wp3c-266w-4qfq",
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"tags": [
"Exploit",
"Mitigation",
"Vendor Advisory"
]
}
]
}