CVE-2026-80431: Out-of-bounds write in the kitty text sizing protocol allows termination of the terminal process
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 screenhandlemulticellcommand() 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 RAIIListOfChars macro as a four-element chartype 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 ensurespaceforchars() 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.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
kittyto a version that resolves this vulnerability.Fixed in 0.49.0
Event History
Frequently Asked Questions
Which installations should be prioritized for remediation?
Kitty versions from 0.40.0 up to, but not including, 0.49.0 are affected. Version 0.49.0 includes the referenced fix.
What must an attacker be able to do to trigger the issue?
A program must be able to write terminal output containing an OSC 66 escape sequence with a grapheme cluster longer than four codepoints. The out-of-bounds write occurs as kitty processes that terminal payload.
What is the practical impact of successful exploitation?
The documented result is termination of the kitty process. This also terminates all of its windows, tabs, and child processes.