Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessGain input access to Espruino interpreter
-
DeliverySubmit crafted malformed raw string
-
ExploitLexer frees iterator, passes NULL to jsvLockAgain
-
ExecutionWrite through NULL pointer
-
ImpactMemory corruption and interpreter termination (DoS)
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A10:2025 - Mishandling of Exceptional Conditions
ASVS 5.0
V16 - Security Logging and Error Handling Null pointer safety, defensive checks
MITRE ATT&CK
1 technique across 1 tactic: Impact The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires the ability to feed crafted raw/binary string input into the Espruino lexer (jslGetRawString in src/jslex.c) - i.e., the attacker must supply script or raw-string source to the interpreter, which is Espruino's normal input path via REPL, serial/USB console, or script loading. Critically, exploitation is limited to RELEASE/NO_ASSERT builds: assertion-enabled (debug) builds catch the NULL iterator and abort safely. Impact is confined to memory corruption and process termination (denial of service) of the interpreter itself; there is no confidentiality or integrity impact. The CVSS vector indicates a local attack vector (AV:L), so remote network exploitation is not implied unless the interpreter is exposed over a network-facing input channel. |
| Impact | This is a genuine but low-priority issue. The provided CVSS 3.1 vector (AV:L/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H, base 6.2) describes a local, availability-only NULL pointer dereference - no confidentiality or integrity impact, only crash/DoS. EPSS is very low at 0.14% (3rd percentile), it is NOT in CISA KEV, and no public exploit was identified in the supplied data (the GitHub issue #2745 and the fix commit are referenced, but there is no weaponized POC). All signals align in the same direction: low real-world exploitation likelihood and impact limited to termination of the Espruino process. The one nuance worth stating explicitly is that the flaw only manifests in RELEASE/NO_ASSERT builds - debug/assert-enabled builds catch the NULL iterator via the assertion guard, so exploitability is build-configuration dependent. Exploitation also presupposes the attacker can already feed crafted script/raw-string input to the interpreter, which on a JavaScript runtime is the normal operating mode rather than a privilege boundary. Net: a real, vendor-fixed bug, but not an urgent priority. |
| Exploit ScenarioDerived | An attacker who can submit JavaScript source or raw/binary string input to an Espruino interpreter (e.g., via a REPL, serial/USB console, or a script-loading interface) supplies a malformed raw string that pushes the lexer's string iterator to EOF and frees lex->it.var. jslGetRawString() then passes the resulting NULL iterator target to jsvLockAgain(), and on a RELEASE/NO_ASSERT build the missing assertion allows a write through the NULL pointer, corrupting memory and terminating the interpreter. No public exploit code was identified, though the triggering issue and fix commit are public. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 29, 2026
Memory corruption and denial-of-service in Espruino's JavaScript lexer can be triggered by crafted raw or binary string input, causing a NULL pointer dereference in jslGetRawString() (src/jslex.c) when the lexer passes a NULL iterator target to jsvLockAgain(). Only RELEASE/NO_ASSERT builds are affected-assertion-enabled debug builds abort safely-and the CVSS vector (AV:L/PR:N) indicates unauthenticated local attackers who can supply script input via REPL, serial/USB console, or script loading can terminate the interpreter. EPSS is 0.14% (3rd percentile), no public exploit code has been identified, and an upstream fix commit (0db0663) is available.
RemediationAI
Apply the upstream fix in commit 0db0663ac5201a6fea68094b45da673edec45187, which adds a NULL check around jsvLockAgain(lex->it.var) in src/jslex.c and prevents the write through the NULL pointer; this is the vendor-released correction, though a tagged patched release version is not independently confirmed, so integrators should track Espruino's repository and releases for the first stable version containing that commit. Until an official release is adopted, the most effective compensating control is to run assertion-enabled (debug) firmware, which aborts safely on the NULL iterator instead of corrupting memory-the trade-off is reduced performance and larger debug builds compared with RELEASE builds. Additionally, restrict who can supply scripts or raw/binary string input to the interpreter: limit access to the REPL, serial/USB console, and script-loading interfaces to trusted operators, avoid executing untrusted raw or binary script content, and isolate or sandbox the interpreter process so a crash cannot affect other services. These access restrictions reduce the local attack surface (AV:L) but do not remove the underlying lexer defect; patching remains the definitive fix. Advisory details are available at https://github.com/espruino/Espruino/issues/2745 and the patch at https://github.com/espruino/Espruino/commit/0db0663ac5201a6fea68094b45da673edec45187.
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
Espruino is a JavaScript interpreter for microcontrollers, and its lexer in src/jslex.c handles tokenization of scripts, including raw and binary string literals. The vulnerable function jslGetRawString() calls jsvLockAgain(lex->it.var) under the assumption that a preceding iteration step left lex->it.var locked; however, a malformed raw string or a raw string at end-of-input can push the string iterator to the end and free lex->it.var, making it NULL. In RELEASE or NO_ASSERT builds, the missing assertion guard means jsvLockAgain(NULL) proceeds and a write occurs through the NULL pointer, corrupting memory and terminating the process. This is classified as CWE-476 (NULL Pointer Dereference). Debug builds with assertions enabled catch the NULL iterator and abort safely before the write, so impact is confined to non-assertion production builds. The CVSS vector (AV:L/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H) confirms a local, unauthenticated availability-only issue with no confidentiality or integrity impact, consistent with the interpreter's normal input path via REPL, serial/USB console, or script loading rather than remote network exposure.
Know when N A 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:N/A:H
Local input to the interpreter (AV:L), no auth boundary since feeding script is the normal mode (PR:N), reliably triggered on release builds (AC:L), and impact is crash-only (A:H, C/I:N).
Primary rating from Vendor (mitre).
CVSS VectorVendor: mitre
Lifecycle Timeline
2DescriptionCVE.org
Espruino 2v29 (commit bffc6d0) contains a NULL pointer dereference vulnerability in jslGetRawString() in src/jslex.c. Crafted raw/binary string input can cause the lexer to pass a NULL iterator target to jsvLockAgain(). In RELEASE/NO_ASSERT builds, the missing assertion guard allows a write through the NULL pointer, resulting in memory corruption and application termination or denial of service.
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.
A null pointer dereference occurs when a program attempts to access memory through a pointer that has been set to NULL (address 0x0).
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
LibreNMS before 24.10.0 allows a remote attacker to execute arbitrary code via OS command injection involving AboutContr
Reachable assertion in Open5GS up to version 2.7.6 allows remote unauthenticated attackers to crash the Diameter CER han
A Command Injection issue in the payload build page in BYOB (Build Your Own Botnet) 2.0 allows attackers to execute arbi
Denial of service in Open5GS 2.7.6 and earlier allows network-adjacent attackers with low-privilege Diameter Gx peer acc
Denial of service in Open5GS HSS (Home Subscriber Server) versions 2.7.0 through 2.7.6 is triggered remotely by manipula
Remote command injection in Control Web Panel allows unauthenticated attackers to execute arbitrary OS commands as root
LINQPad before 5.52.01 Pro edition is vulnerable to Unsafe Deserialization in LINQPad.AutoRefManager::PopulateFromCache(
Remote code execution in dash-uploader (Python package for Plotly Dash) versions 0.1.0 through 0.7.0a2 allows unauthenti
Command injection in LiteLLM 1.18.10 lets attackers who can configure MCP (Model Context Protocol) servers supply arbitr
SQL injection in AzuraCast's backup restore flow (versions up to and including 0.23.7) lets an attacker achieve privileg
Arbitrary file read in Yu AI Code Mother v4.3 lets anonymous, remote attackers retrieve files outside the intended previ
Remote code execution in APScheduler (all versions through 3.10.x and 4.0.0a5) is achievable when applications deseriali
EUVD-2026-87108
GHSA-pp3g-9mvp-c3vm
NVD
CVE.org
EPSS
Exploit-DB