- PVSM.RU - https://www.pvsm.ru -

Старые добрые игры, старые добрые уязвимости

Выходящему Вышедшему Cyberpunk 2077 посвящается.

Старые добрые игры, старые добрые уязвимости - 1

Приветствую всех читателей. Как можно догадаться из названия, эта статья — очередное описание уязвимостей в игровых лаунчерах, где я потыкал Steam (CVE-2019-14743 [1], CVE-2019-15316 [2], CVE-2019-17180 [3]) и Origin (CVE-2019-19247, CVE-2019-19248 [4]). Сегодня речь пойдет о лаунчере GOG Galaxy компании CD Project RED.

Я уже почти забыл об этом исследовании, но недавняя новость, что Cyberpunk 2077 доступен для предварительного скачивания в лаунчере и вот-вот будет доступен, напомнила мне, что я так публично и не рассказал о своем исследовании. Это немного странная история, потому что я даже не знаю, чем она кончилась – об этом будет ниже. Я просто расскажу, как все было.

Исследование

14 июля 2019. На волне исследования лаунчеров игровых компаний я решил поковырять GOG Galaxy [5] клиент для Windows. На момент исследования версия была 1.2.57.74. Уже тогда существовал GOG Galaxy 2, но был в бете, и доступ выдавался весьма ограничено.

Я обратил внимание, что лаунчер устанавливал два сервиса для своей работы: Galaxy client service и GalaxyCommunication. Сначала я не стал смотреть на первый, потому что второй сразу привлек мое внимание.

Сервис был расположен по пути C:ProgramDataGOG.comGalaxyredistsGalaxyCommunication.exe, работал от имени высокопривилегированного пользователя NT AUTHORITYSYSTEM и любой пользователь мог запускать и останавливать сервис.

Разрешения на папку стандартные для C:ProgramData:
Старые добрые игры, старые добрые уязвимости - 2

Таким образом были созданы прям все условия для атаки dll hijack. Права на папку не позволяют нам поменять содержимое GalaxyCommunication.exe, но позволяют подложить туда какую-нибудь библиотеку, например iphlpapi.dll. О том, как быстро написать библиотеку для такой атаки я писал ранее [6].

Я набросал PoC (proof of concept) и простую инструкцию: копируем библиотеку, перезапускаем сервис и вот так любой пользователь получил максимальные права. Подготовленные материалы я передал разработчикам.

8 октября 2019. Мы обменялись разными письмами, суть которых сводилась к тому, что уязвимость подтверждена, меня попросили не раскрывать 90 дней информацию об уязвимости и в ближайшую версию 1.2.60 войдет исправление.

Я проверил, что в бете клиента 1.2.60 сервис отключен и без прав администратора его не включить – уязвимость исправлена (в последствии этот сервис был вообще удален).

9 октября 2019. Я провел дополнительные исследования лаунчера и нашел еще две уязвимости. Одна была простой, другая сложной. Для простой я подготовил описание:

По пути C:ProgramDataGOG.comGalaxycommunication_config.json располагался файл с правами «Все – Полный доступ». Удаляем этот файл и на его месте создаем хардлинк, например, к файлу C:Program Files (x86)GOG GalaxyGalaxyClientService.exe (исполняемый файл основного сервиса GOG Galaxy, не того, который удалили). После перезапуска сервиса права «Все – Полный доступ» выставлялись по хардлинку, после чего можно было изменить содержимое исполняемого файла сервиса (это позволяют новоустановленные права) и опять любой пользователь получал права NT AUTHORITYSYSTEM.

Сложная уязвимость заключалась в том, что явно можно было с уровня пользователя отправить запрос, который бы делал то же, что и в случае выше, но сразу к нужному файлу, не используя хардлинки. Но подготовка PoC’а шла медленно, поэтому я ограничился чисто описанием.

10 октября 2019. Мне сказали, что эта проблема уже была зарепорчена другим исследователем и исправление готовится.

26 ноября 2019. Вышла версия 1.2.62 с исправлением уязвимости CVE-2019-15511 [7]. Как я и предполагал – существовало простое локально-сетевое API, которое позволяло с уровня пользователя запросить сервис на проведение изменений.

К сожалению, во-первых это не исправляло «легкую» уязвимость, а во-вторых это не исправляло и «сложную уязвимость» CVE-2019-15511. Разработчики просто добавили некоторое поле в запрос со специальным кодом, который проверялся.

Но раз легальное ПО может посчитать этот код от уровня пользователя, то и PoC сможет.

28 ноября 2019. Я предоставил PoC, который менял ACL у произвольного файла даже у «исправленной» версии.

И… фактические все. Реальное общение у нас на этом закончилось. Я несколько раз запрашивал CVE для 4 зарепорченных уязвимостей (ну фактически трех, к одной CVE уже был присвоен), а меня кормили завтраками и словами, что никак не получается запросить CVE у MITRE.
Сам я на тот момент уже не знал, что и где проверять – GOG Galaxy 2 публично вышел. Насколько я понимаю все описанные уязвимости были применимы и к нему, но я не знал версии продукта, а запрашивать CVE для по-сути не поддерживаемого ПО бессмысленно. Поэтому я и забил на эту ситуацию с мыслью, что как пройдет оговоренные 90 дней просто опубликую все, что есть. В итоге публикую сейчас, ибо за 90 дней просто забыл обо всем этом.

Заключение

Так или иначе я нашел и зарепортил 4 уязвимости в GOG Galaxy клиенте для Windows.

  1. Dll hijack в старой версии;
  2. Передача прав «Все – Полный доступ» по хардлинку;
  3. Передача прав «Все – Полный доступ» любому файлу (CVE-2019-15511);
  4. Обход для исправления CVE-2019-15511.

Скорее всего из этого списка исправлены только первая и третья уязвимости. А вторая и четвертая живы до сих пор. Но я не проверял, поэтому точно не знаю — прошло больше года, а не просто запрашиваемые 90 дней, поэтому моя совесть чиста. Те, кто использует GOG Galaxy, будьте аккуратны, скорее всего ваш компьютер может стать не вашим.

This article in english. [8]

Автор: Кравец Василий

Источник [9]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/uyazvimost/359633

Ссылки в тексте:

[1] CVE-2019-14743: https://habr.com/ru/company/pm/blog/462479/

[2] CVE-2019-15316: https://habr.com/ru/company/pm/blog/464367/

[3] CVE-2019-17180: https://habr.com/ru/company/pm/blog/469507/

[4] CVE-2019-19247, CVE-2019-19248: https://habr.com/ru/company/pm/blog/479704/

[5] GOG Galaxy: https://www.gog.com/galaxy

[6] писал ранее: https://habr.com/ru/company/pm/blog/449904/

[7] CVE-2019-15511: https://github.com/adenkiewicz/CVE-2019-15511

[8] This article in english.: https://amonitoring.ru/article/gog/

[9] Источник: https://habr.com/ru/post/532182/?utm_source=habrahabr&utm_medium=rss&utm_campaign=532182