В предыдущей серии


Не так давно я опубликовал описание уязвимости для Steam. Я получил много отзывов от читателей. Valve не проронили ни слова, а HackerOne прислал огромное слезливое письмо и, в основном, молчал. В итоге меня забанили Valve на H1 — я не могу участвовать в их программе по отклонению уязвимостей (остальной H1 мне доступен).



Более подробно историю вы можете узнать в предыдущей публикации, здесь же я скажу пару слов об актуальном состоянии.

А оно простое и грустное — Valve все так же терпят фиаско. Последнее обновление, которое было призвано устранить проблему, легко обходится и уязвимость все еще актуальна. Да, я это проверил — прекрасно работает.

Но эта статья не о том, что старая уязвимость все еще присутствует, а о новой. Поскольку Valve еще раз изъявили желание прочитать публичный отчет, вместо частного, не будем лишать их этого удовольствия.

Краткое описание уязвимости


Общее описание эксплуатации уязвимости довольно несложно и состоит из трех шагов:

  1. Подготавливаем окружение для эксплуатации (целых два способа на выбор, используя разные недочеты безопасности).
  2. Заставляем Стим скопировать и запустить нашу dll.
  3. Dll должна соответствовать небольшим требованиям.

Все эти действия может выполнить любой пользователь ОС, а еще точнее — любая программа на компьютере. В результате можно выполнить любой код с максимальными привилегиями, такой класс уязвимостей называется escalation of privileges (eop) или local privilege escalation (lpe). Несмотря на то, что любое приложение может само по себе нанести какой-то вред, получение максимальных прав приведет к гораздо более существенным последствиям. Выключение антивируса и файрвола, установка руткита, скрытие процесса-майнера, кража личных данных всех пользователей ПК — это только малая часть того, что можно придумать.

Теоретический минимум


Было очень забавно наблюдать комментарии к предыдущей статье, где люди писали «В HKLM ключи реестра пользователь писать не может» или «Чтобы создать симлинк нужны права администратора». Интересно, что проверка этих утверждений займёт едва ли дольше, чем написание такого комментария. И, да, на всякий случай: оба утверждения ложны. Поэтому в этой статье я решил сделать небольшой раздел, где описал ряд сложных моментов из эксплуатации.

«В раздел реестра HKLM нельзя писать пользователю»


Нет такого общего правила. Есть конкретные правила безопасности, для конкретных ключей реестра. Valve выставила права полного доступа для всех пользователей на ветку HKLM\SOFTWARE\Wow6432Node\Valve\steam, и поэтому в данной ветке любой пользователь может делать, что хочет.

«Нельзя запустить или остановить сервис без прав администратора»


Нет такого общего правила. Есть конкретные правила безопасности для конкретных сервисов. Valve выставила права так, что сервис Steam Client Service может быть запущен и остановлен любым пользователем.

«Для создания симлинка нужны права администратора»


Это сам по себе забавный вопрос, учитывая, что из 5 основных видов линков в Windows только полтора требуют эти права. Итак, встречайте: file symbolic link, object directory symbolic link, hard link, NTFS reparse point и reg_link. Права администратора нужны только для создания file symbolic link и для постоянного object directory symbolic link (временный живет ровно столько, сколько живет сессия, в которой он создан, в общем смысле до перезагрузки, и специальных прав не требует).

Симлинк с папки на папку


Это называется NTFS reparse point или NTFS mount point. Название особо не важно, суть в том, что эта штука позволяет использовать одну папку как указатель на другую. Может создаваться обычным пользователем из пустой папки, если у него есть права Write для нее. Для создания будем пользоваться утилитой CreateMountPoint.exe из набора утилит для тестирования работы с линками.

Уступающая блокировка


Уступающая блокировка (OpLock или Opportunistic Lock) — это специальный механизм, при котором одно приложение может временно заблокировать доступ всем к некоторому файловому ресурсу. Тут много всяких деталей можно написать, особенностей работы с папками и разными доступами. Суть вкратце: программа может «поймать» событие обращения к некоторому файлу и задержать его на время. Устанавливать оплоки можно утилитой SetOpLock.exe из того же набора тестирования работы с линками. Запуск утилиты устанавливает требуемый оплок; когда происходит доступ, то утилита пишет сообщение; нажатие enter снимает оплок.

BaitAndSwitch


Это название приема, который комбинирует создание линков и установку оплоков, чтобы выиграть TOCTOU (time of check\time of use). Суть проще объяснить на примере.

Представьте, что есть некоторая программа, которая подряд делает что-то типа такого:

ReadContentFromFile(“C:\test\myfile.txt”);
ReadContentFromFile(“C:\test\myfile.txt”);

Это просто чтение одного и того же файла два раза подряд. Всегда ли будет прочитано одно и то же? Нет, не обязательно.

Сначала создадим две папки с файлами C:\test1\myfile.txt и C:\test2\myfile.txt. А папку C:\test вообще очистим и создадим reparse point на C:\test1. Поставим оплок на файл из первой директории и запускаем программу. Как только она откроет файл, сработает оплок. Мы поменяем reparse point и C:\test будет указывать на C:\test2. Теперь, после того, как оплок будет снят, программа прочитает файл во второй раз уже из другого файла.

Зачем это нужно? Очень просто — довольно типичная ситуация, где файл сначала проверяют (первое чтение), а потом уже запускают (второе чтение). Вот так мы на проверку отправим один файл, а на исполнение — другой.

Теперь все готово к эксплуатации.

Эксплуатация 1. Подготовка окружения


Надо немного подготовить рабочее окружение. Начнем с того, что необходимо взять исполняемые файлы CreateMountPoint.exe и SetOpLock.exe.

Теперь надо провести небольшие изменения в файловой структуре Стима. Наша задача — получить папку с двумя файлами Steam.exe и steamclient.dll и обязательным отсутствием папки bin. Это можно сделать двумя способами.

Способ 1


Переименовать\удалить папку bin из основной папки Steam. Все, вы великолепны (Стим при установке дает любому пользователю права на все в его папке).

Способ 2


В ключе реестра HKLM\SOFTWARE\Wow6432Node\Valve\steam изменить параметр InstallPath на какую-нибудь нашу папку. В эту папку закинуть Steam.exe и steamclient.dll из основной папки Стима.

Пусть любым из способов мы подготовили папку C:\Steam (путь может быть любой, но в примерах я буду использовать этот). Теперь создадим в ней еще папки b1, b2, b3 и b4. В первые три закинем файл steamservice.dll (из комплекта Стима, в оригинале он лежал в папке bin), а в папку b4 закинем специально сформированную библиотеку с тем же именем — steamservice.dll. Подробно о подготовке библиотеки будет в 3 пункте.

Открываем два окошка консоли. На этом подготовка окружения завершена.

Эксплуатация 2. Подменяем файл


Я думаю, что из приготовлений уже стало понятно, что будет что-то типа описанного выше BaitAndSwitch.

Скриншот из ProcMon:



Это часть лога типичного старта сервиса Steam Client Service. Обратите внимание на часть, где dll сначала копируется в C:\Program Files (x86)\Common Files\Steam, а затем загружается. Мы сделаем так, чтобы скопировалась наша библиотека из C:\Steam\b4. К сожалению, сначала идут проверки, в том числе проверяется подпись библиотеки, чтобы ее нельзя было подменить (о, ирония).

Итак, распишу по шагам. Шаги объединены в группы из однотипных действий. Для каждого шага будет указано, где что запускать и что происходит (разные окошки консоли я назвал cmd1 и cmd2).

  1. Создаем папку C:\Steam\bin и в cmd1 выполняем:
    CreateMountPoint.exe С:\Steam\bin C:\Steam\b1
  2. В cmd1 ставим оплок:
    SetOpLock.exe C:\Steam\b1\steamservice.dll
  3. Запускаем сервис Steam Client Service, видим в cmd1, что поймали обращение к файлу.

    ***
  4. Удаляем C:\Steam\bin, создаем на его месте папку C:\Steam\bin и в cmd2 выполняем:
    CreateMountPoint.exe С:\Steam\bin C:\Steam\b2
  5. В cmd2 ставим оплок:
    SetOpLock.exe C:\Steam\b2\steamservice.dll
  6. В cmd1 отпускаем оплок, видим, что в cmd2 поймали обращение к файлу.

    ***
  7. Удаляем C:\Steam\bin, создаем на его месте папку C:\Steam\bin и cmd1 выполняем:
    CreateMountPoint.exe С:\Steam\bin C:\Steam\b3
  8. В cmd1 ставим оплок:
    SetOpLock.exe C:\Steam\b3\steamservice.dll
  9. В cmd2 отпускаем оплок, видим, что в cmd1 поймали обращение к файлу.

    ***
  10. Удаляем C:\Steam\bin, создаем на его месте папку C:\Steam\bin и cmd2 выполняем:
    CreateMountPoint.exe С:\Steam\bin C:\Steam\b2
  11. В cmd2 ставим оплок:
    SetOpLock.exe C:\Steam\b2\steamservice.dll
  12. В cmd1 отпускаем оплок, видим, что в cmd2 поймали обращение к файлу.

    ***
  13. Удаляем C:\Steam\bin, создаем на его месте папку C:\Steam\bin и cmd1 выполняем:
    CreateMountPoint.exe С:\Steam\bin C:\Steam\b3
  14. В cmd1 ставим оплок:
    SetOpLock.exe C:\Steam\b3\steamservice.dll
  15. В cmd2 отпускаем оплок, видим, что в cmd1 поймали обращение к файлу.

    ***
  16. Удаляем C:\Steam\bin, создаем на его месте папку C:\Steam\bin и cmd2 выполняем:
    CreateMountPoint.exe С:\Steam\bin C:\Steam\b4
  17. В cmd1 отпускаем оплок

Хоть и выглядит сложно, на самом деле идея простая: из 6 обращений к файлу C:\Steam\bin\steamservice.dll первые 5 раз были отданы файлы-оригиналы из разных папок (в порядке обращения: b1, b2, b3, b2, b3), а в шестой раз для копирования был отдан файл с полезной нагрузкой.

Схематично я изобразил это так:


Слева — нормальное поведение, справа — поведение с эксплоитом.

Эксплуатация 3. Внедряемая библиотека


Для полезной нагрузки я сначала воспользовался самой типовой своей dll, которая в DllEntry создает интерактивную консоль. Поскольку код из dll будет выполнен в контексте Steam Client Service, он будет выполнен с теми же правами, что и сам сервис – NT AUTHORITY\SYSTEM. Но в результате эксплуатации консоль не появилась.

После загрузки сервис Стима все же понимает, что ему подсунули липу, и завершает работу, поэтому полезная нагрузка из моей dll не успела выполниться.

Пришлось немного пореверсить, и оказалось, что сервис после загрузки dll проверяет существование функций

int WINAPI SteamService_RunMainLoop()
void WINAPI SteamService_Stop()

в библиотеке. Более того, сервис вызывает первую функцию, где я и решил поместить полезную нагрузку (запуск интерактивной консоли с правами сервиса – NT AUTHORITY\SYSTEM). Вот теперь совсем все — повторяем все действия и получаем консоль с максимальными правами.

Заключение


Можно все это завернуть в exe-файл, но, честно говоря, мне не очень хочется заморачиваться. Я думаю, что видео с демонстрацией будет достаточно (вариант с реестром, вариант с файловой системой).
Я не буду копировать сюда раздел «Спекуляции» из прошлой статьи. Просто факты: старая уязвимость актуальная, о новой вы только что прочитали, Valve все так же не хотят слышать о проблемах.

Update (22.08.2019)


На данный момент есть две новости:

  1. Клиент беты получил обновление с исправлениями. Смотреть буду когда обновление дойдет до основного клиента.
  2. Valve поменяло политику в отношении LPE. И это отличная новость!


This article in english.

Комментарии (90)


  1. Am0ralist
    20.08.2019 22:07
    +4

    А они молодцы и последовательно превращают ситуацию в абсурд…


  1. member0
    20.08.2019 22:31

    Вот буквально спрашивал в комментах к прошлой статье — забанили ли?

    В итоге меня забанили Valve на H1 — я не могу участвовать в их программе по отклонению уязвимостей (остальной H1 мне доступен).

    Получил ответ =) Класс, что сказать, отличный подход. В следующий раз продайте на черном рынке найденный у них баг, желательно подешевле, чтобы как можно больше блекхетов заюзали баг и поюзали их. Раз по-человечески не реагируют.


    1. xi-tauw Автор
      20.08.2019 22:31
      +1

      Я не согласен с походом Valve, но и использвания блекхатами тоже не одобряю. Я надеюсь, что они просто одумаются и нормально пофиксят.


  1. GCU
    20.08.2019 22:54

    А не проще подложить какую-нибудь неявно используемую библиотеку, например xinput?


    1. xi-tauw Автор
      20.08.2019 22:56
      +1

      Проще, но сервис копирует именно steamservice.dll, а не что-то еще и на имя нельзя повлиять.


  1. Zoolander
    21.08.2019 08:35
    +1

    уязвимость может работать без физического доступа взломщика к компьютеру и системному реестру?


    1. borisdenis
      21.08.2019 08:37
      +1

      Без проблем может, к примеру я создаю якобы суперпупер полезную программу которой не требуются права админа и при попытке её запуска она рестартует сервис стима и выполняет нужный ей код с правами системы…


  1. LoadRunner
    21.08.2019 09:06

    Я может невнимательно читал, но зачем переделывать симлинки и пихать настоящую библиотеку в разные папки, если можно просто поймать шестой оплок? Или нельзя?


    1. mayorovp
      21.08.2019 09:13

      Чтобы Steam проснулся — нужно снять оплок. Но в таком случае можно уже не успеть поставить следующий. Значит, надо ставить второй оплок перед снятием первого. А для этого нужны два разных файла, иначе (тут я уже гадаю) либо второй оплок не встанет, либо Steam не проснётся.


      1. xi-tauw Автор
        21.08.2019 09:43

        Примерно так и есть. Надо успеть пропустить пять обращений перед шестым. Чтобы сделать это гарантированно — мы ловим все шесть по-очереди через оплоки.


  1. mayorovp
    21.08.2019 09:07

    После загрузки сервис Стима все же понимает, что ему подсунули липу, и завершает работу, поэтому полезная нагрузка из моей dll не успела выполниться.

    Пришлось немного пореверсить, и оказалось, что сервис после загрузки dll проверяет существование функций

    Больше похоже, что сервис просто получает из библиотеки эти две функции и выполняет их. То есть цели "проверить что не подсунули липу" не было, просто без этих функций работать нечему.


    1. xi-tauw Автор
      21.08.2019 09:46
      +1

      В общем, да. Просто он завершается сразу по обнаружению отсутствия функций, поэтому это идёт как одна из проверок dll.


  1. qyix7z
    21.08.2019 09:29

    Пока Valve делает покерфейс, что я могу сделать для защиты компов детей от этой уязвимости?
    Используются ограниченные учетки на виндовс 7 и 8.


    1. mayorovp
      21.08.2019 09:41
      +1

      Удалить Steam, больше ничего в такой ситуации не сделать.


      Ну или смириться с тем, что учётки детей на самом деле не ограниченные, а немножко системные...


      1. qyix7z
        21.08.2019 13:46
        +1

        Удалить Steam
        Я не хочу массовых домашних волнений и несанкционированных митингов.


        1. slonopotamus
          23.08.2019 09:11
          +1

          Тогда просто внесите стим в реестр запрещенных к запуску у вас на компьютере программ :)


          1. sumanai
            23.08.2019 12:49

            Так проблема в его службе, а не самой программе.
            А вот пиратство поможет ))


    1. da411d
      21.08.2019 10:59

      Можно попробовать настроить те самые права доступа к папке bin вроде. Убрать права на запись у не-админов. И в реестре то самое.


      Следует отметить, что именно "убрать права", а не "запретить", потому что Админ наследуется от простого юзера, а у запрета приоритет выше.


      1. mayorovp
        21.08.2019 11:03

        А Steam не восстановит ли права обратно?


        1. qyix7z
          21.08.2019 14:06

          Восстановит однозначно. Вопрос когда. Если при запуске той же dll с привилегиями, то смысла нет. А если при своем обновлении, когда я ему даю права через UAC, то норм. Обновился и потом снова поправить права.


          1. navion
            21.08.2019 16:42

            При запуске Стима предложит восстановить права на папку, вроде даже с последующим запросом UAC.


            1. qyix7z
              21.08.2019 17:51

              И если отказаться, то не запускается?


              1. navion
                21.08.2019 21:39

                Можно нажать Ignore и сам клиент продолжит работать.


      1. qyix7z
        21.08.2019 13:44

        Убрать — это свойства папки — безопасность — дополнительно — далее удаляем строчку с соответствующим пользователем (группой)?


        1. da411d
          21.08.2019 13:54

          Да. Но именно убрать галочку с «разрешить», а не поставить на «запретить».


          1. qyix7z
            21.08.2019 14:01

            Поясните, плз, разницу. Выше Вы написали, что у запрета приоритет выше, тогда почему не воспользоваться?


            1. mayorovp
              21.08.2019 14:05

              Потому что запрет получится всем пользователям, включая администраторов.


            1. da411d
              21.08.2019 14:13

              Админ наследуется от Юзера. То есть если запретить что-то Юзеру, ты запрещаешь и Админу. И даже если отдельно разрешить это админу — не сработает, потому что у запрета приоритет выше.

              Вот так я реализовал READONLY для не-администраторов
              image


              1. qyix7z
                21.08.2019 18:00

                Спасибо, понял. Жаль ничего не могу, кроме спасибо :)

                Еще конечно остается вопрос, почему админ наследует права от юзера, но я готов принять на веру сумрачный гений от мелкомягких.


                1. mayorovp
                  21.08.2019 19:23

                  почему админ наследует права от юзера

                  Потому что он является пользователем компьютера же.


                1. GDragon
                  21.08.2019 21:45
                  +1

                  Подразумевается что администратор это пользователь имеющий большие права.
                  А не что пользователь это урезанный администратор.


    1. Jogger
      21.08.2019 12:48

      Запретить запуск приложений из не доверенных папок + запретить запись в доверенные папки учёткам детей. Если код не сможет запустится — он не сможет поднять привилегии (а если сможет — то у вас и без поднятия привилегий будет достаточно проблем).


      1. qyix7z
        21.08.2019 13:57

        Я этого осознанно не делаю. Ну зашифруется все, до чего сможет дотянуться с этими правами. Это комп дитятки и папка на НАСе. Ну и что? Ребенок потеряет сейвы игр (подозреваю, что не все) и какую-то еще несданную домашку. Зато будет урок.


  1. xi-tauw Автор
    21.08.2019 09:49
    +1

    Прощу прощения у комментатора, чей комментарий я случайно отклонил. У него был вопрос зачем столько файлов в жонглировании.
    b4 — папка с нагрузкой, без этого файла нельзя
    b2 и b3 — нужны для тасовки между оплоками.
    b1 — нужен поскольку Steam первый раз открывает файл эксклюзивно и на этот файл больше нельзя поставить оплок, а, значит, он не будет участвовать в жонглировании.


    1. lehkap
      21.08.2019 16:19

      Спасибо за разъяснение


  1. Jogger
    21.08.2019 10:36
    -1

    Боже, да кому какое дело до поднятия привилегий на десктопной машине? Если злоумышленник может запустить произвольный код на моей машине — я уже в жопе, не важно с привилегиями или нет. Это примерно из той же области что висячий замок на холодильнике, чтобы злоумышленник не смог похитить мои помидоры. Valve порой творит полную херню, но в данном случае я целиком на их стороне — плевать на такую уязвимость.


    1. mayorovp
      21.08.2019 10:42

      Вы, наверное, сидите под админом с выключенным UAC? Тогда для вас это и правда ни разу не уязвимость.


      Но ведь не все так поступают. А Steam, выходит, одним своим существованием перечеркивает последние 13 лет улучшения безопасности windows.


      1. Jogger
        21.08.2019 11:37
        +1

        Даже если сидеть не под админом и со включенным UAC — запуск произвольного кода может натворить достаточно неприятностей, потому что ко всем пользовательским данным есть доступ без повышения привилегий. Или вы искренне считаете что на компьютере без стима можно запускать что угодно и вы будете в полной безопасности? Тогда вас может однажды ждать большой (но не очень приятный) сюрприз… Надеюсь вы хотя бы бэкапы делаете.


        1. mayorovp
          21.08.2019 12:03
          +1

          А зачем вообще в таком случае UAC придумали, по-вашему?


          1. Jogger
            21.08.2019 13:49

            На десктопе — только как защита от не-злонамеренного дурака, чтобы пользователь или криво написанный софт случайно не поломал всю систему.
            На сервере — ещё и для защиты от несанкционированного доступа пользователей к системе и данным других пользователей. В принципе, то же верно для общественного компьютера.
            В первом случае поднятие привилегий неважно — хотя бы потому, что пользователь может сам нажать подтверждение на поднятие привилегий, и никто ему не помешает сделать эту глупость.
            Во втором случае — это действительно серьёзная уязвимость. Но благо на серверах стим не запускают. Хотя вот пока всё это писал, понял, что эта уязвимость таки будет существенной в одном случае — для авторизованных компьютерных клубов, предоставляющих доступ к играм стим на повременной основе за деньги. С другой стороны, если в этих клубах не настроен запрет запуска посторонних запускаемых файлов — они сами себе злобные буратины. Да и не знаю если честно, есть ли ещё такие клубы…


            1. mayorovp
              21.08.2019 14:15

              С другой стороны, если в этих клубах не настроен запрет запуска посторонних запускаемых файлов — они сами себе злобные буратины.

              А такой запрет и не получится сделать: папка стима же полна автоматически обновляющихся исполнимых файлов, как там отловить посторонние?


              1. Jogger
                21.08.2019 15:58

                И что? То, что стим может туда писать — не значит что и пользователь должен иметь такую возможность.


                1. mayorovp
                  21.08.2019 19:24

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


                  1. Jogger
                    21.08.2019 19:53
                    -2

                    Права писать туда можно поменять. И если это не домашний ПК, а ПК в клубе — НУЖНО поменять. И эксплоит работает не на этом эффекте. В описанном эксплоите предполагается что злоумышленник может запустить произвольный код на ПК, и с помощью обмана сервиса Steam поднять себе привелегии до суперпользователя. Но сама по себе эта уязвимость НЕ ДАЁТ никаких дополнительных возможностей по запуску произвольного кода. Смогли запустить код = стали админом. Не смогли запустить код = пошли плакать в уголке. Так вот, речь о том, что в клубе, вообще говоря, должны быть приняты меры, чтобы пользователь НЕ МОГ запустить произвольный код. Да, этот эксплоит действительно может попортить жизнь владельцам клубов, потому что они могли закономерно не принимать таких мер, рассчитывая на то, что UAC защитит их проблем, а никаких персональных данных на их ПК нет, и можно позволить пользователям запускать любой код. Если в добавок к этому перезагружать ПК перед каждым новым пользователем — проблем не будет. С этим эксплоитом — да, владельцы клубов с такой политикой могут получить определённые проблемы. Но, в общем-то, только они.


          1. zorn_v
            21.08.2019 18:35

            По вашему UAC нельзя обойти?
            github.com/hfiref0x/UACME


            1. mayorovp
              21.08.2019 19:22

              Все эти способы уже исправлены.


              1. xi-tauw Автор
                21.08.2019 21:14

                Мой там под номером 32 и он не исправлен. Как и пачка других.


                1. mayorovp
                  21.08.2019 21:19

                  И правда… Но я все равно не считаю это поводом увеличивать число способов обхода.


                  1. xi-tauw Автор
                    21.08.2019 21:41

                    Согласен.


    1. navion
      21.08.2019 12:32

      AppLocker/SRP тоже перестаёт работать благодаря Steam, а эксплоит в браузере сразу знает куда писать нагрузку.


  1. iit
    21.08.2019 10:41

    Хммм, а в steam on linux данная уязвимость присутствует?


    1. boingo-00
      21.08.2019 10:56

      Что-то не могу сообразить, от какого юзера под виндой запускается стимсервис
      Сейчас посмотрел — бинарника с названием steamservice я вообще не вижу
      Для проверки даже запустил игру и посмотрел дерево
      Первый скрин с фильтром по имени, второй — без


      Немного скринов



      1. mayorovp
        21.08.2019 11:05

        При чём тут вообще игра? Steam Client Service — это на винде служба, значит на линуксе это должен быть демон.


        1. boingo-00
          21.08.2019 11:07

          Разве демон не будет висеть в процессах?


          1. mayorovp
            21.08.2019 11:11

            Не обязательно. Он же может по запросу стартовать. Например, при установке или обновлении игры.


            1. boingo-00
              21.08.2019 11:22

              Попробовал установить игру, ничего похожего не появилось. Хотя может я что-то неправильно делаю, но ни во время загрузки, ни сразу после нее, ни при первом запуске ничего не появилось


        1. ExplosiveZ
          21.08.2019 16:48
          +1

          > значит на линуксе это должен быть демон.
          В линукс версии нет никаких демонов или сервисов. Клиент на 100% работает от имени пользователя. Все файлы клиента хранятся в папке пользователя.


    1. vyo
      21.08.2019 13:18

      В линуксе стим по-моему работает чисто в userspace и рута никогда не дёргает.


  1. VivAmigo
    21.08.2019 10:50

    «Пока гром не грянет мужик не перекрестится». Ой чувствую проучат steam за такое отношение к созданию проблем. Мы уже тут две уязвимости имеем, а они говорят что их нет.

    Повышение прав вредоносного ПО через определенную уязвимость есть вторая стадия его жизни. Даже при условии что проникновение в систему не возможно в принципе, нельзя оставлять возможность неконтролируемого повышения прав.
    Это нас так в колледже учили. У них походу этому вообще не учат. «Ребят, к нам голодный тигр бежит! Может пристрелим его, пока он нас не сожрал? ЧТО?! ВАМ ЛЕНЬ РУЖЬЕ ЗАРЯДИТЬ?!»
    Они видать ещё не попадали под такую ситуацию, при которой из-за их уязвимости производились крупные преступления. Но как говорится — всё бывает в первый раз.


  1. Allozorro
    21.08.2019 11:32

    Я поражён таким отношением Valve как к критическим уязвимостям, так и к пользователям, их нашедшим. На вашем месте я бы продублировал бы английский вариант этой статьи на Reddit. В последнее время компании чаще начинают чесаться только после ажиотажа на подобных ресурсах, а не на профильных.


    1. xi-tauw Автор
      21.08.2019 11:32

      Насколько я вижу, там ссылки уже есть.


      1. Nicks_TechSupport
        22.08.2019 03:04

        +1 к статье на Реддите.


  1. vyo
    21.08.2019 13:22

    Когда Valve решила дропнуть поддержку Ubuntu вместо того, чтобы наконец сделать 64-битный стим, я сильно озадачился. Но после этой новости я просто охренел.


    1. borisdenis
      21.08.2019 14:00

      не поверите но стиму 64 битным стать не сложно, но при этом превратятся в «тыкву» все 32 битные игры. А пользователи купившие эти игры после такого в восторг не придут.


      1. vyo
        21.08.2019 14:09

        1. Кто мешает сделать клиент 64бит, но написать 32бит либы для совместимости? Не слишком просто, но в теории вполне решаемо.
        2. Нет стима — 100% игр из него "тыквы". Так лучше? Что делать тем, кому хватит и 64бит игр?


        1. borisdenis
          21.08.2019 14:32

          потому что в самой системе должна быть собрана glibc с поддержкой 32 бит, а это уже без поддержки системой ничем не заменить. Поэтому если вдруг убунта выкинет поддержку 32 битного софта полностью то и стим обломится, а вместе с ним и 32 битные игры…


          1. mayorovp
            21.08.2019 14:50

            Нет стима — 100% игр из него "тыквы". Так лучше? Что делать тем, кому хватит и 64бит игр?


          1. vyo
            21.08.2019 14:59

            Убунта собиралась, но одумалась: https://ubuntu.com/blog/statement-on-32-bit-i386-packages-for-ubuntu-19-10-and-20-04-lts. Как я понял, часть либ оставят, но остальные и приложения выкинут + доступны полноценные окружения в Snap'ах.
            Кстати, а много ли 32бит игр под линукс в стиме и почему? Он (linux) вроде всегда целился на 64бит в основном.


            P.S.: в своё время мучался с постоянными крашами одной 32bit игры. Перепробовал всё, даже поставил (на соседний диск) SteamOS. В результате так ничего и не добился, пришлось забить. Это к тому, что 32бит игры и так не сахар нынче в линуксе.


  1. Mairon
    21.08.2019 15:06

    На мой взгляд — тепличный путь эксплуатации уязвимости, требующий действий от пользователя, а не на уровне — открыл веб-страницу через браузер стима, получил тыкву. А тут надо ставить чей-то софт, а это значит, что софт должен быть сомнительный. Действия Valve это, впрочем, не оправдывает, но по существу это не критическая уязвимость. Юзер точно так же может поставить рандомную инди-игру от Васяна, которая при установке запросит права админа, или даже без них, а потом сольёт кучу данных налево, или ещё что натворит, и никакой стим для этого ей не понадобится.

    Кроме того, в Стиме же куча игр, созданных в эпоху 2000/XP, которые не в курсе про всякие UAC/MAC и т.п., соответственно, они чаще всего на этапе установки начинают требовать админские привилегии сразу. И они же вроде как через Стим получают нужные им привилегии, не спрашивая юзера. Стим не этот механизм использует для раздачи привилегий играм из каталога?


    1. demoth
      21.08.2019 20:41
      +1

      Эта уязвимость вполне себе может быть частью чего-то большего. Через одну дыру проникли в систему с правами пользователя, а потом воспользовались этой дырой, чтобы повысить себе привилегии. Действий от пользователя в итоге не требуется.


      1. GDragon
        21.08.2019 21:48

        Более того, в 99% случаев так и происходит, вплоть до того что одной уязвимостью получают доступ к сетевому протоколу, второй уязвимостью подменяют трафик, третьей уязвимостью сохраняют код на пк, четвёртой его выполняют, пятой поднимают ему права, шестой маскируют этот код и так далее.
        «Шведских» уязвимостей вида всё в одном практически не бывает (ну если разработчики не совсем конченые...).


      1. Jogger
        22.08.2019 09:48
        -1

        И я не устану повторять — если через какую-то дыру к вам в систему проникли — вы уже в жопе, и не важно, смог зловред повысить привилегии или нет.


        1. demoth
          22.08.2019 10:15
          +2

          Да вообще-то важно. Ок, с юзерскими привилегиями он, возможно, зашифрует вам файлы. Неприятно, но есть восстановление системы, есть антивирус, который по поведению такое на раз два вычисляет. Если же у него есть системные права, то антивирь он вырубит и зашифрует не только юзерские файлы, но и вообще всю систему вместе с теневыми копиями.


          Да, и это если речь идёт про одно пользователя. У меня на домашнем компьютере, к примеру, кроме моего пользователя есть ещё пользователь жены. Если она подцепит что-то юзермодное, то мои файлы при этом не пострадают. А если малварь сможет повысить привилегии, то см. выше.


          1. Jogger
            22.08.2019 11:04
            -2

            Если у вас теневые копии вместо полноценных бекапов — то вам не вирусов надо бояться…
            А если есть бекапы — то и систему переставить не проблема. Будем запускать всё подряд, неважно откуда? Ну ок…
            И да, антивирусы это фигня, ни разу не видел чтобы эвристика кого-то защитила. Ну, то есть, наверное она таки защищает кого-то когда-то, но процент этих случаев так мал что и упоминания не стоит.


            1. demoth
              22.08.2019 11:13
              +2

              Я не говорил, что теневые копии вместо бекапов. Они их отлично дополняют — восстановиться проще, делаются постоянно.
              При чём тут "запускать всё подряд, не важно откуда"? Я вроде выше написал как раз о том, что пострадать от такой уязвимости можно и без ошибки пользователя. Да и "проверенные" источники софта тоже иногда подводят.
              На счёт антивирусов — ну раз вы говорите, что фигня и даже статистика с процентами у вас есть, значит так оно и есть. Пойду удалю.


              1. Jogger
                22.08.2019 12:14

                Я антивирус удалил уже лет ~15 назад (или 20? надо было засечь...), пока ни одного заражения (да, я примерно раз в год проверяюсь антивирусом с livecd). Учитывая состояние здоровья — у меня есть все шансы до первого заражения банально не дожить. Но нет, других следовать моему примеру не призываю — потому что люди-то бывают разные…


                1. lieff
                  22.08.2019 12:36

                  У меня тоже нет антивируса. Но это не значит что меня не могли взломать, например, через js/firefox, апдейт игры в стиме или дыре в моей любимой IDE при проверке апдейтов (как я это проверю, даже при наличии квалификации?) или что-то еще на выборке в миллионы людей. Особенно если я каким-то образом попал под прицел профессиональных хакеров (счет в банке например большой).


  1. Nicks_TechSupport
    22.08.2019 02:46

    Они там совсем на солнышке перегрелись?
    Автор, подскажите, что Вам в тоге по поводу бана сказали? Совсем обезумели.


    1. xi-tauw Автор
      22.08.2019 09:40

      Я нарушил правила (публично раскрыл уязвимость) — меня забанили. Я не имею претензий на этот счет.


      1. Am0ralist
        22.08.2019 10:38

        публично раскрыл уязвимость
        Какую уязвимость, если они её такой не признали?


        1. xi-tauw Автор
          22.08.2019 11:04

          Хорошо, пусть будет «публично раскрыл репорт». Это не меняет сути.
          Я не согласен с общей политикой Valve, но это не отменяет того, что я нарушил правила.


          1. Am0ralist
            22.08.2019 13:38
            +1

            Правило не раскрытия нужно для того, чтоб успели исправить.
            Если они отказывались править, то пользователи имеют право знать в лицо таких разработчиков.
            Кстати, а нельзя ли петицию в МС какую организовать, чтоб те подпись валве добавили в непроверенные там и при запуске программ выдавали «сия программа дает возможность злоумышлинникам творить зло на ваших компах?


      1. Nicks_TechSupport
        22.08.2019 13:15

        Согласен с ораторов выше — Какую ещё уязвимость, если они её такой не признали?
        Т.е. погодите-ка, в проошлый раз, что Вы опубликовали репорт — это они погрозили пальчиком ай-яй-яй, А сейчас сразу перманентно??
        Ну абсурд же… с их стороны.


        1. Am0ralist
          22.08.2019 13:34

          нет, за прошлый забанили, из-за чего он новый не мог создать.


          1. Nicks_TechSupport
            22.08.2019 13:37

            Тогда это тем более странно, он же им писал, что вот так и так… в общем, это наглядно показывает отношение разработчиков и в частности Вальве к исследователям.
            После такого начинаешь задумываться, а не продать ли мне на чёрном рынке найденное...


            1. Am0ralist
              22.08.2019 13:44

              Именно. Мы косяк не признаем, но рассказывать о нём вы не можете.
              Единственный вариант — активнее создавать плохую репутацию их разрабам и давить через ту же МС.


  1. Noiwex
    22.08.2019 07:19

    1. xi-tauw Автор
      22.08.2019 09:39

      Да. Подождем патча основного клиента. В прошлый раз двух попыток исправления не хватило.



  1. Suvitruf
    23.08.2019 01:55
    +1

    Статья про эту ситуацию на arstechnica.