Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessGain input path to Espruino REPL/eval
-
DeliverySubmit crafted JS with overlong token
-
ExploitOne-byte write past JsLex.token buffer
-
ExecutionCorrupt adjacent tokenValue pointer
-
ImpactInterpreter memory corruption and crash (DoS)
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Bounds checking, write limits
MITRE ATT&CK
2 techniques across 2 tactics: Execution, Privilege Escalation The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires the attacker to supply crafted JavaScript (an overlong token) to the Espruino interpreter - via the device's serial/USB REPL, an exposed network console, or eval of untrusted script - so local access to a JS input path is needed (AV:L). Critically, the flaw only triggers in RELEASE/NO_ASSERT firmware builds; debug builds with assertions enabled catch the overlong token before the out-of-bounds write, so devices running assert-enabled builds are not affected. There is no authentication metric-backed gate (PR:N per the vector) and no user interaction required beyond feeding the input, but the demonstrated outcome is limited to memory corruption/crash (DoS) rather than confirmed code execution. |
| Impact | The provided CVSS 3.1 vector (AV:L/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H, score 7.7) frames this as a local, low-complexity flaw requiring no privileges or interaction, with high integrity and availability impact. That severity is somewhat inflated: the underlying bug is a single one-byte out-of-bounds NUL write past the JsLex.token buffer, and both the description and the fix commit (ecd7d43) point to memory corruption manifesting as crashes/denial of service rather than demonstrated code execution or data tampering - so I:H is arguably closer to I:L (see assessed vector). Exploitation signals are weak-to-neutral: no CISA KEV entry, no EPSS score supplied, and no public exploit code identified; there is only a GitHub issue (#2744) and the vendor fix commit, no SSVC decision data. The attack vector is local (AV:L) because an attacker must feed crafted JavaScript into the interpreter (REPL, serial console, or eval of untrusted script), and it only manifests in RELEASE/NO_ASSERT firmware builds - debug builds trip an assertion instead. Net: this is a real memory-safety defect worth patching, but it is a DoS-class local issue in a niche embedded interpreter, not a widespread remotely-exploitable priority. Note the CPE is a null placeholder (cpe:2.3:a:n/a:n/a) so automated product matching is unreliable; the affected product is confirmed as Espruino only via the description and reference commits. |
| Exploit ScenarioDerived | An attacker who can submit JavaScript to an Espruino device - for example over its serial/USB REPL, a network console, or by getting the device to eval() untrusted script - sends input containing an overlong token. Parsing the token triggers a one-byte write past the JsLex.token buffer that clobbers the adjacent tokenValue pointer, corrupting memory and crashing the interpreter (denial of service). No public exploit code has been identified; only a GitHub issue and the fix commit exist. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 24, 2026
Memory corruption in Espruino 2v29 (commit bffc6d0) allows local attackers to trigger a one-byte out-of-bounds write by supplying crafted JavaScript with an overlong token, corrupting the adjacent tokenValue pointer and causing application crashes or denial of service. The flaw only manifests in RELEASE/NO_ASSERT firmware builds; debug builds with assertions enabled catch the overlong token before the write. No public exploit code has been identified at time of analysis, and the assessed CVSS 3.1 vector rates this as AV:L/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:H (score 7.7).
RemediationAI
Apply the upstream fix by updating to a firmware version that includes commit ecd7d43e084ba9aafa8245609347fe0f4383b38c or later; since Espruino is open-source, rebuild from the master branch at or beyond that commit. No tagged release version is confirmed to contain the fix, so verify the commit is present in any binary you deploy. If immediate upgrade is not feasible, switch to debug builds with assertions enabled, which catch the overlong token before the out-of-bounds write occurs; however, assert-enabled builds have performance and memory overhead and may not be suitable for production. Restrict access to the serial/USB REPL and any exposed network console to trusted users, and avoid evaluating untrusted JavaScript. Monitor GitHub issue #2744 for further updates.
Affected VersionsENISA
Affects your stack
Find out whether the stacks and servers you run are on an affected version.
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The vulnerability is an out-of-bounds write (CWE-787) in jslGetTokenValueAsString() within the JavaScript lexer of Espruino. When parsing a token, the function writes a null terminator at lex->token[lex->tokenl] without verifying that tokenl is within the bounds of the JsLex.token buffer. If an overlong token fills the buffer, this one-byte write extends past the buffer and corrupts the adjacent tokenValue pointer, leading to memory corruption. Additionally, jsvGetString() returned len instead of len-1, contributing to the off-by-one condition. The upstream fix commit ecd7d43e084ba9aafa8245609347fe0f4383b38c removes the erroneous null terminator write and corrects the length return. This issue only occurs in RELEASE/NO_ASSERT builds; builds with assertions enabled detect the overlong token and abort before the out-of-bounds write.
Know when Espruino gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:L/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H
Local because attacker must feed JS to the interpreter (AV:L); no auth/UI to submit script (PR:N/UI:N); single-byte pointer clobber yields crash/DoS (A:H) with limited integrity impact (I:L), no confidentiality.
Primary rating from Vendor (mitre).
CVSS VectorVendor: mitre
Lifecycle Timeline
3DescriptionCVE.org
An out-of-bounds write vulnerability in jslGetTokenValueAsString() in Espruino 2v29 (commit bffc6d0) allows crafted JavaScript input containing an overlong token to trigger a one-byte write beyond the JsLex.token buffer in RELEASE/NO_ASSERT builds. The out-of-bounds write corrupts the adjacent tokenValue pointer, resulting in memory corruption and potentially causing application crashes or denial of service.
Executive ViewAI
Espruino 2v29 RELEASE/NO_ASSERT firmware deployments are exposed to a local, unauthenticated denial-of-service flaw that can crash affected devices when crafted JavaScript is supplied. Leadership should care because these embedded systems may support operational technology, IoT, or edge services where unexpected outages can disrupt business processes or customer-facing functions. No vendor-released patch identified at time of analysis, so risk reduction depends on access controls and configuration until a fix is available.
No vendor-released patch identified at time of analysis; restrict local access to affected devices, disable or strictly limit untrusted JavaScript input, use assertion-enabled/debug builds where operationally feasible, run the interpreter with least privilege, and monitor for crashes or abnormal restarts.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
A buffer overflow occurs when a program writes more data to a memory buffer than it was allocated to hold, causing the excess data to spill into adjacent memory regions.
Memory corruption occurs when a program writes data beyond the boundaries of allocated memory regions or accesses memory in unintended ways, violating the integrity of the process's address space.
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
Espruino 2v11 release was discovered to contain a stack buffer overflow via src/jsvar.c in jsvGetNextSibling. Rated high
Espruino 2v11.251 was discovered to contain a stack buffer overflow via src/jsvar.c in jsvNewFromString. Rated high seve
There is a stack-based buffer over-read in the jsfNameFromString function of jsflash.c in Espruino 2V00, leading to a de
Espruino before 1.99 allows attackers to cause a denial of service (application crash) and a potential Escalation of Pri
Espruino 2v20 (commit fcc9ba4) was discovered to contain an Out-of-bounds Read via jsvStringIteratorPrintfCallback at sr
Espruino 2v20 (commit fcc9ba4) was discovered to contain a Stack Overflow via the jspeFactorFunctionCall at src/jsparse.
Espruino before 1.99 allows attackers to cause a denial of service (application crash) and a potential Information Discl
Espruino before 1.99 allows attackers to cause a denial of service (application crash) and potential Information Disclos
Espruino before 1.99 allows attackers to cause a denial of service (application crash) with a user crafted input file vi
Espruino before 1.98 allows attackers to cause a denial of service (application crash) with a user crafted input file vi
Espruino before 1.98 allows attackers to cause a denial of service (application crash) with a user crafted input file vi
Espruino before 1.99 allows attackers to cause a denial of service (application crash) with a user crafted input file vi
EUVD-2026-86313
GHSA-5c5x-qcqw-7rfq
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB