Тэвис Орманди (Tavis Ormandy), исследователь безопасности из компании Google, выявил новую уязвимость (CVE-2023-23583) в процессорах Intel, получившую кодовое имя Reptar и в основном представляющую опасность для облачных систем, в которых выполняются виртуальные машины разных пользователей. Уязвимость позволяет вызвать зависание или аварийную остановку работы системы при выполнении в непривилегированных гостевых системах определённых операций. Для тестирования своих систем опубликована утилита, создающая условия для проявления уязвимости.
Теоретически, уязвимость может быть использована для повышения привилегий с третьего до нулевого кольца защиты (CPL0) и выхода из изолированных окружений, но данный сценарий пока не получил подтверждения на практике из-за трудностей отладки на микроархитектурном уровне. Внутренняя проверка в Intel также показала потенциальную возможность использования уязвимости для повышения привилегий при определённых условиях.
По данным исследователя уязвимость присутствует в семействах процессоров Intel Ice Lake, Rocket Lake, Tiger Lake, Raptor Lake, Alder Lake и Sapphire Rapids. В отчёте Intel упоминается, что проблема проявляется начиная с 10 поколения (Ice Lake) процессоров Intel Core и третьего поколения Xeon Scalable, а также в процессорах Xeon E/D/W (Ice Lake, Skylake, Haswell, Broadwell, Skylake, Sapphire Rapids, Emerald Rapids, Cascade Lake, Cooper Lake, Comet Lake, Rocket Lake) и Atom (Apollo Lake, Jasper Lake, Arizona Beach, Alder Lake, Parker Ridge, Snow Ridge, Elkhart Lake и Denverton). Рассматриваемая уязвимость устранена во вчерашнем обновлении микрокода 20231114.
Уязвимость вызвана тем, что выполнение инструкции “REP MOVSB”, закодированной с избыточным префиксом “REX”, приводит к неопределённому поведению. Проблема была выявлена в ходе тестирования избыточных префиксов, которые теоретически должны игнорироваться, но на практике приводили к странным эффектам, например, игнорированию безусловных переходов и нарушению сохранения указателя в инструкциях xsave и call. Дальнейший разбор показал, что добавление избыточного префикса для инструкции “REP MOVSB” вызывает повреждение содержимого буфера ROB (ReOrder Buffer), применяемого для упорядочения инструкций.
Предполагается, что ошибка вызвана неверным вычислением размера инструкции “MOVSB” с избыточным префиксом, что приводит к нарушению адресации инструкций, записанных в буфер ROB после MOVSB, и смещению указателя на инструкции. Подобная рассинхронизация может ограничиться нарушением промежуточных вычислений с последующим восстановлением целостного состояния. Но если вызвать сбой одновременно на нескольких ядрах или SMT-потоков, можно добиться достаточного повреждения микроархитектурного состояния для аварийной остановки работы.