Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2019-20326 — GNOME gThumb और Linux Mint Pix में हीप बफ़र ओवरफ़्लो | Kitploit
उपकरण/GitHubGitHub/fysac/cve-2019-20326
स्थैतिक विश्लेषणमेमोरी फोरेंसिकभेद्यता विश्लेषणशोषणफज़िंगबाइनरी शोषण
GitHubfysac/cve-2019-20326

CVE-2019-20326

GNOME gThumb और Linux Mint Pix में हीप बफ़र ओवरफ़्लो

रिपॉजिटरी देखें
136 साल पहलेअभी तक समीक्षित नहीं

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

CVE-2019-20326

GNOME gThumb और Linux Mint Pix, Cairo ग्राफिक्स लाइब्रेरी के साथ कई इमेज फ़ॉर्मेट प्रदर्शित करने के लिए cairo_io मॉड्यूल का उपयोग करते हैं। gThumb संस्करण < 3.8.3 और Pix संस्करण < 2.4.5 में, cairo_io एक JPEG इमेज के माध्यम से हीप बफ़र ओवरफ़्लो के प्रति संवेदनशील है, जिसकी चौड़ाई या ऊँचाई 32767 पिक्सेल से अधिक होती है। यह भेद्यता extensions/cairo_io/cairo-image-surface-jpeg.c के _cairo_image_surface_create_from_jpeg() फ़ंक्शन में मौजूद है।

cairo_io अधिकतम JPEG आयाम 32767 x 32767 (CAIRO_MAX_IMAGE_SIZE) का समर्थन करता है।1 Cairo सतह आवंटित करते समय, चौड़ाई और ऊँचाई दोनों के लिए, _cairo_image_surface_create_from_jpeg() CAIRO_MAX_IMAGE_SIZE और फ़ाइल के SOF0 सेगमेंट में निर्दिष्ट लंबाई के बीच न्यूनतम मान चुनता है। उदाहरण के लिए, यदि एक JPEG फ़ाइल का आकार 40000 x 30000 घोषित करती है, तो केवल 32767 x 30000 पिक्सेल के लिए मान्य ऑब्जेक्ट आवंटित करेगा।

cairo_io
cairo_surface_t

नीचे दिए गए स्निपेट में, srcinfo.output_width और srcinfo.output_height मूल इमेज आयाम हैं, जबकि destination_width और destination_height सीमित आयाम हैं। बाद वाले सतह निर्माण के लिए _cairo_image_surface_create() को पारित किए जाते हैं।2

root@kitploit:~
_cairo_image_surface_transform_get_steps (CAIRO_FORMAT_ARGB32,
						  MIN (srcinfo.output_width, CAIRO_MAX_IMAGE_SIZE),
						  MIN (srcinfo.output_height, CAIRO_MAX_IMAGE_SIZE),
						  orientation,
						  &destination_width,
						  &destination_height,
						  &line_start,
						  &line_step,
						  &pixel_step);
// ...
surface = _cairo_image_surface_create (CAIRO_FORMAT_ARGB32, destination_width, destination_height);

हालाँकि, आवंटित सतह में पिक्सेल डेटा लिखते समय, _cairo_image_surface_create_from_jpeg() उपयुक्त destination_width और destination_height के बजाय JPEG द्वारा निर्दिष्ट मूल आयामों, srcinfo.output_width और srcinfo.output_height, पर पुनरावृत्ति करता है। नीचे दी गई नेस्टेड लूप संरचना cairo-image-surface-jpeg.c के पाँच स्थानों में होती है, जिनमें से प्रत्येक एक अलग प्रकार के कलर स्पेस को संभालता है।3 4 5 6 7

root@kitploit:~
while (srcinfo.output_scanline < srcinfo.output_height) {
	// ...
	for (x = 0; x < srcinfo.output_width; x++) {					
		// ...
		memcpy (p_surface, &pixel, sizeof (guint32));

चूँकि मूल JPEG आयाम सतह के लिए निर्धारित मेमोरी क्षेत्र से बड़े हो सकते हैं, यह असंगति हमलावर-नियंत्रित पिक्सेल डेटा को cairo_surface_t संरचना के data बफ़र की सीमा से परे लिखे जाने का कारण बन सकती है।

प्रूफ ऑफ कॉन्सेप्ट

न्यूनतम टेस्ट केस, poc.min.jpg देखें। यह फ़ाइल 107 बाइट्स की है और 1 x 33000 के आयाम निर्दिष्ट करती है।

AddressSanitizer आउटपुट (gThumb 3.8.2)

root@kitploit:~
$ gthumb ./poc.min.jpg
=================================================================
==20729==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x7f49fdc587fc at pc 0x7f4a12200534 bp 0x7f49fe46e240 sp 0x7f49fe46e230
WRITE of size 4 at 0x7f49fdc587fc thread T5 (pool-gthumb)
    #0 0x7f4a12200533 in _cairo_image_surface_create_from_jpeg ../extensions/cairo_io/cairo-image-surface-jpeg.c:372
    #1 0x55b8e24aad9b in load_image_thread ../gthumb/gth-image-loader.c:241
    #2 0x7f4a1a1a5d21  (/lib/x86_64-linux-gnu/libgio-2.0.so.0+0xb2d21)
    #3 0x7f4a1a34f853  (/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x7b853)
    #4 0x7f4a1a34f110  (/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x7b110)
    #5 0x7f4a19668668 in start_thread /build/glibc-4WA41p/glibc-2.30/nptl/pthread_create.c:479
    #6 0x7f4a19590322 in clone (/lib/x86_64-linux-gnu/libc.so.6+0x122322)

0x7f49fdc587fc is located 0 bytes to the right of 131068-byte region [0x7f49fdc38800,0x7f49fdc587fc)
allocated by thread T5 (pool-gthumb) here:
    #0 0x7f4a1a658ce6 in calloc (/lib/x86_64-linux-gnu/libasan.so.5+0x10dce6)
    #1 0x7f4a18aba5a1  (/lib/x86_64-linux-gnu/libpixman-1.so.0+0x1a5a1)

Thread T5 (pool-gthumb) created by T0 here:
    #0 0x7f4a1a585805 in pthread_create (/lib/x86_64-linux-gnu/libasan.so.5+0x3a805)
    #1 0x7f4a1a371a16  (/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x9da16)

SUMMARY: AddressSanitizer: heap-buffer-overflow ../extensions/cairo_io/cairo-image-surface-jpeg.c:372 in _cairo_image_surface_create_from_jpeg
Shadow bytes around the buggy address:
  0x0fe9bfb830a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0fe9bfb830b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0fe9bfb830c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0fe9bfb830d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0fe9bfb830e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
=>0x0fe9bfb830f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00[04]
  0x0fe9bfb83100: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0fe9bfb83110: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0fe9bfb83120: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0fe9bfb83130: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0fe9bfb83140: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07 
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
  Shadow gap:              cc
==20729==ABORTING

संदर्भ

1 https://github.com/GNOME/gthumb/blob/0c0f0300d54d050ca87d23de4c734c24f37e8958/gthumb/cairo-utils.h#L32

2 https://github.com/GNOME/gthumb/blob/0c0f0300d54d050ca87d23de4c734c24f37e8958/extensions/cairo_io/cairo-image-surface-jpeg.c#L266

3 https://github.com/GNOME/gthumb/blob/0c0f0300d54d050ca87d23de4c734c24f37e8958/extensions/cairo_io/cairo-image-surface-jpeg.c#L307

4 https://github.com/GNOME/gthumb/blob/0c0f0300d54d050ca87d23de4c734c24f37e8958/extensions/cairo_io/cairo-image-surface-jpeg.c#L355

5 https://github.com/GNOME/gthumb/blob/0c0f0300d54d050ca87d23de4c734c24f37e8958/extensions/cairo_io/cairo-image-surface-jpeg.c#L387

6 https://github.com/GNOME/gthumb/blob/0c0f0300d54d050ca87d23de4c734c24f37e8958/extensions/cairo_io/cairo-image-surface-jpeg.c#L434

7 https://github.com/GNOME/gthumb/blob/0c0f0300d54d050ca87d23de4c734c24f37e8958/extensions/cairo_io/cairo-image-surface-jpeg.c#L489

टूल डाउनलोड करें