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, если он включает запись в файлы или логи, доступные другим процессам
Как проверить устранение уязвимости
После обновления:
- Проверьте версию kitty:
dpkg-query -W -f='${Package} ${Version}\n' kitty
- Убедитесь, что версия не ниже 0.49.0
- Проверьте, что исправление установлено из репозитория безопасности: `apt-cache policy kitty | grep -A5 'Security'
- Перезапустите kitty и проверьте, что он работает корректно
- Проверьте логи kitty на отсутствие ошибок после обновления
- Если используете 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 и отключить лишние каналы записи в терминал.
Официальные источники
- NVD — CVE-2026-95832
- Debian Security Tracker — CVE-2026-95832
- https://www.cve.org/CVERecord?id=CVE-2026-54057
История обновлений статьи
- 26.09.2026 — Опубликована первая версия материала.
