Dota 2 Protobuf Vulnerabilities

Dota 2 Protobuf Vulnerabilities

voidsploit

За последнюю неделю мы обнаружили две уязвимости, позволяющие манипулировать некоторыми косметическими предметами в Dota 2. Обе уязвимости были известны узкому кругу и, судя по следам на рынке, активно использовались. Сначала - коротко об инструменте, который сделал это возможным.

Игра и сервер общаются между собой не нажатыми кнопками, а структурированными сообщениями с полями, которые в Dota называются protobuf (прото‑сообщения). Проще всего представить это как электронный бланк с полями: "какой предмет", "какой инструмент", "в какой слот" и т. п. Обычно этот "бланк" заполняет игра, а сервер проверяет, что всё логично и разрешено. Но если сформировать такое сообщение вручную и отправить его напрямую, можно попросить сервер сделать действие, которого нет в интерфейсе.

Первая уязвимость позволяла извлекать призматические и потусторонние самоцветы из Unusual‑курьеров и аркан на Terrorblade и Techies без уничтожения исходного предмета. По сути сервер принимал неправильный тип инструмента для извлечения редкого самоцвета и выполнял операцию без уничтожения предмета. То есть, с помощью прото‑сообщения отправлялась команда на извлечение самоцвета из редкого слота, но вместо требуемого Master Artificer’s Hammer указывался обычный Artificer’s Hammer (так в клиенте сделать нельзя). Сервер не проверял корректность комбинации "инструмент/операция", в результате редкие самоцветы извлекались, а предмет оставался в инвентаре уже с пустым слотом.   

На торговой площадке встречались вещи с признаками такой операции (предмет был куплен более года назад)
Результат проделанной операции
Запись реализации первой уязвимости

Вторая уязвимость позволяла дублировать обычные руны и самоцветы (Inscribed, Autographed, Corrupted, Kinetic и Spectator). Как и в первом случае, отправлялось прото‑сообщение на вставку нескольких самоцветов в разные сокеты одного предмета, но везде указывался один и тот же идентификатор самоцвета/руны. Сервер не проверял уникальность самоцвета по сокетам и размещал одну и ту же руну сразу в нескольких слотах. Затем каждую из них можно было извлечь как отдельный предмет. За один запрос можно было получить до 4 копий (максимум сокетов - 5). Если исходная руна была доступна к обмену, то и её копии также становились доступными.

Результат проделанной операции
Запись реализации второй уязвимости

Через день после обнаружения дюпа рун выяснилось, что его применение некоторым образом влияло на координатор Dota 2 из-за чего тот выходил из строя приблизительно на 3 минуты. В таком ключе эту уязвимость можно было рассматривать ещё и как DoS-атаку на игровой сервер.

Демонстрация DoS-атаки на игровой координатор

В конце хотел бы поблагодарить sikle за помощь с передачей информации до Valve, разработчиков Dota 2 за оперативную работу над исправлением этих багов, а вас за прочтение этой статьи!

Report Page