Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconGain physical access to target board
-
DeliverySubstitute or spoof GT9xx I2C controller
-
ExploitPass init probe with valid product ID and config
-
InstallReport touch count above configured maximum
-
C2Overflow point_reg[] via 8-byte I2C reads
-
ExecuteOverwrite gt911_process() stack with chosen data
-
ImpactHijack control flow at kernel privilege
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 control, substitute, or spoof the I2C touch controller that the Zephyr GT9xx driver talks to; the spoofed device must answer the driver's init probes with a supported product ID and a checksum-valid config blob, then report a touch-point count greater than CONFIG_INPUT_GT911_MAX_TOUCH_POINTS (Kconfig range 1..5, default 1) in the status register's low nibble (masked by GT911_TOUCH_POINTS_MSK 0x0F to 0..15). The practical limiting factors are: physical/local hardware access is mandatory (AV:P) with no network, USB, or syscall path; the vulnerable boards are those where the GT9xx panel is a pluggable display module or shield rather than an on-PCB part; and the condition can also be met non-adversarially by a GT9271-class panel that ignores the driver's touch-count programming and reports up to ten points, or by bus corruption of the single status byte - meaning no attacker is strictly required to trigger the overflow. |
| Impact | All signals point to a genuinely high technical impact but a sharply constrained real-world risk. The provided CVSS:3.1 vector (6.8, Medium) encodes the critical limiter: AV:P means physical/local hardware access is required - the description explicitly states there is no network, USB, or syscall path to the defect, which is consistent with AV:P. With AC:L/PR:N/UI:N the attack is easy and needs no authentication once physical hardware access is achieved, and C:H/I:H/A:H reflects a stack out-of-bounds write of fully attacker-chosen content at kernel privilege (control-flow hijack potential). SSVC-style reasoning: technical impact is total, but exploitation is NOT automatable - it requires physically substituting or spoofing the I2C touch controller. EPSS is not provided, there is no CISA KEV listing, and no public exploit is identified in the input, so there is no evidence of active or at-scale exploitation. This is therefore a real but targeted/physical-access priority rather than a widespread remote threat - worth patching on affected embedded devices but not an emergency for fleets lacking the vulnerable touch hardware. One notable nuance the vendor flags: the overflow can also occur NON-adversarially with a GT9271-class panel that reports up to ten points or via bus corruption of the single status byte, raising reliability/robustness risk even absent an attacker. EPSS score is missing, so widespread-exploitation probability cannot be independently confirmed. |
| Exploit ScenarioDerived | An attacker with physical access to an embedded board that uses a pluggable GT9xx touch panel or shield swaps in a malicious or spoofed I2C device that passes the driver's init probes with a supported product ID and a checksum-valid config blob. The spoofed controller then reports more touch points than CONFIG_INPUT_GT911_MAX_TOUCH_POINTS allows, so each per-point 8-byte I2C read writes attacker-chosen data past the end of point_reg[] on the gt911_process() stack frame, enabling control-flow hijack at kernel privilege. No public exploit code is identified at time of analysis, and the physical attack vector (AV:P) with low complexity means the practical barrier is hardware access, not technical skill. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 11, 2026
An out-of-bounds stack write in the Zephyr RTOS Goodix GT9xx touch driver (drivers/input/input_gt911.c) lets a malicious or misbehaving I2C touch controller overwrite up to 112 bytes of the gt911_process() stack frame with attacker-chosen data running at kernel privilege, potentially hijacking control flow on the host microcontroller. Only systems built with the GT9xx driver are affected, and reaching the defect requires physical/local access to the I2C bus (AV:P) - there is no network, USB, or syscall path - most plausibly on boards where the panel is a pluggable display module or shield rather than a soldered part. No public exploit code has been identified at time of analysis and the issue is not in CISA KEV, though the fix is a small one-line clamp and the same overflow can occur non-adversarially with a GT9271-class panel or a single corrupted status byte.
RemediationAI
Upstream fix available (PR/commit); released patched version not independently confirmed - the canonical remediation is to apply the Zephyr fix commit 42b52d571eb2113012c135276693042fd372fdea, which clamps the reported touch-point count with min(status & GT911_TOUCH_POINTS_MSK, CONFIG_INPUT_GT911_MAX_TOUCH_POINTS) before it is used as a loop bound, or to update to a downstream release that includes it; see advisory GHSA-p7qh-fvwx-f7vr for vendor guidance. Where patching is not immediately possible, raise CONFIG_INPUT_GT911_MAX_TOUCH_POINTS to its maximum of 5, which shrinks the maximum overrun from roughly 112 bytes to about 80 bytes but does not eliminate the defect, and note it increases per-call stack usage with no functional benefit for genuine GT911 panels that report at most five points. Because the attack requires controlling or substituting the I2C controller, harden the physical layer: prefer soldering the panel or use a locked/glued connector instead of pluggable modules and shields, and isolate or filter the GT9xx I2C bus where feasible. Bus-integrity measures (proper pull-ups, shorter traces, lower bus speed) reduce the non-adversarial trigger from corruption of the single status byte. If the touch panel is not required, disabling the GT9xx driver entirely removes the attack surface; this trades away touch input functionality.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The Zephyr GT9xx input driver (input_gt911.c) communicates with the Goodix touch controller over I2C. During gt911_process(), the driver reads a status register, masks the low nibble with GT911_TOUCH_POINTS_MSK (0x0F) to obtain a reported touch-point count in the range 0..15, and uses that value directly as the loop bound for filling point_reg[], a stack array sized by CONFIG_INPUT_GT911_MAX_TOUCH_POINTS. That Kconfig symbol is constrained to 1..5 with a default of 1, so a count above the configured maximum writes past the end of the array: every iteration performs an I2C read of eight bytes directly into point_reg[i], so up to 112 bytes of peer-supplied data can be written over the gt911_process() stack frame in the system workqueue thread, followed by two further loops that read out of bounds from the same array. The root cause is CWE-787 (out-of-bounds write) - a classic missing bounds check where the driver relied solely on a comment asserting the controller was programmed at init to never report more points than configured. The upstream fix adds an include of <zephyr/sys/minmax.h> and clamps the value with min(status & GT911_TOUCH_POINTS_MSK, CONFIG_INPUT_GT911_MAX_TOUCH_POINTS) before any array indexing.
Know when Zephyr 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:P/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Physical access to the I2C bus/controller (AV:P), low complexity with no auth or user interaction once connected, and a kernel-privilege stack overwrite yielding full C/I/A impact.
Primary rating from Vendor (zephyr).
CVSS VectorVendor: zephyr
DescriptionCVE.org
The Goodix GT9xx input driver in drivers/input/input_gt911.c reads the touch point count from the controller's status register and masks it with GT911_TOUCH_POINTS_MSK (0x0F), yielding a value of 0..15. In gt911_process() that value is used directly as the loop bound for filling point_reg[], a stack array sized to CONFIG_INPUT_GT911_MAX_TOUCH_POINTS, whose Kconfig range is 1..5 with a default of 1. No other check constrains the count; the driver relied only on a comment asserting that the controller had been programmed at init to report no more points than configured.
Each loop iteration issues an I2C read of eight bytes straight into point_reg[i], so a controller that reports more points than the array holds causes up to 112 bytes of peer-supplied data to be written past the end of the array, over the stack frame of gt911_process() in the system workqueue thread. Two further loops then read out of bounds from the same array. Triggering it requires control of, or the ability to substitute, the I2C touch controller - plausible on the many supported boards where the GT9xx panel is a pluggable display module or shield rather than an on-PCB part; a spoofed device need only answer the init probes with a supported product ID and a checksum-valid config blob. The same overflow can also occur non-adversarially, with a GT9271-class panel that ignores the driver's touch-count programming and reports up to ten points, or with bus corruption of the single status byte.
The impact is an out-of-bounds stack write with fully attacker-chosen content executing at kernel privilege, i.e. potential control-flow hijack on the host MCU, in addition to out-of-bounds reads and crashes. The attack vector is physical/local hardware access only; there is no network, USB, or syscall path to the defect. The fix clamps the reported count with min() against CONFIG_INPUT_GT911_MAX_TOUCH_POINTS before any array indexing.
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.
Potential off-by-one buffer overflow vulnerability in the Zephyr fuse file system. Rated critical severity (CVSS 10.0),
An out-of-bounds write in the Zephyr RTOS DNS resolver (dns_unpack_name()) lets a crafted DNS response corrupt memory on
Possible variant of CVE-2021-3434 in function le_ecred_reconf_req. Rated critical severity (CVSS 9.8), this vulnerabilit
Unchecked user input length in /subsys/net/l2/wifi/wifi_shell.c can cause buffer overflows. Rated critical severity (CVS
Potential buffer overflow vulnerability in the Zephyr CAN bus subsystem. Rated critical severity (CVSS 9.8), this vulner
Integer Underflow in 6LoWPAN IPHC Header Uncompression in Zephyr. Rated critical severity (CVSS 9.8), this vulnerability
Buffer overflow in Zephyr USB DFU DNLOAD. Rated critical severity (CVSS 9.8), this vulnerability is remotely exploitable
DOS: Incorrect 802154 Frame Validation for Omitted Source / Dest Addresses. Rated critical severity (CVSS 9.8), this vul
zephyr-rtos version 1.12.0 contains a NULL base pointer reference vulnerability in sys_ring_buf_put(), sys_ring_buf_get(
Potential buffer overflow vulnerabilities n the Zephyr Bluetooth subsystem. Rated critical severity (CVSS 9.6), this vul
The documentation specifies that the BT_GATT_PERM_READ_LESC and BT_GATT_PERM_WRITE_LESC defines for a Bluetooth characte
Potential buffer overflows in the Bluetooth subsystem due to asserts being disabled in /subsys/bluetooth/host/hci_core.c
EUVD-2026-97112
NVD
CVE.org
EPSS
GitHub
Exploit-DB