Бесплатно Экспресс-аудит сайта:

28.09.2023

Делим на ноль и теряем данные: баг в серии процессоров AMD

Обнаружена уязвимость в процессорах AMD ( CVE-2023-20588 ), приводящая к утечке данных при выполнении операций на одном и том же ядре CPU во время обработки исключения #DE (Divide Error, Ошибка деления), возникающего при попытке деления на ноль. Проблема касается только процессоров AMD Zen1, таких как AMD EPYC 7001, AMD Athlon 3000, AMD Ryzen 3000 с GPU Radeon, AMD Athlon PRO 3000 с GPU Radeon Vega и AMD Ryzen PRO 3000 с GPU Radeon Vega.

Причина уязвимости заключается в том, что при возникновении исключения #DE из-за деления на ноль, процессор спекулятивно перенаправляет результат предшествующей операции деления, поскольку в CPU с микроархитектурой Zen1 в конвейере присутствует всего один делитель, обрабатывающий операции в различных потоках. На уязвимых системах злоумышленник может узнать результат предшествующей операции деления, выполненной на том же ядре CPU в других контекстах, например, в ядре, в других процессах или за пределами виртуальной машины.

На практике уязвимость может быть использована для создания скрытого канала передачи данных между процессами, средами sandbox или виртуальными машинами, обходя системные механизмы контроля доступа и без использования системных вызовов. Уязвимость также позволяет из пользовательского пространства определить результат предшествующего фактического или спекулятивного выполнения инструкции DIV, что может быть использовано при обработке конфиденциальных данных на более высоком уровне привилегий (например, деление может использоваться при выполнении криптографических операций, и злоумышленник может узнать параметры этих операций).

Патчи для устранения уязвимости уже разработаны для ядра Linux и гипервизора Xen . Проблема устранена через перезапись буфера делителя во время переключения контекста. Исправление работает только при отключении симметричной многопоточности (SMT).