Выполненный в ядре Linux 6.1 перевод VMA (Virtual Memory Area) со структуры данных “red-black tree” на “maple tree” привёл к появлению уязвимости (CVE-2023-3269), позволяющей непривилегированному пользователю добиться выполнения своего кода с правами ядра. Уязвимость, которой присвоено кодовое имя StackRot, проявляется начиная с выпуска ядра 6.1 и устранена в обновлениях 6.4.1, 6.3.11 и 6.1.37.
Структура “maple tree” представляет собой вариант B-tree, поддерживающий индексацию по диапазонам значений и спроектированный для эффективного использования кэша современных процессоров. По сравнению с “red-black tree” применение “maple tree” позволяет добиться более высокой производительности. Уязвимость вызвана ошибкой в обработчике расширения стека – в структуре “maple tree”, используемой при управлении областями виртуальной памяти в ядре, замена узла в дереве могла произойти без выставления блокировки на запись, что создавало условия для обращения к области памяти после её освобождения (use-after-free).
Эксплуатацию уязвимости усложняло то, что узлы в структуре “maple tree” освобождаются в отложенном режиме с использованием callback-вызовов с блокировками RCU (Read-copy-update). Тем не менее, исследователям удалось преодолеть возникшие трудности и подготовить рабочий эксплоит, который планируют опубликовать в конце июля, чтобы дать пользователям время обновить свои системы. Эксплуатация возможна в почти во всех конфигурациях ядра и требует лишь минимальных привилегий.