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
streambox-cve-2026-28618 — Notas redigidas sobre CVE-2026-28618 / laboratório StreamBox APV — escrita em heap em um objeto de sessão via incompatibilidade de altura de FRAME | Kitploit
Ferramentas/GitHubGitHub/raafatabualazm/streambox-cve-2026-28618
Segurança AndroidForensia de MemóriaAnálise de VulnerabilidadesExploraçãoEngenharia ReversaSegurança MóvelPapers e PesquisaAprendizado e EducaçãoExploração de Binários

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

streambox-cve-2026-28618

Notas redigidas sobre CVE-2026-28618 / laboratório StreamBox APV — escrita em heap em um objeto de sessão via incompatibilidade de altura de FRAME

Ver Repositório
há 2h 55mAinda não revisado

Zero-click APV, em um player que reproduz automaticamente clipes compartilhados

CVE-2026-28618 no StreamBox — a mesma classe de decoder do RCE APV do Android explorado in-the-wild, transformada em uma escrita de heap contra um objeto de sessão.

Este repositório é um writeup público e redigido: flags, tokens de instância e a chave HMAC foram omitidos. O APK e o make_clip.py pertencem ao Mobile Hacking Lab; eles não são espelhados aqui.

Cadeia de ataque

O que resolvemos

StreamBox é um pequeno player APV. APV é Advanced Professional Video (RFC 9924), o codec livre de royalties da Samsung, a mesma família que foi distribuída na stack de mídia do Android. A proposta do lab é uma frase: o player reproduz clipes compartilhados ao chegar.

SEND, VIEW ou streambox://?url=… coloca um arquivo em files/incoming.apv e NativeDec.loadClip() é executado. Sem toque extra no clipe.

O bug é o CVE-2026-28618: um heap buffer overflow em dec_frm_prepare do OpenAPV. Mesma classe, mesmo decoder do CVE-2026-0006, o RCE APV zero-click explorado in-the-wild no início deste ano.

O lab empacota essa escrita como um jogo. Estoure o plano Y fixo de 64×64, destrua um objeto de sessão adjacente, redirecione o teardown para handlers[2], e o Worker devolve a flag.

O kit são dois zips do lab:

  • streambox-lab.apk.zip — o player
  • make_clip.py.zip — como os clipes da biblioteca 64×64 foram construídos, e o bitstream que você estoura

O player

Mock do player StreamBox, clipe compartilhado sendo reproduzido automaticamente, diagnósticos vazando arena e sessão

PlayerActivity faz:

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

openTier(1) é um acerto parcial (sessão tocada, token incompatível). openTier(2) é win(). PremiumActivity envia o estado nativo via POST para o 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)
}

Na inicialização o app já fez POST /api/instance e NativeDec.setPlatinumToken(token). Esse token é o que o overflow precisa escrever na sessão.

Heap: Y 64×64, depois a sessão

Plano Y de 0x2000 bytes, objeto de sessão imediatamente depois, linhas FRAME extras transbordam para magic/token/handler

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

O oapv_imgb_t é fixo em 64×64, YUV de 10 bits. O plano 0 (Y) começa em arena+0. 64 × 64 × 2 = 0x2000. Com pad == 0, a sessão fica no primeiro byte após Y.

oapvd_decode() escreve na largura/altura do FRAME PBU. Um FRAME mais alto que 64 escreve amostras de 10 bits direto na session.

Após o 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 do sessionProof: destrua o magic, combine o token, índice de handler 2

make_clip.py é o caminho do clipe

O gerador do lab desenha 32 frames de RGB 64×64, converte para yuv422p10le e chama o encoder de referência 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

Todo clipe incluído é composto de 32 access units de FRAME 64×64:

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

Cabeçalho FRAME: patch u24be height no arquivo +0x16 de 64 para 72

O player ainda aloca 64×64. Faça patch de todo frame_height de AU de 64 → 72:

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

Compartilhe (SEND / VIEW / streambox://?url=). A reprodução automática é o exploit.

Um overflow mais limpo é editar H em make_clip.py para 72 ou 128 e recodificar, para que as linhas Y extras sejam dados reais de imagem. A linha 64 de um plano de 10 bits com 64 de largura tem 128 bytes:

  • pixels 0–3 → magic da sessão (deve deixar de ser OBMAERTS)
  • pixels 4–5 → token da instância (g_token)
  • pixels 6–7 → índice do handler 2

APV é lossy; valores exatos de 10 bits através do oapv_app_enc exigem QP 0 / quase sem perdas.

PoC público relacionado para a classe de bug pai: mobilehackinglab/CVE-2026-0006-openapv-poc.

Prove a escrita

O urllib do Python recebe Cloudflare 1010. curl com um UA de celular funciona.

O Worker rejeita o magic original com no overflow evidence: session magic intact. O ASCII STREAMBO (bytes diferentes do uint64 LE) conta como uma escrita.

Unlock redigido: POST /api/instance e depois POST /api/unlock retornando MHL{REDACTED}

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

win() é o que o player mostra quando loadClip retorna 2:

Tela SESSION COMPROMISED com flag redigida

Links

  • Este repositório: scripts auxiliares + diagramas
  • Android Security Bulletin — Setembro de 2026 (CVE-2026-28618, A-492492028, Media Codecs)
  • Writeup do CVE-2026-0006 — Mobile Hacking Lab
  • PoC do CVE-2026-0006
  • OpenAPV (Academy Software Foundation)
  • Patch do AOSP — validação de dimensão em dec_frm_prepare

Aviso legal

Notas de lab autorizadas para o exercício StreamBox do Mobile Hacking Lab. Sem APK, sem tokens ativos, sem flag. Não execute essas primitivas contra nada que você não possua ou tenha permissão para testar.

Baixar ferramenta