
Эксплойт MOC3ingbird для Live2D (CVE-2023-27566)
Будущая работа в этой области будет проводиться под организацией Sakura Motion, начиная с переписывания нашего ядра: https://github.com/SakuraMotion/PurismCore.
日本語版:README_JA.md
Этот репозиторий содержит простую модель Live2D, которая вызывает сбой любого приложения, пытающегося её загрузить: атака типа «отказ в обслуживании». Если у вас установлен ImHex hex editor, вы можете просматривать и редактировать файл MOC3 с помощью файла паттерна в src/moc3.hexpat. Обратите внимание, что вам нужно будет изменить значение 0x7FFFFFFF (FF FF FF 7F) смещения пространства выполнения рядом с началом файла на разумное (0), чтобы увидеть данные паттерна. В качестве альтернативы вы можете включить ShowRuntimeSpaceFields на вкладке «Settings».
src/moc3.hexpat должен уметь просматривать все файлы MOC3. Если вы найдёте тот, который он не может открыть, пожалуйста, создайте issue, и мы рассмотрим его.
Включённые файлы также можно использовать как шаблон для дальнейших исследований и экспериментов.
Эти файлы выпущены в надежде, что они побудят Live2D улучшить свои практики безопасности.
Существует только одна широко распространённая реализация чтения MOC3: Live2D Cubism Core. Cubism Core — это библиотека на C, которая не предпринимает попыток проверки границ для смещений, содержащихся в файлах MOC3. В результате тривиально читать и записывать память за пределами данных MOC3 в памяти, и почти наверняка можно выполнить произвольный код таким способом.
На данный момент я не нашёл способа добиться выполнения кода, используя только Cubism Core; однако выполнение кода всё ещё может быть возможным за счёт особенностей расположения памяти хост-программы (например, Cubism Viewer, VTube Studio и т.д.).
Прямая ZIP-загрузка модели MOC3ingbird (этот репозиторий): нажмите здесь.
Если у вас есть Cubism Editor (and Viewer) или любое другое ПО, способное загружать модели Live2D, просто откройте файл exploit.moc3 с его помощью.
Для просмотрщика, поставляемого с Live2D Cubism Editor, вы можете скачать этот репозиторий и перетащить exploit.moc3 в окно просмотрщика. Он начнёт загружать модель и сразу же вылетит.
Если вы подключите отладчик к вылетающему приложению, вы должны увидеть исключение EXCEPTION_ACCESS_VIOLATION, SIGSEGV или их аналог. Текущий PoC записывает указатель по адресу moc3BaseAddress + sections.parts.runtimeSpace0 со значением moc3BaseAddress + sections.parts.ids.
Паттерн src/moc3.hexpat поддерживает все файлы MOC3. Некоторые образцы можно найти по адресу https://live2d.com/en/download/sample-data/. Обратите внимание, что эти образцы защищены авторским правом Live2D Inc. и могут иметь дополнительные ограничения. Разработчики проекта OpenL2D не несут ответственности за соблюдение пользователями данного ПО любых сторонних соглашений.
Copyright © 2023 The OpenL2D Project Developers. Все права защищены.
Эта модель и все связанные файлы являются свободным ПО, распространяемым на условиях Free Development Public License 1.0-US, опубликованной проектом Freedom of Development Project по адресу https://freedevproject.org/fdpl-1.0-us. Использование файлов из этого репозитория означает принятие данной лицензии.
Ни один файл в этом репозитории не был получен из выходных данных какого-либо программного обеспечения Live2D. Все права защищены только разработчикам проекта OpenL2D, которые не несут обязательств перед какой-либо стороной по какому-либо соглашению в отношении распространения этих файлов.
Чтобы быть более точным: вы можете свободно использовать включённые файлы моделей и паттернов для создания собственных средств чтения и записи MOC3. Ни одна лицензия не ограничивает ваше право на это.