CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2023-22345

The Unchecked Canvas: Smashing the Stack in JTEKT HMI Designer

Alon Barad
Alon Barad
Software Engineer

Jan 15, 2026·7 min read·62 visits

Executive Summary (TL;DR)

The software used to design HMI screens for industrial control systems has a fatal flaw in how it parses project files. It detects errors but ignores them, continuing to write data until it corrupts memory. By tricking an engineer into opening a malicious project file, an attacker can execute arbitrary code on the engineering workstation.

A critical Out-of-bounds Write vulnerability in JTEKT Screen Creator Advance 2 allows attackers to achieve Arbitrary Code Execution via malformed project files, exploiting a failure to abort operations upon encountering 'out of specification' errors.

The Hook: Designing Disaster

In the world of Industrial Control Systems (ICS), the engineering workstation is the crown jewel. It's the machine where the logic for PLCs is written and where the screens for Human-Machine Interfaces (HMIs) are designed. If you compromise the workstation, you own the factory floor. Enter JTEKT Screen Creator Advance 2, a piece of software used to design the touch interfaces for JTEKT's industrial displays.

File format parsers are the soft underbelly of ICS software. These applications are built to ingest complex, proprietary file formats (often legacy binary blobs) that define everything from button placement to macro logic. CVE-2023-22345 is a classic example of what happens when a parser trusts its input too much. It’s a vulnerability that turns a mundane design file into a weaponized payload capable of executing arbitrary code on the designer's machine.

Why is this interesting? Because it targets the human element. You don't need to bypass a firewall to exploit this; you just need a frustrated engineer to open a "troubleshooting" file you sent them. It's a client-side attack against the people holding the keys to the physical machinery.

The Flaw: The Error That Wasn't

The vulnerability is an Out-of-bounds Write (CWE-787), but the root cause is a failure of logic rather than just a simple calculation error. According to the analysis, the issue resides in how the software handles "out of specification" errors during the parsing of project files.

When a robust parser encounters data that violates the file format specification (e.g., a button width defined as 40,000 pixels on a 1080p screen), it should throw an exception and abort the load process. Screen Creator Advance 2, however, exhibits a fatal stubbornness. It seemingly detects the error—recognizing the data is "out of specification"—but fails to stop the processing pipeline.

Imagine a construction crew building a bridge. The blueprint says to use a 10-foot beam. The truck delivers a 50-foot beam. The foreman notes, "This is the wrong size," in a logbook, but then tells the crew, "Install it anyway." The result is structural failure. In software terms, the application continues to write the malformed data into a fixed-size memory buffer, causing an overflow that overwrites adjacent memory, potentially including return addresses or function pointers.

The Code: Silent Failure

While the proprietary source code isn't public, we can reconstruct the logic flaw based on the vulnerability behavior. This pattern is distressingly common in legacy C/C++ parsers where error handling is an afterthought or where developers try to make the software "robust" by ignoring non-critical errors.

The Vulnerable Logic

In the vulnerable version, the parser likely checks for validity but forgets the most important part: the return statement.

// Pseudo-code reconstruction of the flaw
void ParseProjectElement(char* inputData) {
    ElementHeader header;
    memcpy(&header, inputData, sizeof(header));
 
    // 1. Validation Step
    if (header.dataLength > MAX_BUFFER_SIZE) {
        // LOGIC FLAW: The error is logged/flagged, but execution continues!
        LogError("Error: Data length out of specification");
        // Missing: return; or goto error;
    }
 
    // 2. The Corruption
    // The code proceeds to use the bad length because it wasn't aborted.
    // This writes past the end of 'destinationBuffer'.
    memcpy(destinationBuffer, inputData + sizeof(header), header.dataLength);
}

The Fix

The remediation in Ver.0.1.1.4 Build01A involves strictly enforcing the error condition. When the parser detects data that is out of spec, it must immediately halt processing to prevent the dangerous memcpy or write operation.

// The patched logic
    if (header.dataLength > MAX_BUFFER_SIZE) {
        LogError("Error: Data length out of specification");
        // FIX: Abort the operation immediately
        return ERROR_INVALID_FILE;
    }

This simple addition of a flow control statement prevents the instruction pointer from ever reaching the memory corruption routine.

The Exploit: Crafting the Poisoned Project

Exploiting CVE-2023-22345 requires a standard file format exploit chain. Since this is a Windows-based application, the attacker needs to craft a file that bypasses modern mitigations like ASLR (Address Space Layout Randomization) and DEP (Data Execution Prevention).

Step 1: File Format Reversing The attacker starts by generating valid project files and fuzzing them. They mutate specific fields—lengths, offsets, and counters—looking for crashes. The goal is to find the specific field that triggers the "out of specification" error path.

Step 2: Triggering the Overflow Once the crash is identified, the attacker refines the file. They set a length field to a value larger than the allocated buffer. When the user opens this file, the application attempts to copy the attacker's payload into the buffer. Because the length is unchecked (effectively), the copy operation smashes the stack or heap metadata.

Step 3: Gaining Control If it's a stack overflow, the attacker overwrites the Saved Return Address (SRA). When the parsing function attempts to return, it pops the attacker's address off the stack instead of the legitimate caller's address. If it's a heap overflow, the attacker might corrupt the Free List or C++ vtable pointers.

Step 4: ROP Chain and Shellcode To bypass DEP, the attacker constructs a Return-Oriented Programming (ROP) chain—small snippets of existing executable code—to mark their shellcode region as executable (e.g., via VirtualProtect). Finally, the execution flows to the shellcode, which likely opens a reverse shell back to the attacker.

> [!NOTE] > This is a "User Interaction Required" (UI:R) vulnerability. The exploit doesn't work by staring at the screen; the victim must actively open the file. This makes it a prime candidate for spear-phishing campaigns targeting OT engineers.

The Impact: From Desktop to Factory Floor

Why panic over a desktop app vulnerability? Because of where it sits. Screen Creator Advance 2 isn't installed on the receptionist's laptop; it's installed on the Engineering Workstation.

1. Lateral Movement: Engineering workstations often sit in a unique position in the network topology. They have one leg in the corporate IT network (to receive email/files) and one leg in the OT/ICS network (to push programming to PLCs and HMIs). Gaining RCE here bridges the air gap.

2. Project Tampering: An attacker doesn't just have to run ransomware. They can subtly modify legitimate HMI projects. Imagine altering the "Emergency Stop" button logic on a foundry control screen so that the UI shows "Stopped" while the furnace continues to heat up. The physical consequences of integrity loss in this environment are catastrophic.

3. Intellectual Property Theft: Project files contain the entire logic and layout of a manufacturing process. Stealing these files gives competitors or nation-states a blueprint of the facility's operations.

The Fix: Remediation

JTEKT has released a patch, and applying it is the only reliable fix. The vulnerability logic is hardcoded into the binary; no amount of firewall rules will fix a broken parser.

Immediate Action: Update to Screen Creator Advance 2 Ver.0.1.1.4 Build01A or later. This version correctly implements the error handling logic, ensuring that "out of specification" data terminates the parsing process safely.

Process Mitigation: Implement strict file hygiene. Engineering workstations should be treated as secure enclaves. Do not download project files from the internet or open email attachments directly on these machines. Transfer files via a sanitized USB or a secure file transfer gateway that scans for anomalies, although custom file format fuzzing by security gateways is rare.

Official Patches

JTEKTOfficial patch download page

Technical Appendix

CVSS Score
7.8/ 10
CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
EPSS Probability
0.09%
Top 74% most exploited

Affected Systems

JTEKT Screen Creator Advance 2 (Ver.0.1.1.4 Build01 and earlier)

Affected Versions Detail

Product
Affected Versions
Fixed Version
Screen Creator Advance 2
JTEKT ELECTRONICS CORPORATION
<= 0.1.1.4 Build010.1.1.4 Build01A
AttributeDetail
CWE IDCWE-787 (Out-of-bounds Write)
CVSS v3.17.8 (High)
Attack VectorLocal (User Interaction Required)
ImpactArbitrary Code Execution / Denial of Service
Exploit StatusPoC (Theoretical)
KEV ListedNo

MITRE ATT&CK Mapping

T1204.002User Execution: Malicious File
Execution
T1190Exploit Public-Facing Application
Initial Access
T1059Command and Scripting Interpreter
Execution
CWE-787
Out-of-bounds Write

The product writes data past the end, or before the beginning, of the intended buffer.

Vulnerability Timeline

Vendor Advisory & Patch Released
2023-02-03
JVN Publication
2023-02-03
NVD Publication
2023-02-13
CISA ICS Advisory Published
2023-04-06

References & Sources

  • [1]JVNVU#98917488
  • [2]CISA ICS Advisory

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•2 days ago•CVE-2026-115895
8.8

CVE-2026-115895: Code Injection via Unsanitized Import Alias in Happy DOM ECMAScript Module Compiler

CVE-2026-115895 is a high-severity code injection vulnerability (CWE-94) in the happy-dom npm package prior to version 21.0.4. The vulnerability exists within the ECMAScriptModuleCompiler component, which transforms ECMAScript module syntax into executable Node.js functions when JavaScript evaluation is enabled. Due to an incomplete fix for CVE-2026-33943, the compiler failed to validate local named import aliases against legal JavaScript identifier rules. Attackers supplying crafted module imports—specifically utilizing destructuring default initializers alongside JSON module attributes—can inject arbitrary JavaScript expressions directly into the host Node.js runtime context.

Amit Schendel
Amit Schendel
8 views•10 min read
•2 days ago•CVE-2026-115883
6.0

CVE-2026-115883: Cross-Namespace Access via Dot-Delimited Labels in LangGraph Postgres and SQLite Stores

An improper input validation and authorization bypass vulnerability exists in the LangGraph storage layer affecting langgraph, langgraph-checkpoint-postgres, and langgraph-checkpoint-sqlite. Because relational store implementations serialize namespace tuples into dot-delimited strings without validating labels on read, search, delete, and batch operations, an attacker who controls a namespace label can inject periods (.) to traverse namespace boundaries and access, modify, or delete data belonging to other namespaces.

Amit Schendel
Amit Schendel
8 views•9 min read
•2 days ago•CVE-2026-115886
6.5

CVE-2026-115886: Unauthenticated Server-Side Request Forgery and Unsafe Reflection in MLflow Scorer Evaluation Endpoints

CVE-2026-115886 (GHSA-2wqp-q3c6-ccj5) is a Server-Side Request Forgery (SSRF) and Unsafe Reflection vulnerability in MLflow versions 3.12.0rc0 prior to 3.17.0. Unauthenticated REST API endpoints accept serialized third-party scorer JSON payloads that are dynamically deserialized and reflectively instantiated without sanitizing constructor keyword arguments. When optional dependencies such as trulens and trulens-providers-litellm are installed, attackers can inject egress-steering arguments into the scorer payload, forcing the MLflow server to dispatch outbound HTTP requests to arbitrary internal destinations or cloud metadata services.

Alon Barad
Alon Barad
13 views•10 min read
•3 days ago•CVE-2026-113872
7.5

CVE-2026-113872: Unauthenticated Process Crash in Express Multer via Late Busboy Stream Resumption

CVE-2026-113872 (GHSA-q7qp-rjg7-q26m) is a high-severity denial-of-service vulnerability affecting the multer multipart/form-data upload middleware for Node.js and Express in versions 2.0.0 through 2.4.0. When an endpoint is configured to accept multiple files using an asynchronous fileFilter callback, a crafted, truncated multipart HTTP request can trigger an unhandled error event on the underlying busboy stream parser after request teardown has already completed. Because all error listeners are stripped during teardown, Node.js treats the resulting error event as an uncaught exception and immediately terminates the server process.

Amit Schendel
Amit Schendel
10 views•12 min read
•3 days ago•CVE-2026-115897
2.1

CVE-2026-115897: Cross-Site Scripting via Function Body Boundary Bypass in serialize-javascript

CVE-2026-115897 (also tracked as GHSA-m5mm-p8h7-m29v and aliased as CVE-2026-115754) is a Cross-Site Scripting (XSS) vulnerability in the Yahoo serialize-javascript npm package prior to version 7.1.3. The flaw exists in the regular expression used by escapeFunctionBody() to neutralize HTML script closing tags within serialized JavaScript functions. Because function bodies are sanitized in isolation before structural formatting is applied, a function whose string representation terminates directly with the sequence '</script' bypasses the positive lookahead check. When combined with serialization formatting options that introduce whitespace delimiters and a subsequent property that supplies a closing bracket, an attacker can prematurely terminate an enclosing HTML <script> block and inject arbitrary HTML or JavaScript into the rendered document.

Amit Schendel
Amit Schendel
7 views•13 min read
•3 days ago•CVE-2026-109841
5.9

CVE-2026-109841: Subresource Integrity Verification Bypass in Node.js Undici

CVE-2026-109841 is a Subresource Integrity (SRI) verification bypass vulnerability in undici, the official HTTP/1.1 and HTTP/2 client library for Node.js that powers the global fetch() implementation. The flaw stems from improper handling of case sensitivity (CWE-178) when validating cryptographic hash algorithm tokens within SRI metadata. Because undici compared incoming algorithm identifiers against a strictly lowercase set without prior ASCII-lowercase normalization, valid uppercase or mixed-case tokens such as SHA256- or Sha384- were treated as unrecognized algorithms and discarded. Under SRI forward-compatibility rules, discarding all provided tokens results in an empty integrity list, causing undici to fail open and accept tampered HTTP response bodies without cryptographic verification.

Alon Barad
Alon Barad
17 views•9 min read