OAuth-токены Twitch почти 31 тыс. пользователей Chrome и Firefox уходили через прокси-серверы расширения Twitch Enhanced Viewer | JeetBot. Для русскоязычной IT-аудитории это неприятно знакомая история: удобный обход ограничений и рекламы внезапно превращается в риск для аккаунта, приватных сообщений и настроек.
Проблему описал исследователь Socket Куш Пандья, сообщает The Hacker News. Расширение было опубликовано в Chrome Web Store 26 июня 2025 года под идентификатором pnhhdhhcadcjfckjhpmjneldiegbojfb и набрало около 30 тыс. пользователей. Версия для Firefox появилась 7 июля 2025 года с идентификатором twitchenhancedviewer@example.com; у нее было 604 пользователя. На момент публикации исходного материала оба аддона еще были доступны для установки.
JeetBot продавал расширение как инструмент для зрителей и стримеров: просмотр Twitch без рекламы, доступ к 1080p в регионах с ограничениями, больше контроля над воспроизведением. Внутри, по данным Socket, текущие сборки ветки v85.x перенаправляли запросы к видеоплейлистам Twitch через инфраструктуру оператора и добавляли токен пользователя в URL как параметр &auth=. Это плохое место для секрета: query string легко оказывается в логах прокси, систем мониторинга, балансировщиков и отладочных инструментах. То есть OAuth-токены Twitch фактически проходили через чужую инфраструктуру в открытом виде для каждого канала, который смотрел пользователь.
OAuth-токен в такой схеме — не «техническая мелочь», а bearer credential: кто держит токен, тот может действовать от имени аккаунта в пределах выданных прав. В источнике перечислены потенциальные зоны риска: чат, whispers, то есть приватные сообщения, и настройки аккаунта. Даже если оператор сервиса не использовал токены для несанкционированных действий, архитектура выглядела как приглашение к инциденту. Утечка логов, лишний доступ внутри команды, ошибка в хранилище — и удобная функция превращается в коллекцию живых сессий.
Отдельная странность — список исключений. Для десяти Twitch-каналов перенаправление токена не применялось. В списке были в основном русскоязычные стримеры: pch3lk1n с 580 тыс. подписчиков, fasoollka с 361 тыс., flamie со 132 тыс., forzorezor со 177 тыс., akyuliych с 1,1 млн, lagoda1337 с 225 тыс., lagoda с 77,3 тыс., а также dosia, fander и almazer с куда меньшими числами. Socket трактовал это как жестко заданный allowlist: для всех каналов вне списка пользовательский токен уходил на прокси.
Разработчик JeetBot Александр Попов объяснил исключения иначе. По его словам, это была часть обходного механизма для воспроизведения, который добавили после жалоб зрителей: при доступе к Twitch из-за пределов России или через VPN плеер показывал ошибку о прокси или unblocker. Для этих каналов использовался другой путь воспроизведения, не требовавший отправки токена. Начиная с версии 85.8.4 список можно было менять в настройках расширения, поэтому Попов настаивает: это не привилегия конкретных десяти каналов, а пользовательская настройка с дефолтными значениями.
Картина усложняется тем, что JeetBot — не безымянный аддон из подвала. На сайте сервис описывает себя как бота для Twitch, Kick и VK Live с озвучкой сообщений, автоматическим переводом и другими функциями для взаимодействия со зрителями. Заявлены более 26 тыс. активных стримеров и 1 млрд обработанных сообщений. В футере сайта оператором назван разработчик с Кипра Александр Попов, а в LinkedIn JeetBot указан как его pet project. Это важная деталь для бизнеса: риск появляется не только в очевидно подозрительных расширениях, но и в продуктах с понятной витриной, аудиторией и коммерческой логикой.
После публикации исследования команда JeetBot признала проблему с обработкой токенов. В документации появился алерт: Firefox-версия 85.8.7 больше не отправляет пользовательский OAuth-токен на прокси для получения плейлистов, а аналогичное обновление Chrome на тот момент ожидало проверки Chrome Web Store. Разработчики прямо предупредили: отключение или обновление расширения прекращает дальнейшую передачу токена, но не отзывает уже переданные токены. Значит, пользователям мало нажать «обновить»; разумный минимум — отозвать сессии и пересмотреть доступы, если Twitch дает такую возможность в настройках безопасности.
Попов назвал передачу токенов ошибкой реализации и проблемой раскрытия информации в описании и privacy policy. Он также сослался на другие Twitch playback-расширения, которые используют похожий подход для доступа к 1080p или 1440p у российских пользователей. Разница, по его словам, в том, что некоторые из них прямо пишут в описании Chrome Web Store о передаче OAuth-токена на сервер. Это слабое утешение: раскрытие в карточке магазина не делает отправку учетного секрета в URL хорошей инженерной практикой. Максимум — честнее предупреждает пользователя, что удобство оплачивается не только вниманием, но и доверием к чужой инфраструктуре.
Для разработчиков расширений урок довольно приземленный: токены нельзя таскать через URL, нельзя логировать «просто для дебага» и нельзя прятать критичные потоки данных за формулировками про качество и удобство. Для компаний — еще один аргумент включить браузерные расширения в модель угроз, особенно если сотрудники работают с медиа, комьюнити, стримингом или соцсетями от имени бренда. История с JeetBot вряд ли останется последней: чем больше региональных ограничений и антибот-защит вокруг платформ, тем больше появится «помощников», которые чинят воспроизведение ценой ваших сессионных ключей.