Представьте: вы читаете логи на скомпрометированном хосте через
less, и вдруг заголовок окна tmux меняется, часть вывода пропадает. Запускаете cat -v — а там россыпь ^[[ последовательностей, вшитых в user-agent строки. Кто-то заминировал логи ANSI escape-кодами. Звучит экзотично? На практике это рабочий вектор атаки, который эксплуатируется в дикой природе.🔎Суть проблемы проста: терминальный эмулятор не различает легитимную и враждебную управляющую последовательность. Всё, что попадает в stdout или stderr, исполняется слепо. Логи, вывод
git log, результат kubectl get events, сообщение от wall — любой текст может содержать инъекцию, которая скроет строки, подменит prompt или запишет payload в буфер обмена.Три реальных CVE показывают масштаб:
• CVE-2024-28085 — утилита
wall из util-linux фильтровала escape-коды на stdin, но пропускала в аргументах командной строки. Атакующий рисовал фейковый prompt sudo в терминале жертвы, жертва вводила пароль, а он утекал через command-not-found и /proc/*/cmdline. Уязвимость просуществовала 11 лет незамеченной — с 2013 по 2024. Столько про «тысячи глаз» open source.• CVE-2021-25743 — kubectl не нейтрализует escape-коды в сырых данных. Атакующий с правами на создание Events в кластере подменял вывод так, что администратор видел «чистый» результат вместо реального. Принимаешь решения по экрану — а экран врёт.
• CVE-2024-52005 (CVSS 7.5 HIGH) — Git при
clone, fetch или push выводит sideband-сообщения от удалённого сервера без фильтрации. Атакующий контролирует git-сервер и отправляет произвольные escape-последовательности прямо в терминал разработчика. Никаких подтверждений, никаких предупреждений. Просто git clone — и ваш терминал уже скомпрометирован.🎇Общий знаменатель всех трёх случаев: разработчики фильтровали escape-коды в одном канале ввода и забывали про другой. Классический CWE-150.
Что делать прямо сейчас? Прогоняйте любой текстовый вывод с чужих машин через
xxd или cat -v перед тем, как читать его в интерактивном пейджере. Привычка простая, а спасает от неприятных сюрпризов.А вы когда-нибудь сталкивались с подозрительным поведением терминала на чужом хосте?
Полный разбор техник — от подмены вывода до атак на LLM-инструменты разработчиков — читайте в статье на форуме.
https://codeby.net/threads/ataki-cherez-escape-posledovatel-nosti-terminala.95588/
