Pixel BigWave BIGO timeout race UAF → mediacodec से 2KB kernel write
Tip
AWS हैकिंग सीखें और अभ्यास करें:
HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें:HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।
TL;DR
- SELinux-सीमित mediacodec context से,
/dev/bigwave(Pixel AV1 hardware accelerator) पहुँचा जा सकता है। नौकरियों के बैकलॉग के कारणBIGO_IOCX_PROCESSइसका 16s wait_for_completion_timeout() हिट कर वापिस लौटता है जबकि worker thread समानांतर में उसी inlinejobसंरचना को dequeue कर देता है। - FD को तुरंत बंद करने से
struct bigo_inst(जोstruct bigo_jobको embed करता है) free हो जाता है। workerinst = container_of(job, ...)पुनर्निर्माण करता है और बाद में freed फील्ड्स जैसेjob->regsकोbigo_run_job()के अंदर उपयोग करता है, जिससे inline job/inst पर Use-After-Free होता है। bigo_pull_regs(core, job->regs)memcpy_fromio(regs, core->base, core->regs_size)करता है। freed slab को फिर से हासिल करके औरjob->regsको overwrite करके, attacker को किसी चुने हुए पते पर ~2144-byte arbitrary kernel write मिल जाता है, और timeout से पहले register values प्री-प्रोग्राम करके उस लिखे हुए बाइट्स पर आंशिक नियंत्रण हासिल किया जा सकता है।
Attack surface mapping (SELinux → /dev पहुँचयोग्यता)
- DriverCartographer जैसे tools का उपयोग कर किसी दिए गए SELinux domain से पहुँचने योग्य device nodes को enumerate करें। mediacodec की constrained policy के बावजूद (software decoders को isolated context में रखना चाहिए),
/dev/bigwaveपहुँच योग्य रहा, जिससे post-media-RCE को बड़े attack surface का खुलासा हुआ।
Vulnerability: BIGO_IOCX_PROCESS timeout vs worker
- Flow: ioctl user register buffer को
job->regsमें copy करता है, inlinejobको queue करता है, और फिरwait_for_completion_timeout(..., 16s)करता है। timeout पर यह dequeue/cancel करने की कोशिश करता है और userspace पर लौट जाता है। - इस बीच
bigo_worker_threadने संभवतः अभी-अभी उसीjobको dequeue कर लिया है:
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;
- यदि userspace timeout के बाद FD को close कर देता है, तो
inst/jobfree हो जाते हैं जबकि worker उन्हें उपयोग करता रहता है → UAF. FD की lifetime को worker thread के job pointer के साथ कोई सिंक्रोनाइज़ेशन जुड़ा नहीं है।
Exploitation outline
- Backlog + timeout: पर्याप्त jobs queue करें ताकि worker देरी में रहे, फिर
BIGO_IOCX_PROCESSचलाकर उसे 16s timeout पथ पर पहुँचने दें। - Free while in use: जैसे ही ioctl लौटे,
close(fd)करें ताकिinst/jobfree हो जाएँ जबकि worker अभी भी dequeued job चला रहा है। - Reclaim + pointer control: Spray reclaimers (e.g., Unix domain socket message allocations) से freed slab slot पर कब्ज़ा कराएँ और inline
job, खासकरjob->regs, overwrite करें। - Arbitrary write: जब
bigo_pull_regs()चलेगा,memcpy_fromio()MMIO से attacker-supplied address मेंcore->regs_size (~2144 bytes)लिखेगा (job->regs में), जिससे बिना KASLR leak के बड़ा write-what-where बनता है। - Data shaping: चूंकि registers पहले user डेटा (
bigo_push_regs) से प्रोग्राम होते हैं, उन्हें इस तरह सेट करें कि hardware execute न करे, जिससे copied-back register image attacker-नियंत्रित बाइट्स के करीब रहे।
Takeaways for driver reviewers
- Inline per-FD job structs जो async workers को enqueue होते हैं, उन्हें ऐसे references रखने चाहिए जो timeout/cancel पथों में भी जीवित रहें; FD close होना worker consumption के साथ synchronize होना चाहिए।
- कोई भी MMIO copy helper (
memcpy_fromio/memcpy_toio) जो jobs से buffer pointers उपयोग करता है, उन्हें enqueue करने से पहले validate या duplicate किया जाना चाहिए ताकि UAF→write primitives न बनें।
References
- Pixel 0-click (Part 2): Escaping the mediacodec sandbox via the BigWave driver
- Project Zero issue 426567975 – BigWave BIGO timeout UAF
Tip
AWS हैकिंग सीखें और अभ्यास करें:
HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें:HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।


