Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2022-46152 — CVE-2022-46152: Improper Validation of Array Index in the `cleanup_shm_refs' function. | Kitploit
Ferramentas/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 Repositório
há 5 mesesAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2022-46152

OP-TEE OS cleanup_shm_refs() Leitura Fora dos Limites — Ambiente de Reprodução

Referência: https://optee.readthedocs.io/en/latest/building/devices/qemu.html#qemu-v8
Advisory de Segurança: https://github.com/OP-TEE/optee_os/security/advisories/GHSA-65w8-6mrg-52g7


Visão Geral da Vulnerabilidade

CampoDetalhes
Vulnerabilidadecleanup_shm_refs() não valida num_params (teoricamente até 127; limitado a 31 na prática pelo ioctl Linux TEE TEE_MAX_ARG_SIZE=1024), enquanto saved_attr[] possui apenas 4 elementos
Versões AfetadasOP-TEE OS < 3.19.0
Condição de AtivaçãoO Mundo Normal envia uma solicitação INVOKE com num_params=31 via ioctl direto (ignorando o limite de 4 parâmetros do libteec)
ImpactoLeitura fora dos limites de dados da pilha do mundo seguro; se um valor residual da pilha corresponder a um tipo TMEM, um Use-After-Free é acionado
Correçãocleanup_shm_refs(MIN(TEE_NUM_PARAMS, num_params), ...) (commit 728616b)

Estrutura de Diretórios

root@kitploit:~
CVE-2022-46152/
├── README.md                           # Este arquivo (Inglês)
├── README.zh.md                        # Versão em chinês
├── setup.sh                            # Configuração do ambiente com um comando
├── run_qemu.sh                         # Iniciar QEMU
├── exploit.sh                          # Script de reprodução automatizada/manual
├── cve-2022-46152-oob-emsg.patch       # Patch de depuração do OP-TEE OS (entry_std.c OOB EMSG)
├── qemu-pflash-suppress-unimp-log.patch # Patch do QEMU (suprimir logs de ruído do pflash_write)
├── poc/
│   ├── cve_2022_46152.c               # Código-fonte do PoC de exploração (ioctl direto ignorando libteec)
│   └── Makefile                       # Makefile de compilação cruzada
├── docs/
│   └── vulnerability_analysis.md      # Análise técnica detalhada da vulnerabilidade
└── optee/                             # Ambiente OP-TEE (criado por setup.sh)
    ├── optee_os/                      # OP-TEE OS 3.18.0 (versão vulnerável)
    ├── build/                         # Sistema de compilação (qemu_v8.mk)
    ├── linux/                         # Kernel Linux
    ├── buildroot/                     # Rootfs do Buildroot
    ├── trusted-firmware-a/            # TF-A v2.6
    ├── qemu/                          # QEMU v7.0.0 (código-fonte)
    └── out/bin/                       # Artefatos de compilação
        ├── bl1.bin                    # TF-A BL1
        ├── Image                      # Imagem do kernel Linux
        └── rootfs.cpio.gz             # rootfs contendo o PoC

Início Rápido

1. Pré-requisitos

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

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

2. Inicializar o repo (seguindo a documentação 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: Use a tag 3.18.0. Esta versão contém a vulnerabilidade CVE-2022-46152 e ainda não recebeu a correção.

3. Configuração e compilação com um comando (30–60 minutos)

root@kitploit:~
./setup.sh

Este script irá:

  • Executar repo sync para buscar todo o código-fonte
  • Configurar a toolchain (pula o download se optee/toolchains/ já existir, caso contrário baixa automaticamente)
  • Executar make all para compilar TF-A, OP-TEE OS 3.18.0, Linux e Buildroot
  • Compilar cruzadamente o exploit PoC e injetá-lo no rootfs

4. Iniciar o ambiente QEMU

root@kitploit:~
# Abra três terminais:

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

# Terminal 2 — Console do Mundo Normal (execute após run_qemu.sh ter iniciado):
python3 optee/build/soc_term.py 54320

# Terminal 3 — Mundo Seguro (logs do OP-TEE, execute após run_qemu.sh ter iniciado):
python3 optee/build/soc_term.py 54321

Nota: O run_qemu.sh inicia internamente o soc_term.py em modo servidor escutando em 54320/54321, com o QEMU conectando como cliente. Os comandos acima são exemplos para conectar a uma instância em execução e geralmente não precisam ser executados manualmente.

5. Reproduzir a vulnerabilidade

root@kitploit:~
# No terminal do Mundo Normal (54320), após o prompt de login aparecer:
(none) login: root

# Executar o PoC
/root/cve_2022_46152

Saída Esperada

Mundo Normal (console 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 um único ioctl a no máximo 31 parâmetros (libteec limita a 4). Mesmo assim, num_params=31 é suficiente para acionar a leitura fora dos limites (lendo saved_attr[4..30], 27 elementos fora dos limites).

Mundo Seguro (log do TEE Core do 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!

A linha de aviso E/TC:? 0 entry_invoke_command:452 CVE-2022-46152: OOB! é um log explícito adicionado ao entry_std.c através do patch cve-2022-46152-oob-emsg.patch para confirmar o caminho de ativação da vulnerabilidade. cleanup_shm_refs lê 27 elementos extras fora dos limites da pilha; se algum valor residual da pilha corresponder a um tipo TMEM, um Use-After-Free em mobj_put() pode ser acionado.


Código Vulnerável vs. Corrigido

Versão vulnerável (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];   /* apenas 4 slots! */
    ...
    res = copy_in_params(arg->params, arg->num_params, params, saved_attr);
    if (res != TEE_SUCCESS) {
        /* ❌ BUG: num_params pode ser 127, leitura OOB de saved_attr[4..126] */
        cleanup_shm_refs(arg->num_params, saved_attr, arg->params);
        goto out;
    }
    ...
}

Versão corrigida (3.19.0, commit 728616b)

root@kitploit:~
    if (res != TEE_SUCCESS) {
        /* ✅ CORREÇÃO: MIN(4, 127) = 4, não mais fora dos limites */
        cleanup_shm_refs(MIN(TEE_NUM_PARAMS, num_params), saved_attr, arg->params);
        goto out;
    }

Referência Rápida de Comandos

root@kitploit:~
# Configurar o ambiente
./setup.sh

# Iniciar QEMU (com porta de depuração GDB)
./run_qemu.sh

# Iniciar QEMU (sem aguardar GDB)
./run_qemu.sh --no-gdb

# Mostrar etapas manuais de reprodução
./exploit.sh --manual

# Reprodução automatizada (sem terminais extras, saída no shell atual)
./exploit.sh

# Conectar ao console do Mundo Normal (após run_qemu.sh ter iniciado)
python3 optee/build/soc_term.py 54320

# Conectar ao log do Mundo Seguro (após run_qemu.sh ter iniciado)
python3 optee/build/soc_term.py 54321

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

Notas do Patch do QEMU

Este repositório aplica o patch qemu-pflash-suppress-unimp-log.patch sobre o QEMU v7.0.0 para eliminar a seguinte saída ruidosa ao executar a VM:

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

Causa Raiz

pflash_write() em hw/block/pflash_cfi01.c chama qemu_log_mask(LOG_UNIMP, ...) ao lidar com o comando CFI pflash 0xe8 (Write to buffer), registrando um aviso de "não implementado". O firmware TF-A escreve no pflash durante a inicialização, acionando esse caminho e imprimindo a mensagem a cada início.

Conteúdo do Patch (hw/block/pflash_cfi01.c)

Remove a chamada qemu_log_mask(LOG_UNIMP, ...) dentro do bloco case 0xe8 enquanto mantém a lógica funcional intacta.

Aplicando o Patch (opcional; já integrado em optee/qemu/)

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

Notas do Patch do OP-TEE OS

Este repositório aplica um patch de depuração cve-2022-46152-oob-emsg.patch sobre o OP-TEE OS 3.18.0 para que um aviso explícito seja impresso na UART do Mundo Seguro quando a vulnerabilidade for acionada, facilitando a verificação da reprodução.

Conteúdo do Patch (core/tee/entry_std.c)

  • Adiciona #include <trace.h>
  • Em entry_invoke_command(), detecta num_params > TEE_NUM_PARAMS antes da chamada cleanup_shm_refs() e imprime CVE-2022-46152: OOB! cleanup_shm_refs num_params=N > TEE_NUM_PARAMS=4 via EMSG()

⚠️ Este patch é apenas para depuração/demonstração e não é uma correção de segurança. A correção real está no commit 728616b.

Aplicando o Patch (opcional; já integrado em optee/optee_os/)

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

Referências

  • Documentação Oficial do QEMU v8 do OP-TEE
  • Advisory de Segurança GHSA-65w8-6mrg-52g7
  • Commit de Correção 728616b
  • NVD do CVE-2022-46152
  • Repositório de manifesto do OP-TEE
Baixar ferramenta