Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
ds3-nrssr-rce — Документация и PoC-код для CVE-2022-24125 и CVE-2022-24126. | Kitploit
Инструменты/GitHubGitHub/tremwil/ds3-nrssr-rce
Фреймворки для эксплойтовАнализ уязвимостейЭксплуатацияОбратная инженерияШелл-кодТестирование на ПроникновениеОбучение и ОбразованиеRed TeamingГенерация ШеллкодаРазработка Полезной НагрузкиЭксплуатация Бинарных Файлов
1698184 лет назадПроверено Kitploit
GitHub
tremwil/ds3-nrssr-rce

ds3-nrssr-rce

Документация и PoC-код для CVE-2022-24125 и CVE-2022-24126.

Репозиторий

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Обновление: Dark Souls III 1.15.1

Новое обновление игры, 1.15.1, было выпущено для Dark Souls III 25.08.2022, вместе с восстановлением онлайн-сервисов. Это обновление исправило как CVE-2022-24125, так и CVE-2022-24126, а также множество других потенциальных уязвимостей безопасности в P2P-сети игры (чтения/записи за пределами границ). Кроме того, были исправлены все известные эксплойты, позволяющие повредить сохранения других игроков. Также были пропатчены многие распространённые мелкие читы (например, «проклятый нож»), которые часто встречались в онлайн-мультиплеере.

ds3-nrssr-rce

Этот репозиторий содержит код доказательства концепции и документацию для самой последней RCE-уязвимости, затрагивающей игры FROM SOFTWARE, CVE-2022-24126. Хотя теоретически это возможно и в других играх, основное внимание уделяется Dark Souls III, поскольку именно на этой игре проводилось моё исследование. На данный момент код доказательства концепции существует только для Dark Souls III; подтверждено наличие уязвимости в:

  • Dark Souls 1 PTDE (авторство: LukeYui)
  • Dark Souls Remastered (авторство: metal-crow)
  • Dark Souls 2 (включая Scholar) (авторство: LukeYui)
  • Dark Souls 3 (до 1.15.0) (авторство: tremwil)

Уязвимый код также присутствует в Sekiro (авторство: LukeYui), хотя способа его запуска нет. Наличие в Demon's Souls не подтверждено, но весьма вероятно. Хотя закрытое сетевое тестирование было затронуто этой проблемой, релизная версия Elden Ring — нет. Фактически, огромный список сетевых вылетов, чтений/записей за пределами границ и эксплойтов, позволявших игрокам изменять данные игры других участников в Dark Souls III, был исправлен в Elden Ring. Благодарность LukeYui за составление этого списка и FROM SOFTWARE за быструю реакцию! Я рад сообщить, что Elden Ring — несомненно самый безопасный проект FROM SOFTWARE с точки зрения ущерба, который могут нанести хакеры.

Развеиваем заблуждения

Вопреки распространённому мнению, это НЕ эксплойт одноранговой (P2P) сети. Он связан с матчмейкинг-сервером и поэтому гораздо серьёзнее, поскольку из-за другой уязвимости матчмейкинг-сервера (CVE-2022-24125) вам не нужно участвовать в каких-либо действиях в мультиплеере, чтобы стать уязвимым.

В Dark Souls III злоумышленник, злоупотребляющий этой уязвимостью, мог бы надёжно выполнить полезную нагрузку размером до 1.3MiB1 шеллкода на машине каждого онлайн-игрока в течение нескольких секунд.

Учитывая, что в месяцы, предшествовавшие отключению серверов, в игру в среднем одновременно играло около 20 000 человек, было очевидно, что проблему необходимо исправить немедленно, особенно с учётом возможности её наличия в Elden Ring. Поскольку FROM SOFTWARE не предприняла никаких действий в течение более чем 40 дней после моего первоначального отчёта с видео доказательствами концепции и подробной документацией по эксплойту (на которой основана большая часть этого readme), я решил публично продемонстрировать существование эксплойта безвредным способом, надеясь привлечь внимание и добиться его устранения разработчиками, — и это сработало.

Содержание

  • Сводка по эксплойту (CVE-2022-24126)
  • Векторы распространения (CVE-2022-24125)
  • Общая тактика эксплуатации для всех игр
    • Ошибка №1: отсутствие проверки границ в парсере списка записей
    • Ошибка №2: переполнение буфера в парсере NRSessionSearchResult
    • Подготовка к ROP-цепочке
  • Код доказательства концепции для Dark Souls III
    • Запуск PoC-кода
    • Вектор атаки
    • Цепочка перенаправления виртуальных вызовов
    • Дополнительная информация

Сводка по эксплойту (CVE-2022-24126)

Некорректная проверка границ стекового буфера и поля размера данных при разборе матчмейкинг-данных NRSessionSearchResult позволяет атакующему выполнить произвольный код. Переполнение стека позволяет перезаписать младшие два байта vftable_ptr объекта DLMemoryInputStream, используемого внутри потоковым ридером, перенаправляя выполнение на тщательно выбранный соседний код. Умелое использование структуры объекта DLMemoryInputStream и поля размера данных затем позволяет добиться перенаправления произвольного кода, при этом RCX указывает на адрес нашего пакета. Далее серия перенаправлений кода через виртуальные вызовы с различными смещениями (которые теперь будут переходить по адресам, записанным нами в буфер пакета) может быть использована для достижения выполнения произвольного кода.

Векторы распространения (CVE-2022-24125)

Векторы распространения — это то, что делает данную RCE особенно серьёзной (помимо того, что это уже RCE). Эксплойт передаётся через push-запросы матчмейкинга, содержащие информацию NRSessionSearchResult. Это означает, что атакующий может нацелиться на любого, кто присоединяется к его онлайн-сессии. В частности, для DS3:

  • призыв фантомов (PushRequestSummonSign)
  • вторжения тёмных духов (PushRequestAllowBreakInTarget)
  • игроки, присоединяющиеся через ковенант (PushRequestVisit)
  • участники арены (PushRequestAcceptQuickMatch)

Это уже довольно плохо, но настоящий потенциал открывается запросом RequestSendMessageToPlayers:

message RequestSendMessageToPlayers { 
    repeated uint32 player_ids = 1; 
    required bytes push_message = 2;
}

Хост использует этот запрос для прямой отправки push-сообщения PushRequestAllowBreakInTarget вторгшимся духам, чтобы они могли получить координаты появления и присоединиться к его P2P-сессии. Вот и всё. Это единственный способ использования этого запроса в игре.

Тем не менее он позволяет любому клиенту отправлять произвольные push-сообщения сотням тысяч конкретных игроков.

Я не могу достаточно подчеркнуть, насколько это ужасно небезопасно. Любой игрок может фактически выдать себя за матчмейкинг-сервер. Используя этот запрос для отправки эксплойта через PushRequestVisit, атакующий может удалённо нацелиться на любого онлайн-игрока, если известен его ID игрока. Атакующий также может очень быстро отправить эксплойт всей онлайн-аудитории, отправив несколько запросов, каждый из которых содержит большой диапазон возможных ID игроков.

Общая тактика эксплуатации для всех игр

Хотя RCE не переносится один в один на каждую игру, основная идея эксплойта, дающая атакующему перенаправление произвольного кода, одинакова. Если этого удаётся достичь, весьма вероятно, что затем можно найти специфичную для игры цепочку виртуальных вызовов или ROP-цепочку. Этот «первый шаг» использует следующие уязвимости:

Ошибка №1: отсутствие проверки границ в парсере списка записей

Push-запросы матчмейкинга, содержащие информацию о присоединении к сессии, хранят эту информацию в собственном двоичном формате, который представляет собой цепочку записей данных, разделённых по длине. Каждая запись имеет следующий формат:

struct Entry
{
    uint32_t type_or_id; // not sure, but probably a type (fixed length = 2, variable length = 1 ?)
    uint32_t size;
    uint8_t data[size];
}

Игровая функция, отвечающая за копирование данных этих записей, слепо доверяет полю размера, что создаёт чтение за пределами границ. Злоумышленный клиент может воспользоваться этим, установив поле размера в такие значения, как 0x7FFFFFFF, что приведёт к сбою выделения памяти и вылету игры жертвы. Позже этот размер также передаётся в конструктор DLMemoryInputSteam, что является важной частью эксплойта.

Footnotes

  1. Для Dark Souls III Вер. 1.15. Максимальный теоретический размер полезной нагрузки зависит от раскладки стека и поэтому варьируется в зависимости от игры и версии. ↩

Скачать инструмент