Исследователи по безопасности Брайан Александер и Джордан Уайтхед обнаружили серию критических уязвимостей в сетевом коде культовой стратегии Command & Conquer: Generals (C&C:G). Эти недостатки позволяют злоумышленнику выполнять произвольный код на компьютерах других игроков и даже создать самораспространяющегося сетевого червя. Работа была представлена на конференции по информационной безопасности Districtcon в рамках мероприятия Junkyard, посвященного исследованию уязвимостей в продуктах с прекращенной поддержкой (EoL).
Детали уязвимости
Анализ начался после того, как Electronic Arts (EA) в начале 2025 года опубликовала исходный код игры. Исследователи сосредоточились на сетевом стеке, который использует архитектуру peer-to-peer (P2P). Каждый клиент открывает два UDP-порта: 8086 для лобби и 8088 для игровых данных. Пакеты имеют собственный формат с XOR-шифрованием и проверкой контрольной суммы (CRC32).
Первая и самая серьезная уязвимость - переполнение буфера в функциях "NetPacket::readFileMessage" и "NetPacket::readFileAnnounceMessage". Эти обработчики копируют имя файла из сетевого пакета в стековый буфер фиксированного размера ("_MAX_PATH") без проверки длины. В результате, отправив специально сформированный пакет, атакующий может перезаписать адрес возврата и получить контроль над потоком выполнения (EIP). Эксплуатация упрощается тем, что игра работает в 32-битном режиме, а многие библиотеки не используют рандомизацию адресного пространства (ASLR).
Используя технику возвратно-ориентированного программирования (ROP), исследователи создали полезную нагрузку (payload), которая выделяет область памяти с правами на выполнение, копирует туда шелл-код и запускает его. Примечательно, что благодаря фрагментации пакетов можно передавать крупные эксплойты. Статический XOR-ключ для "шифрования" трафика позволил легко создавать работающие пакеты для любой жертвы.
Вторая проблема в том же обработчике - произвольная запись файлов. Игра без ограничений принимает от других игроков файлы любого типа и сохраняет их на диск в указанное место. Отправив, например, вредоносную DLL-библиотеку с именем "dbghelp.dll" в корневую папку игры, можно добиться ее автоматической загрузки при следующем запуске, что обеспечивает устойчивость (persistence) заражения.
Третья уязвимость - выход за границы при записи (out-of-bounds write) в логике сборки фрагментированных пакетов ("NetCommandWrapperListNode::copyChunkData"). Функция копирует данные из пакета в выделенный буфер, используя контролируемые атакующим смещение и длину, без проверки границ целевого буфера. Это позволяет произвольно повреждать память процесса.
На основе этих уязвимостей был разработан демонстрационный сетевой червь. Его жизненный цикл включает несколько этапов. Сначала с помощью уязвимости произвольной записи файлов на диск жертвы копируется вредоносная DLL. Затем, используя переполнение буфера, выполняется полезная нагрузка, которая загружает эту библиотеку с помощью "LoadLibrary". После загрузки червь внедряет хуки в функции сокетного API (например, "recvfrom" из WSOCK32.dll) через таблицу импорта (IAT hooks). Это позволяет ему перехватывать и анализировать входящий сетевой трафик.
Для распространения червь отслеживает сетевые пакеты, оповещающие о присоединении новых игроков к матчу. Из этих пакетов извлекаются IP-адреса других участников. Затем червь автоматически отправляет на эти адреса эксплойт, используя обнаруженные уязвимости. Таким образом, один зараженный игрок может быстро инфицировать всех остальных в текущем и последующих матчах.
После заражения система попадает под полный контроль злоумышленника. Черви полезная нагрузка поддерживает выполнение произвольных системных команд. Кроме того, она может манипулировать внутренним игровым движком, например, принудительно продавать все здания локального игрока, хотя такие действия приводят к десинхронизации и отключению от матча.
Исследователи сообщили о проблемах EA в августе 2025 года. Компания подтвердила уязвимости, присвоив двум из них высокий уровень серьезности, однако сослалась на то, что игра является легаси-продуктом с прекращенной поддержкой, и официальные онлайн-сервисы для нее были закрыты годы назад. EA не стала выпускать официальные патчи или назначать идентификаторы CVE. В декабре 2025 года исследователи связались с сообществом фанатов, поддерживающих патч GeneralsGameCode. Разработчики сообщества оперативно внедрили исправления для всех обнаруженных уязвимостей, включая проверку длины имени файла, валидацию расширений и добавление граничных проверок при работе с фрагментированными пакетами. Это сотрудничество помогло защитить активное комьюнити игроков, сохраняющее жизнь классической стратегии.