Ruby JSON — это реализация JSON для Ruby. С версий 2.20.0 до 2.21.2 собственное расширение Ruby JSON C очищает использованный входной буфер JSON::ResumableParser, но оставляет state.start, state.cursor и state.end, указывающие на освобожденное хранилище. Когда частичный_значение реконструирует неполный объект, содержащий повторяющиеся ключи, путь предупреждения о дублирующихся ключах вызывает курсор_позиции, который разыменовывает эти устаревшие указатели.
Это приводит к использованию кучи после освобождения и может завершить процесс Ruby. Злоумышленник, который может предоставить данные потока JSON приложению с помощью JSON::ResumableParser, может вызвать завершение процесса, когда приложение вызывает частичный_значение для неполных входных данных, контролируемых злоумышленником, содержащих повторяющиеся ключи объекта. Эта проблема исправлена в версии 2.21.2.
Показать оригинальное описание (EN)
Ruby JSON is a JSON implementation for Ruby. From 2.20.0 until 2.21.2, Ruby's JSON native C extension clears the consumed JSON::ResumableParser input buffer but leaves state.start, state.cursor, and state.end pointing into released storage. When partial_value reconstructs an incomplete object containing duplicate keys, the duplicate-key warning path calls cursor_position, which dereferences those stale pointers. This results in a heap-use-after-free and can terminate the Ruby process. An attacker who can supply JSON stream data to an application using JSON::ResumableParser may cause process termination when the application calls partial_value on incomplete attacker-controlled input containing duplicate object keys. This issue has been fixed in version 2.21.2.
Характеристики атаки
Последствия
Строка CVSS v4.0