CVE-2026-33642Kitty是一款跨平台基于GPU的终端模拟器。在0.46.2及以下版本中,kitty/graphics.c文件的handle_compose_command()函数存在严重漏洞。该函数使用无符号32位算术运算对组合偏移量进行边界验证,容易受到整数回绕的影响,导致堆缓冲区越界读写。攻击者只需能够向Kitty终端写入转义序列(例如通过恶意文件、SSH登录横幅或管道内容),即可利用此漏洞。无需用户交互或非默认配置,攻击者提供的精心构造的x_offset/y_offset值在回绕后通过边界检查,但在compose_rectangles()中导致大规模越界堆内存访问。
该漏洞的根本原因在于Kitty终端处理图形合成命令时的逻辑缺陷。具体来说,位于kitty/graphics.c中的handle_compose_command()函数负责处理图像合成操作。在进行偏移量(x_offset/y_offset)的边界验证时,代码使用了无符号32位整数进行算术运算。当攻击者传入特定的极大值时,计算过程会发生整数回绕。这种回绕使得原本超出合法范围的偏移量在数学计算上看似通过了边界检查。然而,当这些经过“验证”但实际恶意的偏移量被传递给compose_rectangles()函数用于内存操作时,它们指向了预期缓冲区之外的堆内存地址。由于终端模拟器对转义序列的处理是自动的,攻击者可以通过控制输出到终端的内容(如下载的文本文件、SSH连接时的Banner信息或命令行管道输出的数据)来注入恶意转义序列。一旦终端渲染这些序列,就会触发越界读写,可能导致敏感信息泄露或程序崩溃与代码执行。