CVE-2026-95832 в Debian: локальный код-инъект через kitty и проверка пакетов

CVE: CVE-2026-95832
Продукт: Debian
Дата публикации: 25.09.2026
Критичность: CRITICAL
CVSS: 9.3 (4.0)
EPSS: нет данных; процентиль нет данных
CISA KEV: нет подтверждения в каталоге CISA KEV

Краткое описание​


В Debian отслеживается уязвимость CVE-2026-95832 в пакете kitty. Ошибка позволяет программе, записывающей данные в терминал, выполнить произвольную команду в пользовательской оболочке.

Затронуты версии kitty от 0.47.3 до 0.48.2 включительно; исправление доступно в kitty 0.49.0 и выше.

В Debian Security Tracker статус по всем релизам open, urgency not yet assigned.

Основные характеристики​


Риск заключается в том, что kitty передаёт необработанный текст из OSC-последовательности в псевдотерминал, где он интерпретируется как ввод пользователя. Это даёт возможность выполнить команду с правами того пользователя, который запустил терминал.

  • Тип ошибки: improper neutralization of special elements in output used by a downstream component (CWE-74)
  • CVSS 4.0: CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:P/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X — оценка 9.3, критическая
  • Вектор: локальный доступ к терминалу kitty; нет удалённого доступа и привилегий
  • Факт эксплуатации: в предоставленных источниках не подтверждена реальная эксплуатация; есть только техническое описание механизма
  • EPSS: данные отсутствуют

Какие продукты и версии затронуты​


В Debian уязвим пакет kitty.

Версии, затронутые по данным Debian Security Tracker:

  • bookworm: kitty 0.26.5-5 — статус open, urgency not yet assigned
  • forky: kitty 0.48.2-1.1 — статус open, urgency not yet assigned
  • sid: kitty 0.48.2-1.1 — статус open, urgency not yet assigned
  • trixie: kitty 0.41.1-2+deb13u2 (trixie-security) — статус open, urgency not yet assigned

Исправление в upstream доступно с версии kitty 0.49.0.

Официальный трекер: Debian Security Tracker — CVE-2026-95832.

Причина уязвимости​


Уязвимость возникает в обработчике цветовых escape-кодов kitty. Функция color_control() в kitty/window.py отвечает на запрос с неизвестным именем поля, помещая это имя прямо в ответ.

Ответ обрабатывается функцией write_escape_code_to_child() в kitty/screen.c, которая записывает его в master псевдотерминала. Псевдотерминал не различает этот текст от ввода, который пользователь ввёл вручную. Никакой нейтрализации для оболочки, читающей ввод, не выполняется.

Перед тем как имя поля попадает в ответ, оно сокращается до печатного ASCII — это ограничение было введено в 0.47.3 как исправление CVE-2026-54057. Разделители записей и полей ; и = потребляются как разделители, но все остальные печатные символы сохраняются. Этого достаточно для сборки команды оболочки.

Перенос строки доступен через handle_remote_ssh() в kitty/window.py, который пишет байты из get_ssh_data() в kittens/ssh/utils.py в master псевдотерминала до проверки любых учетных данных, переданных в запросе. Первый байт этих данных начинается с переноса строки.

Ответ формируется как OSC-последовательность, несущая номер escape-кода, имя поля и литеральное значение ?. Это приводит к выполнению команды, выбранной атакующим, с правами пользователя терминала.

Как работает атака​


Атака использует локальный доступ к процессу kitty или каналу, записывающему данные в его псевдотерминал.

Программа-запрос отправляет OSC-последовательность с неизвестным именем поля. kitty формирует ответ, где это имя становится частью текста, записанного в master pty.

Потому что запись в pty не помечена как «ответ от терминала», оболочка внутри kitty воспринимает её как пользовательский ввод. Если имя поля содержит печатные символы и перенос строки, оно может быть собрано в команду оболочки.

Перенос строки получается из данных SSH-подключения: get_ssh_data() возвращает байты, начинающиеся с переноса строки, и handle_remote_ssh() пишет их в pty до проверки учетных данных. Это даёт атакующему возможность завершить команду без дополнительного ввода.

Итог: команда выполняется в оболочке kitty с правами текущего пользователя. Никаких удалённых привилегий или предварительной компрометации не требуется, достаточно доступа к каналу записи в терминал.

Условия успешной эксплуатации​


Для успешной эксплуатации нужны:

  • локальный доступ к системе, где установлен kitty версии от 0.47.3 до 0.48.2 включительно
  • возможность записывать данные в псевдотерминал kitty или управлять процессом, который пишет в его pty
  • работающая оболочка внутри kitty, читающая ввод с pty
  • доступ к каналу SSH-подключения kitty, если используется путь через handle_remote_ssh() для получения переноса строки

Не требуются удалённый доступ, привилегии root или предварительная компрометация оболочки.

Возможный сценарий атаки​


Сценарий описан на уровне механики, без конкретных payload-команд.

Атакующий получает возможность писать в pty kitty. Он формирует OSC-последовательность с неизвестным именем поля. Имя поля содержит печатные символы и перенос строку, собранные из доступных данных SSH-подключения.

kitty обрабатывает запрос: color_control() возвращает имя поля как часть ответа, write_escape_code_to_child() пишет ответ в master pty. Оболочка внутри kitty читает этот текст как ввод пользователя.

Оболочка выполняет полученный текст как команду. Команда выполняется с правами пользователя, запустившего kitty. Результат — выполнение произвольной команды в пользовательском контексте.

Если доступ к SSH-каналу kitty ограничен или pty не подключён к оболочке, путь через handle_remote_ssh() может быть недоступен; тогда нужен прямой канал записи в pty с возможностью формирования переноса строки другим способом.

Есть ли публичный эксплойт​


В предоставленных источниках нет отдельного PoC-артефакта, эксплойтерной утилиты или подтверждённой эксплуатации.

Есть только техническое описание механизма: как kitty обрабатывает неизвестное имя поля в OSC-последовательности и как результат попадает в pty без нейтрализации. Это позволяет понять, как собрать команду из печатных символов и переноса строки, но не содержит готового эксплойта.

Отсутствие сведений о PoC или эксплуатации не означает их отсутствие; источники просто не публикуют их.

Признаки эксплуатации​


Специфичные IOC для CVE-2026-95832 в предоставленных источниках не указаны. Ниже приведены общие, неспецифичные точки контроля.

  • незащищённые процессы kitty с открытым pty и работающей оболочкой внутри
  • неожиданные записи в pty kitty от процессов, не являющихся пользователем
  • выполнение команд в оболочке kitty, не соответствующих действиям пользователя
  • аномальные OSC-последовательности в логах терминала или debug-режиме kitty
  • процессы, пишущие в /dev/pts/* или pty kitty без явного пользовательского ввода
  • новые или изменённые файлы в домашней директории пользователя после работы kitty
  • неожиданные сетевые соединения из процесса kitty или дочерних процессов оболочки

Как обнаружить атаку​


Для обнаружения атаки на kitty с CVE-2026-95832:

  • отслеживать процессы kitty и их дочерние процессы, особенно оболочку bash/sh/zsh внутри kitty
  • проверять записи в pty: /proc/<pid>/fd/ для kitty и оболочки, сопоставляя с ожидаемым пользовательским вводом
  • использовать auditd или eBPF для перехвата системных вызовов write() на file descriptor pty kitty
  • анализировать логи kitty (если включены) на аномальные OSC-последовательности с неизвестными именами полей
  • проверять файлы в домашней директории пользователя на изменения после работы kitty
  • мониторить сетевые соединения процессов kitty и дочерних оболочек
  • использовать strace или ltrace для наблюдения за системными вызовами kitty в тестовой среде

Как проверить свою версию​


Проверка версии kitty в Debian:

Bash:
apt-cache policy kitty
dpkg-query -W -f='${Package} ${Version}\n' kitty

Если пакет называется иначе, замените kitty на фактическое имя пакета.

Для проверки релиза Debian:

Bash:
cat /etc/debian_version
cat /etc/os-release

Сравните версию kitty с диапазоном 0.47.3–0.48.2. Если версия выше 0.49.0, уязвимость не актуальна.

Проверка по релизу Debian Security Tracker: официальный трекер.

Исправление​


Основное исправление — обновление kitty до версии 0.49.0 или выше.

В Debian:

  • обновите пакет kitty из репозитория безопасности: apt update && apt upgrade kitty
  • если в репозитории ещё нет исправленной версии, установите kitty 0.49.0 из upstream или используйте snap/flatpak с актуальной версией
  • после обновления проверьте версию: dpkg-query -W -f='${Package} ${Version}\n' kitty

Если обновление невозможно:

  • ограничьте доступ к pty kitty, удалив лишние процессы, пишущие в терминал
  • отключите SSH-подключения kitty, если они не нужны: уберите опции ssh из конфигурации kitty
  • используйте kitty только с доверенными программами и без работы с неизвестными OSC-последовательностями
  • запускать kitty под отдельным пользователем с минимальными правами

Временные меры защиты​


Временные меры до обновления:

  • ограничьте доступ к pty kitty, удалив лишние процессы, пишущие в терминал
  • отключите SSH-подключения kitty, если они не нужны
  • используйте kitty только с доверенными программами и без работы с неизвестными OSC-последовательностями
  • запускать kitty под отдельным пользователем с минимальными правами
  • ограничьте сетевой доступ процесса kitty, если он не нужен для работы
  • отключите debug-режим kitty, если он включает запись в файлы или логи, доступные другим процессам

Как проверить устранение уязвимости​


После обновления:

  1. Проверьте версию kitty: dpkg-query -W -f='${Package} ${Version}\n' kitty
  2. Убедитесь, что версия не ниже 0.49.0
  3. Проверьте, что исправление установлено из репозитория безопасности: `apt-cache policy kitty | grep -A5 'Security'
  4. Перезапустите kitty и проверьте, что он работает корректно
  5. Проверьте логи kitty на отсутствие ошибок после обновления
  6. Если используете snap/flatpak, обновите через соответствующий менеджер: snap refresh kitty или flatpak update kitty

Если версия всё ещё ниже 0.49.0, повторите обновление или установите вручную из upstream.

Вывод​


CVE-2026-95832 — локальная уязвимость kitty, позволяющая выполнить произвольную команду в пользовательской оболочке через OSC-последовательность с неизвестным именем поля. Механизм основан на том, что kitty не нейтрализует текст перед записью в pty, а оболочка внутри kitty воспринимает его как пользовательский ввод.

В Debian статус по всем релизам open, urgency not yet assigned. Исправление доступно в kitty 0.49.0 и выше. До обновления рекомендуется ограничить доступ к pty kitty и отключить лишние каналы записи в терминал.

Официальные источники​


  1. NVD — CVE-2026-95832
  2. Debian Security Tracker — CVE-2026-95832
  3. https://www.cve.org/CVERecord?id=CVE-2026-54057

История обновлений статьи​


  • 26.09.2026 — Опубликована первая версия материала.
 
Назад
Верх Низ