
| विशेषता | विवरण |
|---|---|
| CVE ID | CVE-2025-66628 |
| विक्रेता | ImageMagick Studio LLC |
| उत्पाद | ImageMagick |
| प्रभावित संस्करण | < 7.1.2-10 |
| सुधारित संस्करण | 7.1.2-10 |
| भेद्यता प्रकार | CWE-190 (पूर्णांक अतिप्रवाह) |
| CVSS v3.1 स्कोर | 7.5 (उच्च) |
| CVSS वेक्टर | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N |
| शोधकर्ता | Sumit Shah |
ImageMagick के coders/tim.c में ReadTIMImage फ़ंक्शन में एक पूर्णांक अतिप्रवाह भेद्यता मौजूद है। 32-बिट सिस्टम पर TIM (प्लेस्टेशन) इमेज फ़ाइलों को संसाधित करते समय, उपयोगकर्ता-नियंत्रित चौड़ाई और ऊँचाई मानों का अनियंत्रित गुणन मेमोरी अल्प-आवंटन का कारण बनता है, जिससे पिक्सेल प्रोसेसिंग के दौरान आउट-ऑफ-बाउंड रीड होती हैं।
भेद्य तर्क coders/tim.c में स्थित है:
/* coders/tim.c - TIM Image Parser */
// User-controlled input from TIM file header
width = ReadBlobLSBShort(image); // 2 bytes (0-65535)
height = ReadBlobLSBShort(image); // 2 bytes (0-65535)
// VULNERABLE: Integer overflow on 32-bit systems
image_size = 2 * width * height; // No overflow check
// Memory allocated with truncated size
pixels = (unsigned char *) AcquireQuantumMemory(image_size, sizeof(*pixels));
// Loop processes FULL dimensions, reading beyond buffer
for (y = 0; y < height; y++) {
for (x = 0; x < width; x++) {
pixel_index = (y * width + x) * 2;
pixels[pixel_index] = ReadBlobByte(image);
pixels[pixel_index + 1] = ReadBlobByte(image);
}
}
32-बिट आर्किटेक्चर पर, size_t 32 बिट्स तक सीमित होता है, जिसका अधिकतम मान UINT_MAX = 4,294,967,295 होता है।
जब चौड़ाई और ऊँचाई दोनों अधिकतम 16-बिट अहस्ताक्षरित मानों पर सेट हों:
width = 65535 (0xFFFF)
height = 65535 (0xFFFF)
Expected calculation:
2 × 65535 × 65535 = 8,589,869,050 bytes (~8.5 GB)
Actual result (32-bit wraparound):
8,589,869,050 % 4,294,967,296 = 4,294,901,754
Result after truncation: Small allocated buffer
अतिप्रवाह के कारण मेमोरी आवंटक आवश्यकता से काफी छोटा बफर आरक्षित करता है, जबकि प्रोसेसिंग लूप अभी भी पूरे 65535 × 65535 पिक्सेल ग्रिड पर पुनरावृत्ति करता है, जिसके परिणामस्वरूप आउट-ऑफ-बाउंड रीड होती हैं।
चरण 1: हमलावर ऐसी TIM फ़ाइल तैयार करता है जिसके आयाम अतिप्रवाह का कारण बनते हैं
[Magic: 0x10]
[Type: 0x02]
[Width: 0xFFFF] # 65535
[Height: 0xFFFF] # 65535
[Pixel Data...]
चरण 2: पीड़ित दुर्भावनापूर्ण फ़ाइल को संसाधित करता है
convert malicious.tim output.png
चरण 3: आउट-ऑफ-बाउंड रीड होती है, जिससे:
32-बिट सिस्टम जहाँ size_t 32-बिट है। 64-बिट सिस्टम प्रभावित नहीं होते, क्योंकि परिकलित आकार को अतिप्रवाह के बिना दर्शाने के लिए पर्याप्त पूर्णांक चौड़ाई उपलब्ध होती है।
सूचना प्रकटीकरण (प्राथमिक): आउट-ऑफ-बाउंड एक्सेस के दौरान ImageMagick प्रक्रिया की हीप मेमोरी पढ़ी जा सकती है। इस मेमोरी में निम्न शामिल हो सकते हैं:
लीक हुआ डेटा परिवर्तित आउटपुट इमेज में एम्बेड किया जा सकता है या साइड-चैनल विश्लेषण के माध्यम से निकाला जा सकता है।
सेवा से वंचित करना (द्वितीयक):
अनमैप्ड मेमोरी क्षेत्रों को पढ़ने से SIGSEGV ट्रिगर होता है, जिससे ImageMagick प्रक्रिया समाप्त हो जाती है और स्वचालित इमेज प्रोसेसिंग पाइपलाइनों में सेवा व्यवधान उत्पन्न होता है।
सत्यापन उद्देश्यों के लिए तकनीकी विवरण प्रदान किए जाते हैं। कोई निष्पादन योग्य एक्सप्लॉइट कोड वितरित नहीं किया जाता है।
convert, magick, या किसी भी ImageMagick API कॉल के माध्यम से प्रोसेसिंग$ convert malicious.tim output.png
Segmentation fault (core dumped)
या लीक हुए हीप डेटा के आउटपुट में एम्बेड होने के साथ सफल रूपांतरण।
$ convert malicious.tim output.png
convert: Memory allocation failed `malicious.tim' @ error/tim.c/ReadTIMImage/XXX.
ImageMagick को संस्करण 7.1.2-10 या उसके बाद के संस्करण में अपडेट करें:
# Verify current version
convert --version
# Update using package manager
apt update && apt upgrade imagemagick # Debian/Ubuntu
yum update imagemagick # RHEL/CentOS
brew upgrade imagemagick # macOS
अंकगणितीय संचालन से पहले अतिप्रवाह जाँच लागू करें:
// Insecure
image_size = 2 * width * height;
// Secure
if (height != 0 && width > (SIZE_MAX / 2) / height) {
ThrowReaderException(ResourceLimitError, "MemoryAllocationFailed");
}
image_size = 2 * width * height;
गणना करने से पहले आयाम मानों पर इनपुट सत्यापन और सैनिटी सीमाएँ लागू करें।
इस भेद्यता की पहचान वैरिएंट विश्लेषण का उपयोग करके की गई थी। ImageMagick के BMP डिकोडर में समान पूर्णांक अतिप्रवाह के प्रकटीकरण के बाद, लिगेसी प्रारूप पार्सर्स की व्यवस्थित समीक्षा की गई। अनियंत्रित width * height गणनाओं के लिए पैटर्न मिलान से TIM पार्सर में उसी दोष की पहचान हुई।
लिगेसी इमेज प्रारूप डिकोडर (TIM, SGI, VIFF, आदि) सुरक्षा ऑडिट की कम आवृत्ति और असुरक्षित C अंकगणित पर निर्भरता के कारण उच्च-मूल्य वाले लक्ष्यों का प्रतिनिधित्व करते हैं।
इस भेद्यता की सूचना GitHub सुरक्षा सलाह (Security Advisories) के माध्यम से ImageMagick अनुरक्षकों को निजी रूप से दी गई थी। सार्वजनिक प्रकटीकरण केवल पैच उपलब्ध होने और CVE आवंटन के बाद हुआ। यह शोध जिम्मेदार प्रकटीकरण सिद्धांतों के तहत नैतिक रूप से किया गया था।
SUMIT SHAH
शोधकर्ता: SUMIT SHAH