ASI SAMP 0.3.7 MultiRCE Fix (Menu, GameText & Animation)

mhertz

Известный
Автор темы
148
305
Версия SA-MP
  1. 0.3.7 (R1)
  2. 0.3.7-R3
  3. 0.3.7-R4
  4. 0.3.7-R5
  5. 0.3DL
SAMP 0.3.7 MultiRCE Fix
Данный плагин исправляет несколько уязвимостей переполнения буффера, которые могут привести к RCE:
с меню, GameText и анимациями.

Поддерживаемые версии: SA-MP 0.3-DL R1, 0.3.7 R1, R3-1, R4, R5.
Краткое описание уязвимостей:
Уязвимость с меню: в общем исправлена в SA-MP 0.3.7-R4 (однако остаётся возможность повредить кучу с помощью ID меню выше 127). Заключается в переполнении буффера кучи (heap buffer overflow) в объекте CMenu (причиной этому служит отсутствие валидации количества строчек в меню), а также, что более важно, - в возможности записывания строчек в CMenu без нулевого байта на конце, что может привести к переполнению буффера на стэке (stack buffer overflow) в функции CFont::ProcessCurrentString (для этого в строчку нужно вставить тэг форматирования GTA).
Уязвимость с GameText: частично исправлена в SA-MP 0.3.7-R5, однако при правильном подборе входных данных всё ещё возможно её использование. Заключается в переполнении статического буффера (static buffer overflow) около массива CMessages::BIGMessages (причиной этому служит неправильная валидация стиля GameText).
Уязвимость с анимациями: официально не исправлена, заключается в различии размеров буфферов на стэке между SAMP и GTA: SA, что приводит к переполнению буффера на стэке (stack buffer overflow) в функции CRunningScript::ReadTextLabelFromScript (подробнее смотри ниже).
Подробнее про RCE с анимациями (рабочий RCE в SAMP 0.3.7-R5):
SAMP при применении анимаций записывает их библиотеку и название в буффер длинной 256 байт.
Однако скриптовая функция, которую вызывает SAMP (taskPlayAnimNonInterruptable), принимает библиотеку и название в буфферы длинной 16 и 24 байт соответственно и при этом не проверяет длину входящей строки. Благодаря этому мы получаем переполнение буффера на стэке, хоть и ограниченное — мы не можем записывать нулевые байты (но мы можем их писать в буффер SAMPа, что нам очень пригодится).
Чтобы обойти ограничение, мы можем перезаписать адрес возврата функции на гаджет, заранее подготовленный через RPC_ScrSetGravity (я использовал следующий гаджет: sub esp, ecx; ret;), а также значение регистра ECX (в который идут следующие 4 байта после названия анимации). Таким образом мы получаем возможность произвольно смещать ESP (единственным ограничением служит то, что в смещении не должно быть нулевых байт, но оно легко обходится заменой sub на add и наоборот). Его я сместил на буффер библиотеки анимации SAMPа + 4 байта (я использовал библиотеку анимаций: BAR + нулевой байт, так как она должна быть действительной, чтобы SAMP проиграл анимацию), в который я предварительно записал ROP-чейн и чуть модифицированный шеллкод отсюда.
Таким образом, мы получили возможность подгружать любую DLL в SAMP с сервера на последней версии — SAMP 0.3.7-R5.
Вместе с данным плагином рекомендуется установить исправление уязвимости в диалогах: Нажми на меня!
 

Вложения

  • SAMP MultiRCE Fix.asi
    120.5 KB · Просмотры: 455
  • SAMP MultiRCE Fix Source.zip
    76.6 KB · Просмотры: 222
Последнее редактирование:

EvgeN 1137

?
Проверенный
169
659
очередной фикс рсе, который я вижу в паблике, и как всегда без исходников 🙁
 

mhertz

Известный
Автор темы
148
305
очередной фикс рсе, который я вижу в паблике, и как всегда без исходников 🙁
сам фикс rce элементарен, проверяю длину animLib на <= 15 и длину animName на <= 23,
а сам rce я пока не публиковал чтобы разрабы всяких нубо-рп не скопипастили его и не засунули на свой сервер с 900 ботами
 

povargek

Известный
Друг
96
289
сам фикс rce элементарен, проверяю длину animLib на <= 15 и длину animName на <= 23,
а сам rce я пока не публиковал чтобы разрабы всяких нубо-рп не скопипастили его и не засунули на свой сервер с 900 ботами

ApplyActorAnimation это касается тоже?​

 

sazzas1978

Известный
132
124
Норм за калькора допииваем, но там еще есть некоторые рпси которые стоит проверить и они работают со строками
 

FYP

Известный
Администратор
1,763
5,906
очередной фикс рсе, который я вижу в паблике, и как всегда без исходников 🙁
уважаемые авторы убедительная просьба пожалуйста выкладывайте свои фиксы уязвимостей с исходниками чтобы можно было удалить копирайты! это уже не смешно!
1721239197135.png
 

Kenshi.

Известный
311
146
уважаемые авторы убедительная просьба пожалуйста выкладывайте свои фиксы уязвимостей с исходниками чтобы можно было удалить копирайты! это уже не смешно!
Посмотреть вложение 246791
фипу не в падлу написать 5 строчек в чатик, может и мунлоадер обновит🧐
 

Willy4ka

вилличка
Модератор
410
716

povargek

Известный
Друг
96
289
уважаемые авторы убедительная просьба пожалуйста выкладывайте свои фиксы уязвимостей с исходниками чтобы можно было удалить копирайты! это уже не смешно!
Посмотреть вложение 246791

код нубский я не умею в луа не судите строго

уважаемые авторы убедительная просьба пожалуйста выкладывайте свои фиксы уязвимостей с исходниками чтобы можно было удалить копирайты! это уже не смешно!
Посмотреть вложение 246791

а вообще двачую, если будут сурсы и пруфы чистоты DLL - его можно и signtool'ом подписать
 

Вложения

  • anim_rce_fix.lua
    1.3 KB · Просмотры: 80
  • Нравится
  • Влюблен
Реакции: Mintha, FYP и Amfeeque

mhertz

Известный
Автор темы
148
305
Кстати, может в новой версии ещё и фикс rce с scrinitmenu добавить (это тот который в SAMP R4 пофиксили, я его фикса тут не видел)?