Группа исследователей из Грацского технического университета (Австрия) и Центра Гельмгольца по информационной безопасности (CISPA), выявила (PDF) новый вектор применения атаки по сторонним каналам Foreshadow (L1TF), позволяющей извлечь данные из памяти анклавов Intel SGX, SMM (System Management Mode), областей памяти ядра ОС и виртуальных машин в системах виртуализации. В отличие от предложенной в 2018 году изначальной атаки Foreshadow новый вариант не специфичен для процессоров Intel и затрагивает CPU других производителей, таких как ARM, IBM и AMD. Кроме того, новый вариант не требует высокой производительности и атака может быть осуществлена даже при помощи запуска JavaScript и WebAssembly в web-браузере.

Атака Foreshadow пользуется тем, что при доступе к памяти по виртуальному адресу, приводящему к исключению (terminal page fault), процессор спекулятивно рассчитывает физический адрес и загружает данные, если они имеются в L1-кэше. Спекулятивное обращение выполняется до завершения перебора таблицы страниц памяти и независимо от состояния записи в таблице страниц памяти (PTE), т.е. до проверки наличия данных в физической памяти и их доступности для чтения. После завершения проверки доступности памяти, в случае отсутствия флага Present в PTE операция отбрасывается, но данные оседают в кэше и их можно извлечь при помощи методов определения содержимого кэша по сторонним каналам (через анализ изменения времени доступа к прокэшированным и не прокэшированным данным).

Исследователи показали, что имеющиеся методы защиты от Foreshadow неэффективны и реализованы с неверной трактовкой проблемы. Уязвимость
Foreshadow может быть эксплуатирована независимо от применения в ядре механизмов защиты, которые ранее считались достаточными. В итоге исследователями была продемонстрирована возможность совершения атаки Foreshadow в системах с относительно старыми ядрами, в которых включены все имеющиеся режимы защиты от Foreshadow, а также с новыми ядрами, в которых отключена только защита от Spectre-v2 (используется опция ядра Linux nospectre_v2).

Было обнаружено, что эффект упреждающей загрузки не связан с программными инструкциями prefetch или аппаратным эффектом
упреждающей загрузки в процессе доступа к памяти, а возникает при спекулятивном разыменовании регистров пространства пользователя в ядре. Подобное неверное толкование причины возникновения уязвимости изначально привело к предположению, что утечка данных в Foreshadow может произойти только через кэш L1, в то время как наличие в ядре определённых отрывков кода (prefetch-гаджетов) может способствовать утечке данных вне L1-кэша, например, в кэш L3.

Выявленная особенность также открывает возможности по созданию новых атак, нацеленных на процессы трансляции виртуальных адресов в физические в изолированных окружениях и определение адресов и данных, сохранённых в регистрах CPU. В качестве демонстраций исследователи показали возможность использования выявленного эффекта для извлечения данных из одного процесса в другой с производительностью около 10 бит в секунду на системе с CPU Intel Core i7-6500U CPU. Также показана возможность утечки содержимого регистров из анклава Intel SGX (на определение 32-разрядного значения, записанного в 64-разрядный регистр ушло 15 минут). Некоторые виды атак оказалось возможным реализовать на JavaScript и WebAssembly, например, удалось определить физический адрес JavaScript-переменной и заполнить 64-разрядные регистры значением, контролируемым атакующим.

Для блокирования атаки Foreshadow через кэш L3 эффективен метод защиты Spectre-BTB (Branch Target Buffer), реализованный в наборе патчей retpoline. Таким образом, исследователи считают необходимым оставить retpoline включённым даже на системах с новыми CPU, в которых уже имеется защита от известных уязвимостей в механизме спекулятивного выполнения инструкций CPU. При этом представители Intel заявили, что не планируют добавлять в процессоры дополнительные меры защиты от Foreshadow и считают достаточным включения защиты от атак Spectre V2 и L1TF (Foreshadow).