V
Сканер-ВС
ГлавнаяКаталогИсточникиCWECAPECATT&CKМеры защитыПродуктыВендорыДокументация
CVE-2021-32629
CVE
Высокий

Cranelift - это генератор кода с открытым исходным кодом, поддерживаемый Bytecode Alliance. Он преобразует аппаратно-независимое промежуточ…

CVSS
8.8
Высокий
EPSS
0.00
p36
Опубликовано
2021-01-01
Обновлено
2021-01-01
Описание

Cranelift - это генератор кода с открытым исходным кодом, поддерживаемый Bytecode Alliance. Он преобразует аппаратно-независимое промежуточное представление в исполняемый машинный код. В версии 0.73 бэкэнда Cranelift x64 есть ошибка, которая может создать сценарий, который может привести к потенциальному выходу из песочницы в программе Wasm. Эта ошибка была внесена в новый бэкэнд 2020-09-08 и впервые включена в выпуск 2020-09-30, но новый бэкэнд не был стандартным до 0.73. Недавно выпущенная версия 0.73 с настройками по умолчанию и предыдущие версии с явным флагом сборки для выбора нового бэкэнда являются уязвимыми. Рассматриваемая ошибка выполняет расширение знака вместо расширения нулем значения, загруженного из стека, при определенном наборе обстоятельств. Если эти обстоятельства возникают, ошибка может позволить получить доступ к адресам памяти до 2 ГБ до начала кучи программы Wasm. Если граница кучи больше 2 ГБ, то можно будет читать память из вычислимого диапазона, зависящего от размера границы кучи. Влияние этой ошибки сильно зависит от реализации кучи, в частности: * если куча имеет проверки границ, и * не полагается исключительно на страницы защиты, и * граница кучи составляет 2 ГБ или меньше * тогда эту ошибку нельзя использовать для доступа к памяти из другой кучи программы Wasm. Влияние уязвимости смягчается, если в диапазоне, доступном с помощью этой ошибки, нет отображенной памяти, например, если перед кучей программы Wasm есть защитная область размером 2 ГБ. Рассматриваемая ошибка выполняет расширение знака вместо расширения нулем значения, загруженного из стека, когда распределитель регистров перезагружает пролитое целочисленное значение, более узкое, чем 64 бита. Это плохо взаимодействует с другой оптимизацией: селектор инструкций опускает оператор расширения нулем от 32 до 64 бит, когда мы знаем, что инструкция, производящая 32-битное значение, фактически обнуляет верхние 32 бита своего целевого регистра. Следовательно, мы полагаемся на эти обнуленные биты, но тип значения по-прежнему i32, а разлив/перезагрузка восстанавливает эти биты как расширение знака MSB i32. Таким образом, проблема возникнет, когда: * Значение i32 в программе Wasm больше или равно 0x8000_0000; * Значение разливается и перезагружается распределителем регистров из-за высокого давления регистров в программе между определением значения и его использованием; * Значение производится инструкцией, которая, как мы знаем, является «особенной» в том смысле, что она обнуляет верхние 32 бита своего назначения: add, sub, mul, and, or; * Затем значение расширяется нулем до 64 бит в программе Wasm; * Полученное 64-битное значение используется. При этих обстоятельствах существует потенциальный выход из песочницы, когда значение i32 является указателем. Обычный код, генерируемый для доступа к куче, расширяет нулем адрес кучи Wasm, добавляет его к 64-битной базе кучи и обращается к полученному адресу. Если расширение нулем становится расширением знака, программа может вернуться назад и получить доступ к памяти до 2 ГБ до начала своей кучи. В дополнение к оценке характера ошибки генерации кода в Cranelift, мы также определили, что при определенных обстоятельствах Lucet и Wasmtime, использующие эту версию Cranelift, могут быть уязвимы. Дополнительные сведения см. в справочном руководстве GitHub.

Теги · CWE
CWE-788
Затронутые продукты
Cranelift-codegen < 0.73.1
Вектор CVSS
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
Хронология
2021-01-01
Опубликована
2021-01-01
Обновлена
Разбор CVSS 3.1
Вектор атаки
AV: L
Локальная (L)
Сложность атаки
AC: L
Низкая (L)
Требуемые привилегии
PR: L
Низкие (L)
Взаимодействие с пользователем
UI: N
Отсутствует (N)
Область воздействия
S: C
Изменена (C)
Воздействие на конфиденциальность
C: H
Высокое (H)
Воздействие на целостность
I: H
Высокое (H)
Воздействие на доступность
A: H
Высокое (H)
Индикаторы эксплуатации
EPSS
0.005 · p36
Известна эксплуатация (KEV)
Нет
Проверки Сканер-ВС
Проверок Сканер-ВС для этой уязвимости в базе пока нет.
Затронутые продукты
ПродуктВендорСтатус
cranelift-codegen*Отслеживается
Источники данных
CVE