
Уязвимость BDU:2025-06374 (CVE-2025-21479) GPU Qualcomm Adreno
Уязвимость BDU:2025-06374 (CVE-2025-21479) затрагивает механизм авторизации в микропрограммном обеспечении графических процессоров Qualcomm Adreno серии A7xx. Эксплуатация позволяет злоумышленнику выполнять произвольные команды GPU, приводящие к повреждению памяти через отправку специально сформированных инструкций.
Анализ уязвимости
Уровень опасности: 8.6 HIGH
Вектор атаки: CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H
-
AV:L (Attack Vector - Локальный доступ): Атака требует локального выполнения кода на устройстве.
-
AC:L (Attack Complexity - Низкая сложность): Эксплуатация не требует сложных условий.
-
PR:N (Privileges Required - Привилегии не требуются): Достаточно пользовательских прав.
-
UI:R (User Interaction - Взаимодействие пользователя): Требуется действие пользователя (запуск приложения).
-
S:C (Scope - Изменение области безопасности): Влияет на компоненты за пределами уязвимого модуля.
-
C:H (Confidentiality Impact - Высокий ущерб конфиденциальности): Возможен доступ к чувствительным данным.
-
I:H (Integrity Impact - Высокий ущерб целостности): Полный контроль над системой.
-
A:H (Availability Impact - Высокий ущерб доступности): Возможен полный отказ служб.
Условия эксплуатации
-
Локальный доступ: Злоумышленник должен иметь возможность выполнить код на устройстве (например, через вредоносное приложение).
-
Уязвимое оборудование: Устройство с GPU Qualcomm Adreno A7xx (Snapdragon 8 Gen 1, XR2 Gen 2 и новее).
-
Непропатченная прошивка: Отсутствие обновлений безопасности май 2025 г. или новее.
-
Драйвер KGSL: Доступ к устройству
/dev/kgsl-3d0
для взаимодействия с GPU.
Подвержены уязвимости
- Qualcomm AQT1000
- Qualcomm QCA6391
- Qualcomm SM7325P
- Qualcomm WCD9341
- Qualcomm WCD9370
- Qualcomm WCD9375
- Qualcomm WCD9380
- Qualcomm WCD9385
- Qualcomm WCN3988
- Qualcomm WSA8810
- Qualcomm WSA8815
- Qualcomm WSA8830
- Qualcomm WSA8835
- Qualcomm WCN3950
- Qualcomm WSA8832
- Qualcomm SD855
- Qualcomm SM6250
- Qualcomm FastConnect 6200
- Qualcomm FastConnect 6800
- Qualcomm FastConnect 6900
- Qualcomm Snapdragon 855 Mobile Platform
- Qualcomm Snapdragon 855+/860 Mobile Platform (SM8150-AC)
- Qualcomm Snapdragon 865 5G Mobile Platform
- Qualcomm Snapdragon 865+ 5G Mobile Platform (SM8250-AB)
- Qualcomm Snapdragon 870 5G Mobile Platform (SM8250-AC)
- Qualcomm Snapdragon X55 5G Modem-RF System
- Qualcomm FastConnect 7800
- Qualcomm Snapdragon 888 5G Mobile Platform
- Qualcomm Snapdragon 888+ 5G Mobile Platform (SM8350-AC)
- Qualcomm FastConnect 6700
- Qualcomm Snapdragon 4 Gen 1 Mobile Platform
- Qualcomm Snapdragon 460 Mobile Platform
- Qualcomm Snapdragon 480 5G Mobile Platform
- Qualcomm Snapdragon 480+ 5G Mobile Platform (SM4350-AC)
- Qualcomm Snapdragon 662 Mobile Platform
- Qualcomm Snapdragon 680 4G Mobile Platform
- Qualcomm Snapdragon 685 4G Mobile Platform (SM6225-AD)
- Qualcomm Snapdragon 690 5G Mobile Platform
- Qualcomm Snapdragon 695 5G Mobile Platform
- Qualcomm Snapdragon 720G Mobile Platform
- Qualcomm Snapdragon 778G 5G Mobile Platform
- Qualcomm Snapdragon 778G+ 5G Mobile Platform (SM7325-AE)
- Qualcomm Snapdragon 782G Mobile Platform (SM7325-AF)
- Qualcomm Snapdragon 7c+ Gen 3 Compute Platform
- Qualcomm SM8550P
- Qualcomm Snapdragon 8 Gen 2 Mobile Platform
- Qualcomm Snapdragon 8+ Gen 2 Mobile Platform
- Qualcomm WCD9390
- Qualcomm WCD9395
- Qualcomm WSA8840
- Qualcomm WSA8845
- Qualcomm WSA8845H
- Qualcomm Snapdragon 8 Gen 3 Mobile Platform
- Qualcomm SXR2250P
- Qualcomm WCN6755
- Qualcomm SM4635
- Qualcomm WCN7861
- Qualcomm WCN7881
- Qualcomm QCS4490
- Qualcomm QCM4490
- Qualcomm SM6650
- Qualcomm SM7635
- Qualcomm SM7675
- Qualcomm SM7675P
- Qualcomm SM8635
- Qualcomm SM8635P
- Qualcomm SXR2230P
- Qualcomm SXR2330P
- Qualcomm WCD9378
- Qualcomm WCN6450
- Qualcomm WCN6650
- Qualcomm Snapdragon AR1 Gen 1 Platform "Luna1"
- Qualcomm Snapdragon AR1 Gen 1 Platform
- Qualcomm SM6650P
- Qualcomm SM8650Q
Технический механизм уязвимости
Суть проблемы: Недостаточная проверка уровня косвенного буфера (IB Level) в команде CP_SMMU_TABLE_UPDATE
.
-
В микрокоде GPU Adreno A7xx уровень
SDS (Set Draw State)
имеет значение0x4
. -
При выполнении команды
CP_SET_DRAW_STATE
текущий IB Level устанавливается в0x4
. -
Проверка авторизации для критических команд (например,
CP_SMMU_TABLE_UPDATE
) использует маску0x3
:and $02, $12, 0x3 ; Проверка уровня brne $02, 0x0, #exit ; Если не 0 (не RB), выход
-
Результат для
SDS (0x4)
:0x4 & 0x3 = 0x0
→ проверка проходит, хотя уровень не является привилегированным (RB).
Последствие: Возможность модификации таблиц SMMU (System Memory Management Unit), что приводит к:
-
Повреждению структур памяти ядра.
-
Доступу к произвольным физическим адресам.
-
Обходу механизмов защиты памяти (например, KASLR).
Анализ эксплоита
Рассмотрим код эксплоита для понимания работы вектора атаки с использованием уязвимости CVE-2025-21479.
Ключевые компоненты кода:
-
Инициализация контекста GPU:
int fd = open("/dev/kgsl-3d0", O_RDWR); kgsl_ctx_create0(fd, &ctx_id); // Создание контекста с флагами 0x00001812 (низкий приоритет)
-
Используется интерфейс ядра
KGSL
(Kernel Graphics Support Layer).
-
-
Подготовка вредоносных команд:
*payload_cmds++ = cp_type7_packet(CP_SET_MODE, 1); // Активация режима draw states *payload_cmds++ = cp_type7_packet(CP_SET_DRAW_STATE, 3); *payload_cmds++ = (drawstate_cmds - drawstate_buf) | (DRAW_STATE_MODE_BINNING << 20); cp_gpuaddr(payload_cmds, drawstate_gpuaddr); // Указывает на команду CP_SMMU_TABLE_UPDATE
-
CP_SET_DRAW_STATE
форсирует выполнение команд с уровнем IB =0x4
(SDS).
-
-
Команда CP_SMMU_TABLE_UPDATE:
*drawstate_cmds++ = cp_type7_packet(CP_SMMU_TABLE_UPDATE, 4); drawstate_cmds += cp_gpuaddr(drawstate_cmds, 0x1234567841414141); // Поддельный адрес *drawstate_cmds++ = 0x42424242; // Произвольные данные
-
Вызывает ошибку
GPU PAGE FAULT
при попытке доступа к0x1234567841414141
.
-
-
Отправка команд в GPU:
kgsl_gpu_command_payload(fd, ctx_id, 0, 0, 1, 0, payload_gpuaddr, cmd_size);
-
Использует системный вызов
IOCTL_KGSL_GPU_COMMAND
.
-
Возможные последствия эксплуатации
-
Отказ в обслуживании (DoS):
-
Повреждение структур памяти GPU → крах драйвера
kgsl
или всей системы. -
Пример лога:
kgsl kgsl-3d0: GPU PAGE FAULT: addr = 4000031004 pid=0
-
-
Чтение/запись произвольной памяти:
-
Манипуляция SMMU позволяет переназначить физические адреса.
-
Доступ к данным ядра, включая пароли, криптоключи.
-
-
Повышение привилегий (LPE):
-
Перезапись структур ядра (например,
cred
) → получение root. -
Обход SELinux/SMEP.
-
-
Устойчивые бэкдоры:
-
Модификация firmware GPU для персистентности.
-
Способы защиты
-
Обновление микропрограмм:
-
Установка патча от Qualcomm.
-
-
Защита на уровне ОС:
-
SELinux Policy: Ограничение доступа к
/dev/kgsl-3d0
:deny untrusted_app kgsl_device:chr_file { open ioctl };
-
Контроль целостности ядра:
dm-verity
для проверки системных разделов.
-
-
Детектирование в runtime:
-
Сигнатура для eBPF/Xposed: Блокировка вызовов
ioctl
с командамиCP_SET_DRAW_STATE
+CP_SMMU_TABLE_UPDATE
:if (ctx->cmd == IOCTL_KGSL_GPU_COMMAND) { if (memmem(user_buf, size, "\x53\x00\x00\x04", 4)) { // CP_SMMU_TABLE_UPDATE log_alert(); // Сигнализация } }
-
-
Аппаратная изоляция:
-
Использование
Hypervisor
(KVM/ARM) для изоляции GPU-драйвера в отдельной VM. -
Включение
IOMMU
для блокировки прямого доступа к памяти.
-
Правила для Suricata/IPS
Уместность: Сетевые правила неэффективны, так как атака требует локального выполнения кода. Однако можно детектировать:
-
Передача эксплоита по сети:
alert tcp any any -> any any ( msg: "CVE-2025-21479 Exploit Transfer"; content: "cheese"; content: "CP_SMMU_TABLE_UPDATE"; sid: 202506374; rev: 1; )
-
Детектирование в памяти устройства:
-
Сигнатура для
YARA
:rule CVE_2025_21479_Exploit { strings: $c1 = { 63 00 00 01 01 00 00 00 } // CP_SET_MODE $c2 = { 43 00 00 03 ?? ?? 00 04 } // CP_SET_DRAW_STATE condition: all of them }
-
