
CVE-2026-5201: gdk-pixbuf JPEG लोडर में हीप-आधारित बफर ओवरफ्लो (CWE-122, CVSS 7.5)
gdk-pixbuf JPEG लोडर में हीप-आधारित बफर अतिप्रवाह
नमस्ते, मैं Kağan Çapar हूँ। मैंने gdk-pixbuf के JPEG छवि लोडर में एक हीप-आधारित बफर अतिप्रवाह भेद्यता की खोज की है जो व्यावहारिक रूप से सभी लिनक्स डेस्कटॉप वातावरणों को प्रभावित करती है। इस भेद्यता को CVE-2026-5201 निर्दिष्ट किया गया और Red Hat द्वारा 7.5 (महत्वपूर्ण) के CVSS स्कोर के साथ स्वीकार किया गया।
इस रिपॉजिटरी में मेरा पूर्ण विश्लेषण, मेरे द्वारा शुरू से लिखा गया एक पुनरुत्पादक, और एक लाइव Ubuntu 24.04 LTS सिस्टम से क्रैश साक्ष्य शामिल है।
| CVE | CVE-2026-5201 |
| CWE | CWE-122 — हीप-आधारित बफर अतिप्रवाह |
| CVSS v3 | 7.5 (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H) |
| प्रभावित | gdk-pixbuf (सुधार से पहले के सभी संस्करण) |
| विक्रेता | GNOME |
| सुधार | gdk-pixbuf@6cce931 |
| ट्रैकर | GNOME #304 |
| Bugzilla | Red Hat #2453291 |
मैंने gdk-pixbuf के JPEG छवि लोडर (io-jpeg.c) में एक हीप-आधारित बफर अतिप्रवाह पाया। प्रत्यक्ष फ़ाइल लोडिंग पथ (gdk_pixbuf__jpeg_image_load) पिक्सेल बफर आवंटित करने से पहले रंग घटकों की संख्या को मान्य नहीं करता है। SOF हेडर में 9 घटकों के साथ एक विशेष रूप से तैयार किया गया 122-बाइट JPEG परंतु SOS में केवल 3 स्कैन किए गए, जिससे gdk-pixbuf 3 चैनलों के लिए एक बफर आवंटित करता है जबकि libjpeg प्रति पिक्सेल 9 चैनल लिखता है — जिसके परिणामस्वरूप ~49 KB तक के हमलावर-नियंत्रित डेटा का हीप अतिप्रवाह होता है।
इंक्रीमेंटल लोडर पथ में पहले से ही यह सटीक मान्यता थी, लेकिन यह प्रत्यक्ष लोडिंग पथ से गायब थी।
gdk_pixbuf_new_from_file() का उपयोग करने वाले किसी भी अनुप्रयोग पर 100% विश्वसनीय क्रैशg_class) पिक्सेल डेटा से अधिलेखितgdk-pixbuf/io-jpeg.c में, फ़ंक्शन gdk_pixbuf__jpeg_image_load():
1. कम आकार का आवंटन (पंक्ति 633):
pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB,
cinfo->out_color_components == 4 ? TRUE : FALSE,
8, cinfo->output_width, cinfo->output_height);
2. अधिक आकार की लिखाई (पंक्ति 696):
jpeg_read_scanlines(cinfo, lines, cinfo->rec_outbuf_height);
// प्रति पिक्सेल output_components (9) बाइट्स को 3-बाइट बफर में लिखता है
3. मान्यता का अभाव — इंक्रीमेंटल लोडर पहले से पंक्ति 1142 पर output_components की जाँच करता है, लेकिन यह जाँच प्रत्यक्ष पथ से अनुपस्थित थी।
python3 reproducer/craft_cve_2026_5201.py
यह SOF10 हेडर में 9 घटकों और SOS में केवल 3 स्कैन किए गए एक 122-बाइट JPEG फ़ाइल बनाता है।
# संकलन
gcc -o crash_test reproducer/crash_test.c \
$(pkg-config --cflags --libs gdk-pixbuf-2.0) -fsanitize=address -g
# चलाएं
./crash_test cve_2026_5201.jpg
==PID==ERROR: AddressSanitizer: SEGV on unknown address 0x52b000020006
==PID==The signal is caused by a WRITE memory access.
#0 libjpeg.so.8 (null_convert)
#1 libjpeg.so.8 (sep_upsample)
#2 libjpeg.so.8 (process_data_context_main)
#3 libjpeg.so.8 jpeg_read_scanlines
#4 libgdk_pixbuf-2.0.so.0 (JPEG loader)
#5 libgdk_pixbuf-2.0.so.0 gdk_pixbuf_new_from_file
Program received signal SIGSEGV, Segmentation fault.
g_type_check_instance_is_fundamentally_a ()
→ g_object_unref()
→ gdk_pixbuf_new_from_file()
rax = 0x808080808080ffff ← दूषित GObject vtable पॉइंटर
सुधार में वही output_components मान्यता जोड़ी गई है जो पहले से इंक्रीमेंटल लोडर में मौजूद है:
jpeg_start_decompress(cinfo);
if (cinfo->output_components != 3 && cinfo->output_components != 4 &&
!(cinfo->output_components == 1 &&
cinfo->out_color_space == JCS_GRAYSCALE)) {
g_set_error(error, GDK_PIXBUF_ERROR, GDK_PIXBUF_ERROR_CORRUPT_IMAGE,
"Unsupported number of color components (%d)",
cinfo->output_components);
goto out;
}
gdk-pixbuf@6cce931 में लागू किया गया।
| OS | Ubuntu 24.04.1 LTS |
| gdk-pixbuf | 2.42.10+dfsg-3ubuntu3.2 |
| libjpeg | libjpeg-turbo 2.1.5 (libjpeg.so.8.2.2) |
| GCC | 13.3.0 |
CVE-2017-2862 (Cisco Talos TALOS-2017-0366) — CVSS 8.8 — gdk-pixbuf में वही null_convert बफर बेमेल बग वर्ग, जिसे दूरस्थ कोड निष्पादन के रूप में वर्गीकृत किया गया।
Kağan Çapar — GitHub · LinkedIn · X
Red Hat द्वारा CVE-2026-5201 सलाहकार में स्वीकार किया गया।
| उत्पाद | घटक | स्थिति |
|---|
| Red Hat Enterprise Linux 10 | gdk-pixbuf2 | प्रभावित |
| Red Hat Enterprise Linux 10 | loupe | प्रभावित |
| Red Hat Enterprise Linux 10 | snapshot | प्रभावित |
| Red Hat Enterprise Linux 9 | gdk-pixbuf2 | प्रभावित |
| Red Hat Enterprise Linux 8 | gdk-pixbuf2 | प्रभावित |
| Red Hat Enterprise Linux 7 | gdk-pixbuf2 | प्रभावित |