В данной статье мы подробно рассмотрим уязвимость, при помощи которой можно делать замену любых “защищённых” sv_pure 1 текстур.
Введение
Как известно, существуют так называемые “легальные читы”, которые включают в себя модели, видимые через стены, прозрачные текстуры и т.д. Легальными данные читы называются из-за того, что за их использование игрок не может быть забанен системой VAC, поэтому они достаточно популярны среди нечестных игроков всех уровней.
Для защиты от подобного применяется штатная функция sv_pure. На большинстве серверов она установлена в значение 1, т.е. запрещено всё, кроме файлов из белого списка. Нестандартные текстуры и модели могут быть загружены на клиенте только если они расположены в каталоге из белого списка.
Список разрешённых ассетов sv_pure 1
Рассмотрим список разрешённых ассетов sv_pure 1 игр Team Fortress 2 и Counter-Strike: Source по умолчанию:
whitelist
{
//
// Allow custom player models.
//
models\player\... any
materials\models\player\... any
//
// Allow custom spray decals.
//
materials\temp\... any
materials\vgui\logos\... any
materials\vgui\logos\ui\... any
}
Первые две строки уже сами по себе являются брешью, т.к. позволяют заменить модели игроков обеих команд на видимые через стены, поэтому большинство игровых администраторов их убирают. Нас же интересуют оставшиеся.
Описание уязвимости
Сама уязвимость заключается в том, что игра на движке Source при подключении к серверу проверяет только файлы моделей/текстур на наличие их в белом списке. Манифесты при этом можно изменять как и сколько угодно без каких-либо последствий.
Эксплуатируем уязвимость
Выполним следующие шаги строго по порядку:
- создадим каталоги /tf/custom/exp_test/materials/temp/, /tf/custom/exp_test/materials/models/;
- перейдём в каталог /tf/custom/exp_test/materials/models/ и скопируем туда *.vmt файлы (манифесты) нужных текстур/моделей;
- в /tf/custom/exp_test/materials/temp/ поместим изменённые файлы текстур;
- откроем манифест и изменим значение переменной $basetexture так, чтобы оно указывало на наш заменённый файл текстуры внутри temp. Сохраним изменения;
- повторяем шаги нужное число раз.
Защита от уязвимости
В настоящее время единственной возможностью защититься от игроков с текстурами, видимыми через стены, можно только с помощью установки на сервере sv_pure 2. Это заблокирует любые нестандартные модели и текстуры с полной проверкой контрольных сумм.
Внимание! При использовании sv_pure 2 перестанут работать любые нестандартные звуки, модели, текстуры (если они есть на сервере), а также спреи игроков.
Уязвимость уже активно эксплуатируется игроками, т.к. существует готовый эксплойт-пак на неё. Я по понятным причинам не буду выкладывать ссылки на него здесь.
UPD. Уязвимость исправлена в очередном обновлении игры.