Уязвимость графического процессора микропрограммного обеспечения встраиваемых плат Qualcomm
Уязвимость графического процессора микропрограммного обеспечения встраиваемых плат Qualcomm
Категория: Программы Теги: Уязвимости Опубликовано: 1 июля 2025

Уязвимость 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 - Высокий ущерб доступности): Возможен полный отказ служб.


Условия эксплуатации

  1. Локальный доступ: Злоумышленник должен иметь возможность выполнить код на устройстве (например, через вредоносное приложение).

  2. Уязвимое оборудование: Устройство с GPU Qualcomm Adreno A7xx (Snapdragon 8 Gen 1, XR2 Gen 2 и новее).

  3. Непропатченная прошивка: Отсутствие обновлений безопасности май 2025 г. или новее.

  4. Драйвер 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.

Ключевые компоненты кода:

  1. Инициализация контекста GPU:

    int fd = open("/dev/kgsl-3d0", O_RDWR);
    kgsl_ctx_create0(fd, &ctx_id);  // Создание контекста с флагами 0x00001812 (низкий приоритет)
    • Используется интерфейс ядра KGSL (Kernel Graphics Support Layer).

  2. Подготовка вредоносных команд:

    *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).

  3. Команда 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.

  4. Отправка команд в GPU:

    kgsl_gpu_command_payload(fd, ctx_id, 0, 0, 1, 0, payload_gpuaddr, cmd_size);
    • Использует системный вызов IOCTL_KGSL_GPU_COMMAND.


Возможные последствия эксплуатации

  1. Отказ в обслуживании (DoS):

    • Повреждение структур памяти GPU → крах драйвера kgsl или всей системы.

    • Пример лога:

      kgsl kgsl-3d0: GPU PAGE FAULT: addr = 4000031004 pid=0
  2. Чтение/запись произвольной памяти:

    • Манипуляция SMMU позволяет переназначить физические адреса.

    • Доступ к данным ядра, включая пароли, криптоключи.

  3. Повышение привилегий (LPE):

    • Перезапись структур ядра (например, cred) → получение root.

    • Обход SELinux/SMEP.

  4. Устойчивые бэкдоры:

    • Модификация firmware GPU для персистентности.


Способы защиты

  1. Обновление микропрограмм:

    • Установка патча от Qualcomm.

  2. Защита на уровне ОС:

    • SELinux Policy: Ограничение доступа к /dev/kgsl-3d0:

      deny untrusted_app kgsl_device:chr_file { open ioctl };
    • Контроль целостности ядра: dm-verity для проверки системных разделов.

  3. Детектирование в 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(); // Сигнализация
          }
      }
  4. Аппаратная изоляция:

    • Использование Hypervisor (KVM/ARM) для изоляции GPU-драйвера в отдельной VM.

    • Включение IOMMU для блокировки прямого доступа к памяти.


Правила для Suricata/IPS

Уместность: Сетевые правила неэффективны, так как атака требует локального выполнения кода. Однако можно детектировать:

  1. Передача эксплоита по сети:

    alert tcp any any -> any any ( 
      msg: "CVE-2025-21479 Exploit Transfer"; 
      content: "cheese"; 
      content: "CP_SMMU_TABLE_UPDATE"; 
      sid: 202506374; rev: 1; 
    )
  2. Детектирование в памяти устройства:

    • Сигнатура для 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 
      }
Алексей Черемных Алексей Черемных
45