Дырочка в модах с использованием ObjectInputStream

Дырочка в модах с использованием ObjectInputStream

Версия(и) Minecraft
1.7+
123.jpg

Помните взлом гравити (помойка,кстати. ИМХО) в Июле-Августе 2022?
Так вот, мне удалось пообщаться с одним из взломавших и обсудить, как это было сделано.

Вся уязвимость заключается в классе ObjectInputStream, который отвечает за десериализацию объектов - при правильной упаковке класса можно заставить OIS в момент десериализации выполнить произвольный код. А с учетом того, что forge не проверяет стороны пакета при отправке в "ручном" режиме - RCE выполнить становится еще проще.
Был получен пейлоад (но не тулчейн, увы) - в нём имеется ссылка, по которой скачивается jar файл и выполняется (Одна из разновидностей?).

Что нужно для выполнения взлома:
  1. Взлом клиента для внедрения кода, который отправит пакет с пейлоадом.
  2. Сам пейлоад, который будет исполнять код на сервере
  3. Нужный мод, который использует ObjectInputStream в fromBytes - например Gadomancy/PacketSyncConfigs.java at master · makeo/Gadomancy
Что предположительно происходит:
  1. Клиент отсылает пакет с пейлоадом (который к слову, выглядит плюс-минус так:
    vx2nHFd.png
    )
  2. Поскольку пакет был отправлен "ручным" способом - сервер игнорирует зарегистрированную сторону пакета и начинает выполнять метод fromBytes.
  3. Тут в бой входит ObjectInputStream, в которого скармливаются правильно составленные байты(пейлоад, т.е.)
  4. OOS переклинивает и он начинает выполнять то, что ему скормили.
Вот и всё ребятки.

На закуску - моды, которые точно имеют эту дырку:
  • Gadomancy
  • Endercore
Спасибо @SerStarStory за помощь в этом бардаке
и @ABI за предоставление ресурсов для теста.

ЗЫ. Да, у меня имеется пейлоад, которым пытались взломать пентакрафт (через загрузку .jar, но он сейчас не доступен уже) в то время, поскольку я тогда хотфикс писал, хоть и не зная, что за хрень происходит. Но меня вежливо попросили им не делиться, так что звиняйте, только скриншот выше вам как пруф

ЗЫ2. В качестве хотфикса - можно в уязвимых местах использовать проверку на эффективную сторону (которая проверяет её по стактрейсу). Либо переписать мод, отказавшись от OIS.

ЗЫ3 апд- Человечек просил особенно передать привет команде люкси, а именно: @daniorio @Angelok

UPD: Сделали фикс: GitHub - tox1cozZ/forge-network-fix
UPD2: @JustAGod провёл небольшое исследование с достаточно интересными результатами. Вполне возможно, что в будущем найдётся пейлоад без использования scala. Ссылка на пост
Автор
will0376
Просмотры
1,896
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок

Другие ресурсы пользователя will0376

Сверху