В популярной онлайн-игре MECCHA CHAMELEON обнаружили уязвимость, которая дает злоумышленнику возможность выполнить произвольный код на компьютере жертвы после перезагрузки системы. Проблема связана с пользовательскими картами, распространяемыми через Steam Workshop. Исследователи нашли способ использовать функцию записи звука для сохранения вредоносного файла в папку автозагрузки Windows. Разработчик уже выпустил исправление в версии 4.0.0.
Детали уязвимости
MECCHA CHAMELEON - многопользовательская игра в жанре пряток, где одни игроки прячутся, а другие ищут их. За первый месяц продажи превысили пятнадцать миллионов копий. Значительную часть привлекательности игры составляют карты, созданные самими игроками. Сообщество публикует их в Steam Workshop, и любой желающий может скачать чужую карту, чтобы играть на ней. Когда владелец лобби выбирает карту, всем участникам сессии предлагается загрузить её автоматически.
Особенность игры - карты содержат не только модели и текстуры, но и Blueprints, визуальную систему программирования, встроенную в Unreal Engine. С её помощью создатели карт могут задавать сценарии: что произойдёт, когда игрок нажмёт кнопку, войдёт в зону или просто загрузит уровень. Эти графические схемы выполняются внутри игрового процесса на компьютере каждого игрока. Именно поэтому пользовательские карты становятся интересной целью для атаки: хост лобби может побудить всех остальных скачать и запустить у себя его карту.
Исследователь, обнаруживший проблему, начал искать функции, доступные из Blueprint, которые могли бы взаимодействовать с операционной системой. Среди множества таких функций выделялась запись звукового выхода. Она предназначена для сохранения аудиозаписи в файл и по умолчанию использует определённую папку внутри профиля игрока. Однако оказалось, что в параметрах можно указать произвольный путь сохранения, не ограниченный каталогом игры. Это позволяло записывать файлы в любую папку на диске, если известен путь к ней.
Самый очевидный способ превратить такую возможность в выполнение кода - сохранить исполняемый файл в папку автозагрузки Windows. Все файлы из неё автоматически запускаются при старте операционной системы. Проблема была в том, что Unreal Engine безусловно добавлял к имени файла расширение .wav. Запись с указанным именем, например, "poc.exe", превращалась в "poc.exe.wav", и Windows не считала её исполняемой. Исследователь обошёл это ограничение с помощью особенности работы Windows с нулевыми символами в путях. Если в имени файла встречается нулевой символ, Windows воспринимает его как конец строки и игнорирует всё, что идёт дальше. Таким образом, при указании имени "poc.exe " с добавленным нулевым символом и произвольным текстом после него файл сохранялся именно как "poc.exe".
Но оставалась другая задача. Сами данные файла представляли собой аудиозапись в формате WAV, и просто изменить расширение было недостаточно, чтобы сделать её исполняемой. Нужно было превратить содержимое файла в код, который Windows запустит. Здесь исследователю помог формат HTML Application, или HTA. Это старый тип приложений Windows, который выглядит как веб-страница, но запускается вне браузерной песочницы. HTA-файл может содержать скрипт, способный создавать системные объекты и запускать другие программы. Ключевая особенность - заголовок HTA не обязан находиться в начале файла. Windows открывает такой файл, находит HTML-разметку внутри и игнорирует всё, что было до неё.
Несжатые аудиоданные в формате PCM позволили встроить HTML и скрипты прямо в звуковые сэмплы. PCM хранит значения амплитуды звука напрямую, без сжатия, то есть каждый отсчёт соответствует определённому числу. Подобрав нужные числа, исследователь собрал из сэмплов последовательность байтов, которая при записи в файл превращалась в HTML-код, а затем в исполняемый скрипт. В результате получался настоящий WAV-файл с незаметными для атаки звуковыми данными, которые одновременно содержали полезную нагрузку.
Атака выглядела так. Игрок загружал карту, созданную злоумышленником. При загрузке уровня срабатывал Blueprint-сценарий, привязанный к началу игры. Этот сценарий включал запись звука, проигрывал заранее подготовленный аудиофайл с встроенной полезной нагрузкой, а затем останавливал запись, указывая путь к папке автозагрузки и имя файла с расширением .hta. После этого на компьютере жертвы оставался файл, который при следующей перезагрузке системы автоматически открывался в HTA и запускал код злоумышленника.
Исследователь отмечает, что это уже не первая подобная находка в MECCHA CHAMELEON. Ранее была обнаружена уязвимость, которая также приводила к выполнению кода при загрузке карты. Её исправили, однако оставался вопрос, не существуют ли другие маршруты для атаки. Новая находка показала, что поверхность для атак остается широкой, пока карты имеют доступ к функциям игрового движка, работающим с файловой системой.
Разработчик получил описание уязвимости в середине августа 2026 года. Исправление вышло 20 августа в версии 4.0.0. В этой версии функция записи звука перестала создавать какие-либо файлы, даже предназначенные для обычного использования. По словам исследователей, обновление устанавливается автоматически перед запуском игры, поэтому игроки, у которых включено автоматическое обновление, уже защищены.
Авторы исследования проверили карты, опубликованные в Steam Workshop, на предмет использования этой уязвимости и не нашли следов реальных атак. Тем не менее они советуют игрокам проявлять осторожность при загрузке карт от незнакомых авторов и по возможности ограничиться официальными картами. Некоторые независимые специалисты сообщали о возможном существовании других уязвимостей, но эти сообщения не были подтверждены и проверены.
Проблема с MECCHA CHAMELEON показывает, что любые формы пользовательского контента, особенно с возможностью программирования логики, требуют тщательной проверки доступных функций. Даже если игра построена на зрелом движке, разработчики должны заранее ограничивать набор операций, которые могут выполнять карты, а игрокам стоит помнить, что загрузка чужого контента в сетевых играх не всегда безопасна.
Ссылки