Description
Out-of-bounds Write in the natural width branch of the text sizing protocol in kitty from 0.40.0 before 0.49.0 allows a program writing to the terminal to write past the end of a fixed-size buffer, because screen_handle_multicell_command() in kitty/screen.c appends each codepoint of a grapheme cluster with lc.chars[lc.count++] = ch without any capacity check, while lc is declared by the RAII_ListOfChars macro as a four-element char_type array in the function's stack frame, so an OSC 66 escape code whose payload carries a grapheme cluster longer than four codepoints writes beyond that buffer, one 32-bit value per additional codepoint, in the order the codepoints appear. Where the cluster is preceded in the same payload by a sequence that causes an intermediate flush, the buffer is first migrated to the heap by ensure_space_for_chars() and the write occurs past the heap allocation instead. This results in termination of the kitty process and therefore of all its windows, tabs and child processes.
Published: 2026-09-25
Score: 6.8 Medium
EPSS: < 1% Very Low
KEV: No
Impact: Denial of Service (process termination)
Action: Immediate Patch
AI Analysis

Impact

A buffer overrun in kitty’s text sizing protocol can be triggered by an OSC 66 escape code that contains a grapheme cluster longer than four codepoints. When the terminal processes such a payload, the routine that appends codepoints writes past the end of a four‑element stack buffer, and if an intermediate flush has migrated the buffer to the heap the write happens beyond the heap allocation. The result is that the kitty process exits abruptly, killing all tabs, windows and any child processes that rely on the terminal.

Affected Systems

The vulnerability affects Kovid Goyal’s kitty terminal emulator from version 0.40.0 up to, but not including, 0.49.0. Any installation running one of those pre‑0.49 releases is potentially vulnerable.

Risk and Exploitability

The CVSS v3 base score of 6.8 indicates moderate severity. The EPSS score is not available, and the vulnerability is not recorded in CISA’s KEV catalog. Because the flaw is exercised by sending a specific control sequence to a terminal, the attack is local and requires a program that can write arbitrary data to kitty; it cannot be triggered over a network unless the terminal is exposed to such input. Exploitation would likely involve clever crafting of an OSC 66 payload by an attacker with local access or by a malicious application running under the user’s account. The impact is the loss of terminal functionality for that user session.

Generated by OpenCVE AI on September 25, 2026 at 16:42 UTC.

Remediation

Vendor Solution

Upgrade to kitty 0.49.0 or later.


OpenCVE Recommended Actions

  • Upgrade to kitty 0.49.0 or newer, which contains the buffer bounds check in the text sizing protocol.
  • Avoid sending OSC 66 escape codes that include grapheme clusters longer than four codepoints to a kitty process.
  • If an immediate upgrade is not possible, restrict the trusted programs that write to the terminal or apply a temporary patch by adding a capacity check before each character append.

Generated by OpenCVE AI on September 25, 2026 at 16:42 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Fri, 25 Sep 2026 13:45:00 +0000

Type Values Removed Values Added
Description Out-of-bounds Write in the natural width branch of the text sizing protocol in kitty from 0.40.0 before 0.49.0 allows a program writing to the terminal to write past the end of a fixed-size buffer, because screen_handle_multicell_command() in kitty/screen.c appends each codepoint of a grapheme cluster with lc.chars[lc.count++] = ch without any capacity check, while lc is declared by the RAII_ListOfChars macro as a four-element char_type array in the function's stack frame, so an OSC 66 escape code whose payload carries a grapheme cluster longer than four codepoints writes beyond that buffer, one 32-bit value per additional codepoint, in the order the codepoints appear. Where the cluster is preceded in the same payload by a sequence that causes an intermediate flush, the buffer is first migrated to the heap by ensure_space_for_chars() and the write occurs past the heap allocation instead. This results in termination of the kitty process and therefore of all its windows, tabs and child processes.
Title Out-of-bounds write in the kitty text sizing protocol allows termination of the terminal process
First Time appeared Kovidgoyal
Kovidgoyal kitty
Weaknesses CWE-787
CPEs cpe:2.3:a:kovidgoyal:kitty:*:*:*:*:*:*:*:*
Vendors & Products Kovidgoyal
Kovidgoyal kitty
References
Metrics cvssV4_0

{'score': 6.8, 'vector': 'CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N'}


Subscriptions

Kovidgoyal Kitty
cve-icon MITRE

Status: PUBLISHED

Assigner: Secur0

Published:

Updated: 2026-09-25T15:07:45.536Z

Reserved: 2026-08-26T10:49:01.410Z

Link: CVE-2026-80431

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Awaiting Analysis

Published: 2026-09-25T14:17:19.253

Modified: 2026-09-29T21:32:59.833

Link: CVE-2026-80431

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-09-26T12:30:07Z

Weaknesses