Шестнадцатилетний исследователь из Великобритании Руби Нилон (Ruby Nealon), также известный под ником rubiimeow, наглядно показал, что в платформе Steam есть множество дыр. В качестве демонстрации одной из уязвимостей Нилон в обход всех проверок опубликовал в магазине Steam шуточную игру Watch Paint Dry – симулятор наблюдения за высыхающей краской.
В своем блоге Нилон рассказал, что хотел обнародовать свою игру о сохнущей краске 1 апреля 2016 года, но забыл установить дату отложенной публикации. Пришлось помогать Valve устранять проблему и обнародовать детали уязвимостей раньше «дня дурака».
Все игры, попадающие в официальный магазин Steam и песочницу платформы (Greenlight), проходят строгую проверку у сотрудников Valve. Точнее, так должно быть, но Нилон доказал, что на деле систему проверки можно обойти.
Сначала Нилон создал себе аккаунт Steamworks – такие учетные записи могут использовать только разработчики игр. Как именно это было проделано, исследователь не объясняет, так как использованный им баг уже устранен. Впрочем, Нилон пишет, что уязвимость не касалась Greenlight, веб-форм, и аккаунт не был предоставлен ему сотрудниками Valve.
Получив доступ к Steamworks, Нилон обнаружил ряд проблем внутри платформы для девелоперов, о которых тут же попытался сообщить сотрудникам Valve. Исследователя игнорировали несколько месяцев. Так как приближалось 1 апреля, Нилон решил заявить о себе иначе и придумал симулятор сохнущей краски.
Идею он почерпнул из недавней истории, которая попала в новости по всему миру. В январе 2016 года режиссер Чарли Лин заставил рецензентов Британского совета по классификации фильмов (BFFC) посмотреть десятичасовой «фильм» о том, как сохнет краска на стене. Так режиссер выразил свой протест против цензуры в кино, когда BFFC решает, какие фильмы должны смотреть люди, да еще и взимает за это немалую пошлину.
Так как ни одна хорошая игра не обходится без собственных коллекционных карточек Steam, Нилон нарисовал для Watch Paint Dry набор карточек и продолжил поиск уязвимостей. Дело в том, что карточки тоже должны быть рассмотрены сотрудниками Valve и получить разрешение на публикацию. Исследователь быстро заметил, что веб-форма, предназначенная для добавления новых карточек, работает как-то странно. Заглянув в исходники страницы, Нилон сумел подменить ID своей сессии, присвоив себе значение «1» — оказалось, что так система отмечает сотрудников Valve.
Затем Нилон извлек данные из HTTP-запроса на добавление карточек в Steam, получив на руки полный перечень возможных опций и значений. Так как из-за подмены ID, система считала его сотрудником Valve, Нилон имел доступ к редактированию формы и смог изменить значение для своего шуточного набора на «Ready for Review». То есть набор якобы уже получил одобрение и был допущен к публикации. Серверы Valve не никак не проверили, действительно ли кто-то из персонала просматривал новую заявку, простой смены статуса оказалось вполне достаточно.
Закончив с карточками, Нилон обошел все проверки, которые игры в Steam проходят перед публикацией. Этот процесс состоит из трех этапов: сначала разработчик должен создать страницу для своей игры в Steamworks. Затем нужно закачать на серверы Steam файлы игры. После девелоперу предоставят выбор – если выход игры запланирован на некую конкретную дату в будущем, можно указать эту дату. Потом разработчику остается только запросить разрешение на публикацию своей игры в Steam Store.
Без труда добравшись до последнего этапа, Нилон вновь решил заглянуть в код. Оказалось, что процесс рассмотрения и одобрения игр строится на AJAX-запросах, отсылаемых на серверы Valve. Исследователь сумел подделать запрос, обнаружив функцию «ReleaseGame(appid, data)», куда вручную добавил ID своей игры. Также потребовался JSON-запрос, содержащий ID сессии. В итоге сервер Valve счел, что всё в порядке, игру уже одобрили к публикации. Watch Paint Dry попала в магазин Steam, хотя ее не видел ни один сотрудник компании.
Релиз шуточного симулятора помог Нилону добиться долгожданного эффекта – в Valve наконец-то заметили и его самого, и многочисленные проблемы в Steam. На сегодня все описанные исследователем баги уже были исправлены, а игру Watch Paint Dry можно увидеть только через archive.org.
Этот случай получил большой резонанс, и компания Valve решила не наказывать шутника, вместо этого Нилону оставили доступ к бекэнду Steamworks, попросив поискать другие уязвимости.
Исследователя не пришлось просить дважды. Сегодня, 31 марта 2016 года, Нилон опубликовал в своем блоге сообщение о том, что уже обнаружил XSS (cross-site scripting) уязвимость в системе SteamDepot, которая используется для внутреннего хранения игрового контента. Кроме того, Нилон пишет, что защита от CSRF (cross-site request forgery) в Steamworks реализована из рук вон плохо, он сумел ее обойти и осуществить CSRF-атаку. Исследователь доложил об обеих проблемах сотрудникам Valve, и уязвимости устранили вчера.
Продолжать поиск багов в Steam Нилон более не намеревается. Дело в том, что у Valve нет программы вознаграждения за обнаруженные уязвимости, так что далее тратить время на поиск багов исследователь не хочет.
Фото: Ruby Nealon