Ваши здания проданы, а Windows взломана. Добро пожаловать в сетевой режим C&C образца 2025 года

Ваши здания проданы, а Windows взломана. Добро пожаловать в сетевой режим C&C образца 2025 года

В игре Command & Conquer: Generals обнаружили критические уязвимости, позволяющие захватить компьютер.

image

Специалисты по информационной безопасности Брайан Александер и Джордан Уайтхед обнаружили серьёзные уязвимости в культовой стратегии Command & Conquer: Generals, которая вышла ещё в 2003 году. Более того, они собрали демонстрационного червя, способного распространяться между игроками в сетевых матчах и заражать их компьютеры.

История началась в начале 2025 года, когда EA Games опубликовала исходный код игры. Исследователи решили представить находки на Junkyard - необычном мероприятии в рамках DistrictCon в Вашингтоне, где показывают уязвимости в устаревшем программном обеспечении. Command & Conquer: Generals хорошо подходила под критерии: популярная в прошлом игра, официальная поддержка которой давно прекращена.

Изначально исследователи планировали применить фаззинг для поиска проблем в сетевой части, но после просмотра кода поняли, что в этом нет необходимости. Игра использует одноранговую архитектуру, при которой каждый участник должен быть доступен по двум портам: 8086 для лобби и 8088 для игровых пакетов. При этом серьёзной аутентификации клиентов нет, а «шифрование» сводится к простому статическому XOR.

Первая критическая уязвимость нашлась в обработчиках сетевых команд. При получении «файлового» сообщения код копировал имя файла в буфер фиксированного размера без проверки длины, что приводило к переполнению стека. С учётом 32-битного режима и того, что часть библиотек не рандомизирует адресное пространство, эксплуатация оказывалась относительно простой. Исследователи собрали эксплойт, который работал в типичных конфигурациях игры благодаря статическим адресам у незащищённых модулей.

Вторая проблема связана с записью файлов на диск. Тот же обработчик позволял сохранять файлы с произвольными расширениями и по произвольным путям, включая выход за пределы каталога игры. Достаточно было записать DLL в корень игры под именем dbghelp.dll - при следующем запуске Generals пыталась загрузить dbghelp.dll из локального пути.

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

Получив надёжный механизм удалённого выполнения кода, исследователи решили пойти дальше и создали сетевого червя. Благодаря одноранговой архитектуре заражённый игрок мог автоматически распространять инфекцию на участников текущего матча. Для упрощения демонстрации червь отслеживал заражённых только в пределах одного матча, хотя авторы отмечают, что можно было бы реализовать «проверку заражения» через специальные пакеты и координировать распространение между разными играми.

Червь работал так: сначала он использовал уязвимость записи файлов, чтобы сохранить вредоносную библиотеку в корневую папку игры под именем dbghelp.dll. Затем через переполнение буфера он загружал эту библиотеку в уже запущенный процесс. После инициализации червь устанавливал перехватчики на функции приёма сетевых пакетов и начинал отслеживать специальные команды.

Управление поддерживало два режима: скрытые «магические» пакеты от удалённого отправителя и команды, замаскированные под сообщения чата. При присоединении новых игроков червь получал их IP-адреса из служебных сообщений и отправлял им заражающие пакеты.

После заражения открывались разные возможности. Червь мог выполнять произвольные системные команды на компьютере жертвы, а также воздействовать на игровой движок. В Generals есть внутренний скриптовый движок для действий ботов, и исследователи показали, что могут вызывать функции по известным адресам. Например, выводить текст на экран, воспроизводить звуки или двигать камеру. При этом серьёзные изменения игрового состояния приводили к рассинхронизации и отключению игрока.

В августе 2025 года исследователи связались с EA Games, но компания подтвердила, что игра является устаревшей и не поддерживается. Официальные онлайн-сервисы для Generals закрыли много лет назад, а мультиплеер сегодня держится на инфраструктуре сообщества. EA также отказалась выдавать CVE для этих уязвимостей, сославшись на политику по legacy-продуктам.

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

Исходный код червя и эксплойтов исследователи выложили в публичный репозиторий на GitHub.