Приветствую всех читателей. Как можно догадаться из названия, эта статья — очередное описание уязвимостей в игровых лаунчерах, где я потыкал Steam (CVE-2019-14743, CVE-2019-15316, CVE-2019-17180) и Origin (CVE-2019-19247, CVE-2019-19248). Сегодня речь пойдет о лаунчере GOG Galaxy компании CD Project RED.
Я уже почти забыл об этом исследовании, но недавняя новость, что Cyberpunk 2077 доступен для предварительного скачивания в лаунчере и вот-вот будет доступен, напомнила мне, что я так публично и не рассказал о своем исследовании. Это немного странная история, потому что я даже не знаю, чем она кончилась – об этом будет ниже. Я просто расскажу, как все было.
Исследование
14 июля 2019. На волне исследования лаунчеров игровых компаний я решил поковырять GOG Galaxy клиент для Windows. На момент исследования версия была 1.2.57.74. Уже тогда существовал GOG Galaxy 2, но был в бете, и доступ выдавался весьма ограничено.
Я обратил внимание, что лаунчер устанавливал два сервиса для своей работы: Galaxy client service и GalaxyCommunication. Сначала я не стал смотреть на первый, потому что второй сразу привлек мое внимание.
Сервис был расположен по пути C:\ProgramData\GOG.com\Galaxy\redists\GalaxyCommunication.exe, работал от имени высокопривилегированного пользователя NT AUTHORITY\SYSTEM и любой пользователь мог запускать и останавливать сервис.
Разрешения на папку стандартные для C:\ProgramData:
Таким образом были созданы прям все условия для атаки dll hijack. Права на папку не позволяют нам поменять содержимое GalaxyCommunication.exe, но позволяют подложить туда какую-нибудь библиотеку, например iphlpapi.dll. О том, как быстро написать библиотеку для такой атаки я писал ранее.
Я набросал PoC (proof of concept) и простую инструкцию: копируем библиотеку, перезапускаем сервис и вот так любой пользователь получил максимальные права. Подготовленные материалы я передал разработчикам.
8 октября 2019. Мы обменялись разными письмами, суть которых сводилась к тому, что уязвимость подтверждена, меня попросили не раскрывать 90 дней информацию об уязвимости и в ближайшую версию 1.2.60 войдет исправление.
Я проверил, что в бете клиента 1.2.60 сервис отключен и без прав администратора его не включить – уязвимость исправлена (в последствии этот сервис был вообще удален).
9 октября 2019. Я провел дополнительные исследования лаунчера и нашел еще две уязвимости. Одна была простой, другая сложной. Для простой я подготовил описание:
По пути C:\ProgramData\GOG.com\Galaxy\communication_config.json располагался файл с правами «Все – Полный доступ». Удаляем этот файл и на его месте создаем хардлинк, например, к файлу C:\Program Files (x86)\GOG Galaxy\GalaxyClientService.exe (исполняемый файл основного сервиса GOG Galaxy, не того, который удалили). После перезапуска сервиса права «Все – Полный доступ» выставлялись по хардлинку, после чего можно было изменить содержимое исполняемого файла сервиса (это позволяют новоустановленные права) и опять любой пользователь получал права NT AUTHORITY\SYSTEM.
Сложная уязвимость заключалась в том, что явно можно было с уровня пользователя отправить запрос, который бы делал то же, что и в случае выше, но сразу к нужному файлу, не используя хардлинки. Но подготовка PoC’а шла медленно, поэтому я ограничился чисто описанием.
10 октября 2019. Мне сказали, что эта проблема уже была зарепорчена другим исследователем и исправление готовится.
26 ноября 2019. Вышла версия 1.2.62 с исправлением уязвимости CVE-2019-15511. Как я и предполагал – существовало простое локально-сетевое API, которое позволяло с уровня пользователя запросить сервис на проведение изменений.
К сожалению, во-первых это не исправляло «легкую» уязвимость, а во-вторых это не исправляло и «сложную уязвимость» CVE-2019-15511. Разработчики просто добавили некоторое поле в запрос со специальным кодом, который проверялся.
Но раз легальное ПО может посчитать этот код от уровня пользователя, то и PoC сможет.
28 ноября 2019. Я предоставил PoC, который менял ACL у произвольного файла даже у «исправленной» версии.
И… фактические все. Реальное общение у нас на этом закончилось. Я несколько раз запрашивал CVE для 4 зарепорченных уязвимостей (ну фактически трех, к одной CVE уже был присвоен), а меня кормили завтраками и словами, что никак не получается запросить CVE у MITRE.
Сам я на тот момент уже не знал, что и где проверять – GOG Galaxy 2 публично вышел. Насколько я понимаю все описанные уязвимости были применимы и к нему, но я не знал версии продукта, а запрашивать CVE для по-сути не поддерживаемого ПО бессмысленно. Поэтому я и забил на эту ситуацию с мыслью, что как пройдет оговоренные 90 дней просто опубликую все, что есть. В итоге публикую сейчас, ибо за 90 дней просто забыл обо всем этом.
Заключение
Так или иначе я нашел и зарепортил 4 уязвимости в GOG Galaxy клиенте для Windows.
- Dll hijack в старой версии;
- Передача прав «Все – Полный доступ» по хардлинку;
- Передача прав «Все – Полный доступ» любому файлу (CVE-2019-15511);
- Обход для исправления CVE-2019-15511.
Скорее всего из этого списка исправлены только первая и третья уязвимости. А вторая и четвертая живы до сих пор. Но я не проверял, поэтому точно не знаю — прошло больше года, а не просто запрашиваемые 90 дней, поэтому моя совесть чиста. Те, кто использует GOG Galaxy, будьте аккуратны, скорее всего ваш компьютер может стать не вашим.
This article in english.
v1000
Старый добрый кликбейт:) А я думал будет обсуждение реальных старых игр, с которыми лучше не лезть в мультиплеер. А это банальный киберпанк-пока ты хакаешь кого-то в игре-в реальности хакают тебя.