В ядре Linux 6.2 выявлена уязвимость (CVE-2023-1998), приводящая к отключению защиты от атак класса Spectre v2, позволяющих получить доступ к памяти других процессов, выполняемых в разных потоках SMT или Hyper Threading, но на одном физическом ядре процессора. Уязвимость, среди прочего, может использоваться для организации утечки данных между виртуальными машинами в облачных системах. Проблема затрагивает только ядро Linux 6.2 и вызвана некорректной реализацией оптимизаций, призванных снизить значительные накладные расходы при применении защиты от Spectre v2. Уязвимость устранена в экспериментальной ветке ядра Linux 6.3.
В пространстве пользователя для защиты от атак класса Spectre процессы могут выборочно отключать спекулятивное выполнение инструкций при помощи prctl PR_SET_SPECULATION_CTRL или использовать фильтрацию системных вызовов на базе механизма seccomp. По данным выявившую проблему исследователей некорректная оптимизация в ядре 6.2 оставила без должной защиты виртуальные машины как минимум одного крупного облачного провайдера, несмотря на включение режима блокирования атак spectre-BTI через prctl. Уязвимость также проявляется и на обычных серверах с ядром 6.2, при загрузке которых используется настройка “spectre_v2=ibrs”.
Суть уязвимости в том, что при выборе режимов защиты IBRS или eIBRS внесённые оптимизации отключали применение механизма STIBP (Single Thread Indirect Branch Predictors), необходимого для блокирования утечек при применении технологии одновременной многопоточности (SMT или Hyper-Threading). При этом защиту от утечки между потоками обеспечивает только режим eIBRS, но не режим IBRS, так как при нём бит IBRS, обеспечивающий защиту от утечек между логическим ядрами, из соображений производительности очищается при возвращении управления в пространство пользователя, что делает потоки в пространстве пользователя не защищёнными от атак класса Spectre v2.