Skip to main content

Espruino CVE-2026-88390

| EUVDEUVD-2026-86313 HIGH
Out-of-bounds Write (CWE-787)
2026-09-24 mitre GHSA-5c5x-qcqw-7rfq
7.7
CVSS 3.1 · Vendor: mitre
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Gain input path to Espruino REPL/eval
  2. Delivery
    Submit crafted JS with overlong token
  3. Exploit
    One-byte write past JsLex.token buffer
  4. Execution
    Corrupt adjacent tokenValue pointer
  5. Impact
    Interpreter 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.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
No patch listed yet 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

n/a n/a

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

Vendor (mitre) PRIMARY 7.7 HIGH
AV:L/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H
vuln.today AI 6.8 MEDIUM

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.

3.1 AV:L/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:H
4.0 AV:L/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (mitre).

CVSS VectorVendor: mitre

Attack Vector
Local
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
High
Availability
High

Lifecycle Timeline

3
CVSS changed
Sep 24, 2026 - 19:22 NVD
7.7 (HIGH)
CVE Published
Sep 24, 2026 - 00:00 cve.org
UNKNOWN (no severity yet)
CVE Published
Sep 24, 2026 - 00:00 cve.org
HIGH 7.7

DescriptionCVE.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

Why It Matters

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.

Business Impact: High
Compensating Controls

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

EPSS Score
0.2%
Top 94% exploitable
Prevalence
Low
niche open-source JS interpreter for hobbyist/IoT microcontrollers and Bangle.js
Data Quality
5 sources
Confidence: Medium

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.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.2%
Patch available No
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
Poc
System Exposure· derived
Small
Automatable
No
Human Impact
High
Technical Impact
Total

Priority Score

38
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +38
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

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.

CVE-2022-25465 HIGH POC
7.8 Mar 05

Espruino 2v11 release was discovered to contain a stack buffer overflow via src/jsvar.c in jsvGetNextSibling. Rated high

CVE-2022-25044 HIGH POC
7.8 Mar 05

Espruino 2v11.251 was discovered to contain a stack buffer overflow via src/jsvar.c in jsvNewFromString. Rated high seve

CVE-2018-20201 HIGH POC
7.8 Dec 18

There is a stack-based buffer over-read in the jsfNameFromString function of jsflash.c in Espruino 2V00, leading to a de

CVE-2018-11595 HIGH POC
7.8 May 31

Espruino before 1.99 allows attackers to cause a denial of service (application crash) and a potential Escalation of Pri

CVE-2024-25201 HIGH POC
7.5 Feb 07

Espruino 2v20 (commit fcc9ba4) was discovered to contain an Out-of-bounds Read via jsvStringIteratorPrintfCallback at sr

CVE-2024-25200 HIGH POC
7.5 Feb 07

Espruino 2v20 (commit fcc9ba4) was discovered to contain a Stack Overflow via the jspeFactorFunctionCall at src/jsparse.

CVE-2018-11598 HIGH POC
7.1 May 31

Espruino before 1.99 allows attackers to cause a denial of service (application crash) and a potential Information Discl

CVE-2018-11593 HIGH POC
7.1 May 31

Espruino before 1.99 allows attackers to cause a denial of service (application crash) and potential Information Disclos

CVE-2018-11594 MEDIUM POC
5.5 May 31

Espruino before 1.99 allows attackers to cause a denial of service (application crash) with a user crafted input file vi

CVE-2018-11592 MEDIUM POC
5.5 May 31

Espruino before 1.98 allows attackers to cause a denial of service (application crash) with a user crafted input file vi

CVE-2018-11591 MEDIUM POC
5.5 May 31

Espruino before 1.98 allows attackers to cause a denial of service (application crash) with a user crafted input file vi

CVE-2018-11590 MEDIUM POC
5.5 May 31

Espruino before 1.99 allows attackers to cause a denial of service (application crash) with a user crafted input file vi

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy