
एंड्रॉइड क्रोमियम के लिए फुल-चेन एक्सप्लॉइट जो CVE-2026-11057 इंफो लीक और CVE-2026-5281 यूज़-आफ्टर-फ्री को मिलाकर vtable हाईजैक और आर्बिट्ररी कोड एक्ज़ीक्यूशन प्राप्त करता है।
Pixel 7 Android 16 ARM64
commit 994c846bbd7a35241ba7c08158c13d66412a6993 (HEAD -> 146.0.7680.111, tag: 146.0.7680.111)
Author: Roger McFarlane <[email protected]>
Date: Mon Mar 9 12:48:07 2026 -0700
यह रिपॉज़िटरी CVE-2026-11057 (Skia अनइनिशियलाइज़्ड ग्लिफ़ इमेज मेमोरी) और CVE-2026-5281 (Dawn wire सर्वर DeviceInfo यूज़-आफ्टर-फ़्री) को एक पूर्ण श्रृंखला में जोड़ती है। सभी संशोधन रेंडरर-साइड हैं; GPU-प्रोसेस कोड अपरिवर्तित है:
सूचना लीक (CVE-2026-11057) — canvas टेक्स्ट रेंडरिंग के माध्यम से एक अनइनिशियलाइज़्ड ग्लिफ़ इमेज बफ़र ट्रिगर करें, GPU-प्रोसेस हीप से पॉइंटर पढ़ें, अंकगणितीय रन के साथ उन्हें सत्यापित करें, PartitionAlloc पूल बेस प्राप्त करें, और नकली Server लक्ष्य M = POOL + 0x202A08000 (कैलिब्रेटेड ऑफ़सेट) की गणना करें।
CC स्प्रे — createBuffer(label="CCM:<m>:<n>") 3000 अपूर्ण ChunkedCommands (10KB बकेट, remainingSize=1, wire सर्वर के mChunkedCommands में जीवित रखे गए) का इंजेक्शन ट्रिगर करता है। पेलोड Android arm64 के लिए तैयार किए गए नकली Server के साथ M के आसपास के क्षेत्र को भरता है: +0xB20 पर MutexProtected vptr, +0xB50/+0xB58 पर ChunkedCommandSerializer, +0xC00/+0xD00 पर नकली CommandSerializer/vtable।
5281 ट्रिगर + अधिग्रहण — queue.writeBuffer(buffer, 0x414141, ...) पहले 16-बाइट DeviceInfo को मुक्त करने के लिए Unregister(Device) को कॉल करता है, फिर उस स्लॉट को पुनः प्राप्त करने और info->server को M से अधिलेखित करने के लिए 16-बाइट अधिग्रहण ChunkedCommand इंजेक्ट करता है, और अंत में आउट-ऑफ़-बाउंड्स ऑफ़सेट के साथ एक सत्यापन त्रुटि ट्रिगर करता है।
डैंगलिंग कॉलबैक → vtable हाईजैक — अनकैप्चर्ड-एरर कॉलबैक info->server = M (नकली Server) को डीरेफ़रेंस करता है: शून्य किए गए म्यूटेक्स पास हो जाते हैं, निष्पादन OnUncapturedError → SerializeCommand तक पहुँचता है, और रिलेटिव-vtable इनडायरेक्ट कॉल हमारे नकली vtable से टकराता है, जिससे pc = fake_vtable + नियंत्रित int32 ऑफ़सेट प्राप्त होता है, जिसे pc = 0x7641414141 द्वारा प्रदर्शित किया गया है।
नोट: Android arm64 Chromium रिलेटिव vtables (
-fexperimental-relative-c++-abi-vtables) का उपयोग करता है; vtable प्रविष्टियाँ निरपेक्ष फ़ंक्शन पॉइंटर के बजाय 32-बिट रिलेटिव ऑफ़सेट होती हैं, इसलिए PoC vtable-हाईजैक बिंदु पर मार्कर के रूप में एक नियंत्रित int32 ऑफ़सेट का उपयोग करता है।
परीक्षण डिवाइस पर, पूरी श्रृंखला लगभग 100% सफलता दर के साथ vtable-हाईजैक क्रैश तक पहुँचती है; लीक चरण को सफल होने से पहले कभी-कभी कई स्वचालित रीलोड की आवश्यकता हो सकती है।
SkStrike.cpp.patch — CVE-2026-11057 लीक ट्रिगर। FlattenGlyphsByType() स्ट्राइक पेलोड को इस प्रकार फिर से लिखता है कि GPU प्रोसेस fImage == nullptr वाला SkGlyph बनाता है, अंततः हीप पॉइंटर लीक करने के लिए एक अनइनिशियलाइज़्ड इमेज बफ़र पढ़ता है।Device.cpp.patch — Dawn wire क्लाइंट CC स्प्रे। APICreateBuffer() CCM: लेबल को पार्स करता है, Android arm64 नकली Server पेलोड बनाता है, और N अपूर्ण ChunkedCommands इंजेक्ट करता है जो GPU प्रोसेस में जीवित रहते हैं।ApiProcs.cpp.patch — CVE-2026-5281 ट्रिगर + अधिग्रहण। QueueWriteBuffer मैजिक ऑफ़सेट 0x414141 पर, यह DeviceInfo को मुक्त करने के लिए Unregister(Device) को कॉल करता है, स्लॉट को पुनः प्राप्त करने और info->server = M सेट करने के लिए 16-बाइट ChunkedCommand इंजेक्ट करता है, फिर डैंगलिंग कॉलबैक को सक्रिय करने के लिए आउट-ऑफ़-बाउंड्स ऑफ़सेट के साथ आगे बढ़ता है।exploit.html — पेज ऑर्केस्ट्रेशन: लीक प्रिमिटिव (groom/draw/readCell/verifyRuns/derivePoolBase), CC स्प्रे, और एक स्टैंडअलोन exploit5281() ट्रिगर; विफलता पर यह स्प्रे स्थिति को साफ़ करता है और रीलोड करता है ताकि चरण एक-दूसरे में बाधा न डालें।यह ExP केवल vtable हाईजैक चरण तक प्रकट किया गया है (नियंत्रित इनडायरेक्ट कॉल लक्ष्य, pc = base+0x41414141)। नियंत्रित जंप से आगे के चरण, साथ ही RCE कार्यान्वयन, गोपनीय रखे गए हैं और इस रिपॉज़िटरी में शामिल नहीं हैं।
मेरा शोषण मूल रिपोर्टर के दृष्टिकोण से एक प्रमुख तरीके से भिन्न है। मूल शोषण GPU प्रोसेस में PartitionAlloc स्रोत कोड को संशोधित करके पता रैंडमाइज़ेशन को अक्षम करके प्राप्त किया गया था। यह दृष्टिकोण केवल प्रूफ़-ऑफ़-कॉन्सेप्ट उद्देश्यों के लिए उपयुक्त है। इसके विपरीत, मेरा शोषण पता रैंडमाइज़ेशन को बायपास करने के लिए एक सूचना प्रकटीकरण भेद्यता को जोड़ता है, जिससे एक पूरी तरह कार्यात्मक शोषण सक्षम होता है जो वास्तविक-विश्व वातावरण में काम करता है।
# Set build arguments here. See `gn help buildargs`.
is_official_build = true
is_debug = false
symbol_level = 0
v8_symbol_level = 0
blink_symbol_level = 0
is_component_build = false
proprietary_codecs = true
ffmpeg_branding = "Chrome"
dcheck_always_on =false
optimize_webui = true
android_static_analysis = "off"
target_os = "android"
target_cpu = "arm64"
# Disable PartitionAllocEventuallyZeroFreedMemory
disable_fieldtrial_testing_config = true
treat_warnings_as_errors = false
adb logcat | grep DEBUG निष्पादित करें