
| السمة | التفاصيل |
|---|---|
| معرف CVE | 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 |
توجد ثغرة تجاوز عدد صحيح في الدالة ReadTIMImage داخل coders/tim.c الخاصة بـ ImageMagick. عند معالجة ملفات صور TIM (PlayStation) على أنظمة 32-بت، يؤدي الضرب غير المُختبر لقيمتي العرض والارتفاع المتحكم فيهما من قبل المستخدم إلى نقص في تخصيص الذاكرة، مما يؤدي إلى قراءات خارج النطاق أثناء معالجة البكسلات.
تقع المنطقية القابلة للاستغلال في 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)
الحساب المتوقع:
2 × 65535 × 65535 = 8,589,869,050 بايت (~8.5 جيجابايت)
النتيجة الفعلية (التفاف 32-بت):
8,589,869,050 % 4,294,967,296 = 4,294,901,754
النتيجة بعد الاقتطاع: مخزن مؤقت صغير مخصص
يؤدي التجاوز إلى جعل مُخصص الذاكرة يحجز مخزنًا مؤقتًا أصغر بكثير من المطلوب، بينما تستمر حلقة المعالجة في التكرار على كامل شبكة البكسلات 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$ 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;
طبّق التحقق من صحة المدخلات وحدود منطقية على قيم الأبعاد قبل إجراء الحسابات.
تم تحديد هذه الثغرة باستخدام تحليل المتغيرات. بعد الإفصاح عن تجاوز عدد صحيح مشابه في مفكك BMP الخاص بـ ImageMagick، تم إجراء مراجعة منهجية لمحللات تنسيقات الملفات القديمة. قادت مطابقة الأنماط لحسابات width * height غير المُختبرة إلى تحديد نفس الخلل في محلل TIM.
تمثل محللات تنسيقات الصور القديمة (TIM و SGI و VIFF وغيرها) أهدافًا عالية القيمة بسبب ندرة عمليات التدقيق الأمني والاعتماد على حسابات C غير الآمنة.
تم الإبلاغ عن هذه الثغرة بشكل خاص إلى القائمين على صيانة ImageMagick عبر استشارات أمان GitHub. حدث الإفصاح العام فقط بعد توفر التصحيح وتعيين CVE. أُجري هذا البحث بشكل أخلاقي وفق مبادئ الإفصاح المسؤول.
SUMIT SHAH
الباحث: SUMIT SHAH