Pixel BigWave BIGO timeout race UAF → 2KB kernel write from mediacodec
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
TL;DR
- Vanaf die SELinux-beperkte mediacodec konteks is
/dev/bigwave(Pixel AV1 hardware accelerator) bereikbaar. ’n Agterstand van jobs laatBIGO_IOCX_PROCESSsy 16s wait_for_completion_timeout() tref en terugkeer terwyl die worker-thread gelyktydig dieselfde inlinejobstruktuur uit die rye haal. - Deur die FD onmiddellik te sluit vrymaak dit
struct bigo_inst(watstruct bigo_jobinkorporeer). Die worker herstelinst = container_of(job, ...)en gebruik later vrygelaat velde soosjob->regsbinnebigo_run_job(), wat ’n Use-After-Free on the inline job/inst tot gevolg het. bigo_pull_regs(core, job->regs)voermemcpy_fromio(regs, core->base, core->regs_size)uit. Deur die vrygemaakte slab te herwin enjob->regsoor te skryf, kry ’n aanvaller ’n ~2144-byte arbitrary kernel write na ’n gekose adres, met gedeeltelike beheer oor die bytes deur registerwaardes vooraf te programmeer voor die timeout.- Geklassifiseer as CVE-2025-36934; gefikseer in die 2026-01-05 Pixel/2025-12-01 ASB builds.
Attack surface mapping (SELinux → /dev reachability)
- Gebruik gereedskap soos DriverCartographer om device nodes te enumereer wat van ’n gegewe SELinux-domein toeganklik is. Ondanks mediacodec se beperkte beleid (software decoders moet in ’n geïsoleerde konteks bly), het
/dev/bigwavesteeds bereikbaar gebly, waardeur ’n groot aanvalsvlak aan post-media-RCE kode blootgestel is.
Vulnerability: BIGO_IOCX_PROCESS timeout vs worker
- Vloei: ioctl kopieer die user register buffer na
job->regs, sit die inlinejobin die ry, dan wordwait_for_completion_timeout(..., 16s)aangeroep. By timeout probeer dit ontkoppel/annuleer en keer terug na userspace. - Intussen kan
bigo_worker_threadnet die selfdejobuit die ry gehaal het:
inst = container_of(job, struct bigo_inst, job);
bigo_push_regs(core, job->regs);
...
bigo_pull_regs(core, job->regs); // memcpy_fromio(regs, core->base, core->regs_size)
*(u32 *)(job->regs + BIGO_REG_STAT) = status;
- As userspace die FD sluit na die timeout, word
inst/jobvrygemaak terwyl die worker hulle steeds gebruik → UAF. Geen sinkronisasie bind die FD-leeftyd aan die worker thread se job pointer nie.
Oorsig van uitbuiting
- Backlog + timeout: Plaas genoeg jobs in die wagry sodat die worker vertraag word, voer dan
BIGO_IOCX_PROCESSuit en laat dit die 16s timeout-pad tref. - Free while in use: Sodra ioctl terugkeer, voer
close(fd)uit ominst/jobvry te gee terwyl die worker nog steeds die uit die wagry verwyderde job uitvoer. - Reclaim + pointer control: Spray reclaimers (e.g., Unix domain socket message allocations) om die vrygemaakte slab-slot te beset en die inline
joboor te skryf, veraljob->regs. - Arbitrary write: Wanneer
bigo_pull_regs()loop, skryfmemcpy_fromio()core->regs_size (~2144 bytes) vanaf MMIO na die deur die aanvaller verskafde adres injob->regs, wat ’n groot write-what-where skep sonder ’n KASLR leak. - Data shaping: Omdat registers eers van gebruikersdata geprogrammeer word (
bigo_push_regs), stel hulle so die hardware nie uitvoer nie, sodat die teruggekopieerde registerbeeld naby aanvaller-beheerde bytes bly.
Minimal PoC skeleton (blocking backlog + reclaim)
int fd = open("/dev/bigwave", O_RDWR);
for (int i = 0; i < 64; i++) submit_job(fd, regs_buf); // fill worker queue
submit_job(fd, regs_buf); // victim job
auto t0 = now();
while (now() - t0 < 17000ms) sched_yield(); // hit 16s timeout
close(fd); // free inst/job
spray_uds_msgs(payload_pointing_to_target, spray_count); // reclaim slab
sleep(1); // let worker memcpy_fromio
regs_bufmoet BigWave vooraf instel om idle te wees (e.g., stel control bits om uitvoering oor te slaan) sodat die terug-geskopieerde registerbeeld deterministies bly.
Belangrike punte vir stuurprogram-hersieners
- Inline per-FD job structs wat by async workers in die tou geplaas word, moet verwysings hê wat timeout-/kanselleer-paaie oorleef; Die sluit van ’n FD moet met die worker se verbruik gesinchroniseer word.
- Enige MMIO copy helpers (
memcpy_fromio/memcpy_toio) wat buffer-aanwysers van jobs gebruik, moet gevalideer of gedupliseer word voordat hulle in die tou geplaas word om UAF→write primitives te voorkom.
References
- Pixel 0-click (Part 2): Escaping the mediacodec sandbox via the BigWave driver
- Project Zero issue 426567975 – BigWave BIGO timeout UAF
- CVE-2025-36934 entry (BigWave driver)
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.


