- Версия(и) Minecraft
- 1.7+
Помните взлом гравити (помойка,кстати. ИМХО) в Июле-Августе 2022?
Так вот, мне удалось пообщаться с одним из взломавших и обсудить, как это было сделано.
Вся уязвимость заключается в классе ObjectInputStream, который отвечает за десериализацию объектов - при правильной упаковке класса можно заставить OIS в момент десериализации выполнить произвольный код. А с учетом того, что forge не проверяет стороны пакета при отправке в "ручном" режиме - RCE выполнить становится еще проще.
Был получен пейлоад (но не тулчейн, увы) - в нём имеется ссылка, по которой скачивается jar файл и выполняется (Одна из разновидностей?).
Что нужно для выполнения взлома:
- Взлом клиента для внедрения кода, который отправит пакет с пейлоадом.
- Сам пейлоад, который будет исполнять код на сервере
- Нужный мод, который использует ObjectInputStream в fromBytes - например Gadomancy/PacketSyncConfigs.java at master · makeo/Gadomancy
- Клиент отсылает пакет с пейлоадом (который к слову, выглядит плюс-минус так:
- Поскольку пакет был отправлен "ручным" способом - сервер игнорирует зарегистрированную сторону пакета и начинает выполнять метод fromBytes.
- Тут в бой входит ObjectInputStream, в которого скармливаются правильно составленные байты(пейлоад, т.е.)
- OOS переклинивает и он начинает выполнять то, что ему скормили.
На закуску - моды, которые точно имеют эту дырку:
- Gadomancy
- Endercore
и @ABI за предоставление ресурсов для теста.
ЗЫ. Да, у меня имеется пейлоад, которым пытались взломать пентакрафт (через загрузку .jar, но он сейчас не доступен уже) в то время, поскольку я тогда хотфикс писал, хоть и не зная, что за хрень происходит. Но меня вежливо попросили им не делиться, так что звиняйте, только скриншот выше вам как пруф
ЗЫ2. В качестве хотфикса - можно в уязвимых местах использовать проверку на эффективную сторону (которая проверяет её по стактрейсу). Либо переписать мод, отказавшись от OIS.
ЗЫ3 апд- Человечек просил особенно передать привет команде люкси, а именно: @daniorio @Angelok
UPD: Сделали фикс: GitHub - tox1cozZ/forge-network-fix