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

В ядре Linux устранена следующая уязвимость: bpf: Обнаружение IP == ksym.end как части программы BPF Теперь, когда bpf_throw kfunc является…

CVSS
5.5
Средний
EPSS
0.00
p15
Опубликовано
2023-01-01
Обновлено
2023-01-01
Описание

В ядре Linux устранена следующая уязвимость: bpf: Обнаружение IP == ksym.end как части программы BPF Теперь, когда bpf_throw kfunc является первой такой инструкцией вызова, которая имеет семантику noreturn в верификаторе, это также запускает устранение мертвого кода беспрецедентными способами. Во-первых, любая инструкция, следующая за вызовом bpf_throw, никогда не будет помечена как просмотренная. Более того, если цепочка вызовов заканчивается генерацией исключения, любые инструкции после инструкции вызова в конечном итоге генерирующей исключение подпрограммы в вызывающих абонентах также никогда не будут помечены как просмотренные. Заманчивый способ исправить это - сгенерировать дополнительные инструкции 'int3', которые увеличивают jited_len программы и гарантируют, что во время выполнения, когда программа генерирует исключение, мы сможем обнаружить ее границы, даже если инструкция вызова bpf_throw (или подпрограмм, которые всегда генерируют исключение) выдается как последняя инструкция в программе. Примером такой программы может быть: do_something(): ... r0 = 0 exit foo(): r1 = 0 call bpf_throw r0 = 0 exit bar(cond): if r1 != 0 goto pc+2 call do_something exit call foo r0 = 0 // Никогда не просматривается верификатором exit // main(ctx): r1 = ... call bar r0 = 0 exit Здесь, если мы все же сгенерируем исключение, трассировка стека будет следующей: bpf_throw foo bar main В bar последней выданной инструкцией будет вызов foo, как таковой, обратный адрес будет следующей инструкцией (которую JIT выдает как int3 на x86). Это окажется за пределами jited_len программы, таким образом, при раскрутке мы не сможем обнаружить, что обратный адрес принадлежит какой-либо программе, и в конечном итоге запаникуем из-за ненадежной раскрутки стека программ BPF, чего мы никогда не ожидаем. Чтобы исправить этот случай, заставьте bpf_prog_ksym_find рассматривать IP == ksym.end как часть программы BPF, чтобы is_bpf_text_address возвращала true, когда происходит такой случай, и мы могли надежно раскручиваться, когда последняя инструкция оказывается инструкцией вызова.

Теги · CWE
CWE-561
Затронутые продукты
LinuxLinuxLinuxLinuxLinuxLinuxLinuxLinuxLinuxLinuxLinuxLinuxLinuxLinux-5.10Linux-5.10Linux-5.10Linux-5.15Linux-6.1Linux-6.1Linux-allwinner-5.19
Вектор CVSS
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
Хронология
2023-01-01
Опубликована
2023-01-01
Обновлена
Разбор CVSS 3.1
Вектор атаки
AV: L
Локальная (L)
Сложность атаки
AC: L
Низкая (L)
Требуемые привилегии
PR: L
Низкие (L)
Взаимодействие с пользователем
UI: N
Отсутствует (N)
Область воздействия
S: U
Неизменная (U)
Воздействие на конфиденциальность
C: N
Отсутствует (N)
Воздействие на целостность
I: N
Отсутствует (N)
Воздействие на доступность
A: H
Высокое (H)
Индикаторы эксплуатации
EPSS
0.002 · p15
Известна эксплуатация (KEV)
Нет
Проверки Сканер-ВС
Проверок Сканер-ВС для этой уязвимости в базе пока нет.
Затронутые продукты
ПродуктВендорСтатус
linuxОтслеживается
linuxОтслеживается
linuxОтслеживается
linuxОтслеживается
linuxОтслеживается
linuxОтслеживается
linuxОтслеживается
linuxОтслеживается
linuxОтслеживается
linuxОтслеживается
linuxОтслеживается
linuxОтслеживается
linuxОтслеживается
linux-5.10Отслеживается
linux-5.10Отслеживается
linux-5.10Отслеживается
linux-5.15Отслеживается
linux-6.1Отслеживается
linux-6.1Отслеживается
linux-allwinner-5.19Отслеживается
Показаны первые 20 из 245
Источники данных
AST
DEB
CVE
UBU
Связанные уязвимости