Уязвимость в Untitled Goose Game может навредить системам игроков

image
Источник: knowyourmeme

Игра-мем Untitled Goose Game про гуся, который терроризирует округу в поисках колокольчика, может навредить компьютерам пользователей из-за уязвимости в обработке файлов сохранений.

Денис Анджакович в статье на Pulse Security раскрыл механизм уязвимости. Он пишет, что Untitled Goose Game (UGS) была уязвима из-за небезопасной десериализации в загрузчике сохраненных игр. Злоумышленник, способный управлять сохранением игры пользователя, мог использовать эту уязвимость для выполнения вредоносного кода при загрузке сохраненной игры.

UGS использует дотнетовский BinaryFormater для чтения и десериализации сохранений. Так как SerializationBinder не указан, злоумышленник, управляющий файлами с сохранениями, может использовать процесс десериализации и выполнить произвольный код. Для этого нужно записать вредоносный сериализованный объект в файл сохраненной игры, который впоследствии будет прочитан Untitled Goose Game.

Десериализация происходит в классе StandaloneSaveSystem, расположенном в Untitled_Data\Managed\Assembly-CSharp.dll. Анджакович продемонстрировал уязвимость в коде, добавив что для использования этой уязвимости потребовалась модифицированная версия гаджет десериализации TypeConfuseDelegate Джеймса Форшоу.

public SaveGameData LoadSlot(int slot)
	{
		string savePath = this.GetSavePath(slot);
		SaveGameData result;
		if (File.Exists(savePath))
		{
			Debug.Log("loading from " + savePath);
			using (FileStream fileStream = File.Open(savePath, FileMode.Open))
			{
				result = (SaveGameData)new BinaryFormatter().Deserialize(fileStream);
			}
			Debug.Log("sucessfully loaded savegame data from " + savePath);
		}
		else
		{
			Debug.Log("savefile doesn't exist. didn't load any data");
			result = new SaveGameData();
		}
		return result;
	}


В качестве примера Анджакович создал POC-файл с сохранением, который запускает калькулятор, после того, как игра его прочитала. Теоретически, злоумышленник мог воспользоваться уязвимостью UGS, чтобы установить на компьютер игрока шпионский или другой вредоносный софт.

Компания House House, создавшая UGS, выпустила патч 1.0.6, который делает сохранения более надежными. Всем игрокам настоятельно рекомендуют обновиться как минимум до этой версии игры (последняя на данный момент — 1.0.7) Примечательно, что на странице, посвященной обновлениям есть благодарность Анджаковичу. The Register.uk советует всем владельцам UGS не только обновить игру, но и не открывать сторонние файлы с сохранениями.

Случай с UGS — не единственный пример того, как файлы, связанные с играми, могут стать лазейкой для хакеров. Сайт Hackerone весной 2019 сообщал об уязвимости в Steam (в котором UGS еще не вышла), которая позволяла угонять аккаунты и подгружать на компьютеры пользователей вредоносное ПО.

В Steam и других продуктах Valve есть функция поиска игровых серверов. Этот поиск осуществляется при помощи специально сформированных UDP-запросов к этим серверам. Формат запросов хорошо описан в публичном руководстве для разработчиков Steam. Благодаря этому описанию пользователь vinnievan с Hackerone успешно реализовал собственный сервер на Python, который отвечает клиенту. После успешной реализации автор изменил несколько параметров и заметил, что клиент завис. Это произошло, когда Steam-клиент получил ответ от кастомного сервера. В этом ответе в параметре A2S_PLAYER содержалось слишком длинное имя игрока. При подключении отладчика vinnievan заметил сбой из-за переполнения буфера в стеке.

После дальнейшей проверки он выяснил, что переполнение произошло в библиотеке serverbrowser. В какой-то момент имя игрока преобразуется в Unicode, и происходит переполнение, потому что нет проверки на длину строки. Кроме того, отсутствовала canary-защита, что позволило перезаписать адрес возврата и выполнить произвольный код в Windows.

Злоумышленник мог выполнить произвольный код на компьютере любого пользователя Steam, который просматривал информацию об этом вредоносном сервере. Обычно злоумышленник инициировал backdoor-соединение с инфраструктурой C2, чтобы получить доступ к компьютеру жертвы. После этого злоумышленник мог угнать аккаунт, завладеть внутриигровыми предметами или установить вредоносное ПО на компьютер жертвы. Vinnievan предложил вероятный сценарий взлома: пользователь открывает сайт, где инициирует запрос к Steam через браузер — steam://connect/1.2.3.4. При этом вероятность успешного взлома vinnievan оценивал в 0,2%. Автор сообщил об уязвимости Valve и получил вознаграждение в 18 000 долларов. На данный момент баг исправлен.

Пропатченный UGS только готовится выйти в Steam, но он уже доступен пользователям PC и Mac через Epic Games, а также на Nintendo Switch. Utitled Goose стал очень популярен в первые же две недели продаж — за это время игру купили более 100 000 раз, а интернет заполонили мемы о деструктивной натуре гуся.

На Хабре также есть перевод интервью с одним из создателей Untitled Goose Game.

© Habrahabr.ru