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
streambox-cve-2026-28618 — Note redatte su CVE-2026-28618 / laboratorio StreamBox APV — scrittura heap in un oggetto sessione tramite mancata corrispondenza dell'altezza FRAME | Kitploit
Strumenti/GitHubGitHub/raafatabualazm/streambox-cve-2026-28618
Sicurezza AndroidMemory ForensicsAnalisi delle VulnerabilitàExploitReverse EngineeringSicurezza MobilePaper e RicercaApprendimento e FormazioneBinary Exploitation

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
GitHubraafatabualazm/streambox-cve-2026-28618

streambox-cve-2026-28618

Note redatte su CVE-2026-28618 / laboratorio StreamBox APV — scrittura heap in un oggetto sessione tramite mancata corrispondenza dell'altezza FRAME

Vedi Repository
2h 54m faNon ancora revisionato

Zero-click APV, in un player che riproduce automaticamente le clip condivise

CVE-2026-28618 in StreamBox — la stessa classe di decoder dell'APV RCE Android sfruttato in the wild, trasformata in una scrittura heap contro un oggetto sessione.

Questo repo è un writeup pubblico e redatto: flag, token di istanza e la chiave HMAC sono omessi. L'APK e make_clip.py appartengono a Mobile Hacking Lab; non sono rispecchiati qui.

Catena di attacco

Cosa abbiamo risolto

StreamBox è un piccolo player APV. APV è Advanced Professional Video (RFC 9924), il codec royalty-free di Samsung, la stessa famiglia che è stata distribuita nello stack media di Android. Il pitch del lab è una frase: il player riproduce le clip condivise all'arrivo.

SEND, VIEW, o streambox://?url=… fa atterrare un file in files/incoming.apv e viene eseguito NativeDec.loadClip(). Nessun tap aggiuntivo sulla clip.

Il bug è CVE-2026-28618: un heap buffer overflow in dec_frm_prepare di OpenAPV. Stessa classe, stesso decoder di CVE-2026-0006, l'APV RCE zero-click sfruttato in the wild all'inizio di quest'anno.

Il lab impacchetta quella scrittura come un gioco. Overflow del piano Y hardcoded 64×64, smash di un oggetto sessione adiacente, redirect del teardown in handlers[2], e il Worker restituisce la flag.

Il kit è composto da due zip del lab:

  • streambox-lab.apk.zip — il player
  • make_clip.py.zip — come sono state costruite le clip della libreria 64×64, e il bitstream che mandi in overflow

Il player

Mock del player StreamBox, clip condivisa in riproduzione automatica, diagnostica che espone arena e sessione

PlayerActivity fa:

root@kitploit:~
NativeDec.setVideoTitle(name);
status = NativeDec.loadClip(path);
// WebView bridge later calls Android.openTier(status)

openTier(1) è un hit parziale (sessione toccata, token non corrispondente). openTier(2) è win(). PremiumActivity invia lo stato nativo al lab:

root@kitploit:~
POST /api/unlock
{
  "instance_id": <from POST /api/instance>,
  "tier": 3,
  "session_hex": hex(sessionProof[64]),
  "ticket": HMAC-SHA256(ticketKey, instance_id + ":" + session_hex)
}

All'avvio l'app ha già fatto POST /api/instance e NativeDec.setPlatinumToken(token). Quel token è ciò che l'overflow deve scrivere nella sessione.

Heap: 64×64 Y, poi la sessione

Piano Y di 0x2000 byte, oggetto sessione immediatamente dopo, righe FRAME extra che traboccano in magic/token/handler

root@kitploit:~
arena   = calloc(1, 0x206040);
session = arena + pad + 0x2000;
*(uint64_t *)session = 0x53545245414D424F;  /* bytes: "OBMAERTS" */

L'oapv_imgb_t è hardcoded 64×64, YUV 10-bit. Il piano 0 (Y) inizia a arena+0. 64 × 64 × 2 = 0x2000. Con pad == 0, la sessione si trova sul primo byte dopo Y.

oapvd_decode() scrive alla larghezza/altezza del FRAME PBU. Un FRAME più alto di 64 scrive campioni 10-bit direttamente in session.

Dopo il decode:

root@kitploit:~
if (session->token == g_token) {        /* +0x08 */
    if (session->handler <= 2)          /* +0x0c */
        g_handlers[session->handler](); /* [2] == win() */
} else if (session->token != 0) {
    g_premium = 1;
}
memcpy(g_session_proof, session, 64);
return g_platinum ? 2 : g_premium ? 1 : 0;

Layout di sessionProof: smash del magic, match del token, handler index 2

make_clip.py è il percorso della clip

Il generatore del lab disegna 32 frame di RGB 64×64, li converte in yuv422p10le, e invoca l'encoder di riferimento OpenAPV:

root@kitploit:~
oapv_app_enc -i anim.yuv -w 64 -h 64 -z 8 --input-csp 2 -d 10 -o out.apv -v 1

Ogni clip inclusa è composta da 32 access unit di FRAME 64×64:

root@kitploit:~
[u32be au_size] ['aPv1' + PBUs] × 32

Header FRAME: patch dell'altezza u24be al file +0x16 da 64 a 72

Il player alloca comunque 64×64. Applica la patch a ogni AU frame_height 64 → 72:

root@kitploit:~
python3 scripts/patch_frame_height.py clip_pulse.apv -o overflow_height72.apv --height 72

Condividila (SEND / VIEW / streambox://?url=). L'auto-play è l'exploit.

Un overflow più pulito consiste nel modificare H in make_clip.py a 72 o 128 e ri-codificare, così le righe Y extra sono dati reali dell'immagine. La riga 64 di un piano 10-bit largo 64 è 128 byte:

  • pixel 0–3 → magic della sessione (deve smettere di essere OBMAERTS)
  • pixel 4–5 → token di istanza (g_token)
  • pixel 6–7 → handler index 2

APV è lossy; valori esatti a 10-bit attraverso oapv_app_enc richiedono QP 0 / near-lossless.

PoC pubblico correlato per la classe di bug genitore: mobilehackinglab/CVE-2026-0006-openapv-poc.

Dimostrare la scrittura

urllib di Python riceve Cloudflare 1010. curl con uno UA mobile funziona.

Il Worker rifiuta il magic originale con no overflow evidence: session magic intact. L'ASCII STREAMBO (byte diversi dall'uint64 LE) conta come scrittura.

Unlock redatto: POST /api/instance poi POST /api/unlock che restituisce MHL{REDACTED}

root@kitploit:~
# fill TICKET_KEY in scripts/unlock.py from NativeDec.ticketKey()
python3 scripts/unlock.py

win() è ciò che il player mostra quando loadClip restituisce 2:

Schermata SESSION COMPROMISED con flag redatta

Link

  • Questo repo: script di supporto + diagrammi
  • Android Security Bulletin — Settembre 2026 (CVE-2026-28618, A-492492028, Media Codecs)
  • Writeup CVE-2026-0006 — Mobile Hacking Lab
  • PoC CVE-2026-0006
  • OpenAPV (Academy Software Foundation)
  • Patch AOSP — validazione delle dimensioni in dec_frm_prepare

Disclaimer

Note di lab autorizzate per l'esercizio StreamBox di Mobile Hacking Lab. Nessun APK, nessun token live, nessuna flag. Non eseguire queste primitive contro nulla che non possiedi o per cui non hai il permesso di testare.

Scarica lo strumento