|
Message-ID: <CACn5sdQfCJjYaEQp0N5ZU+ZKc6g=FJjCYz2GPijSY+ZTpG0vxA@mail.gmail.com> Date: Mon, 5 Oct 2015 08:10:39 -0300 From: Gustavo Grieco <gustavo.grieco@...il.com> To: oss-security@...ts.openwall.com Subject: Re: CVE request: Heap overflow and DoS with a tga file in gdk-pixbuf < 2.32.1 2015-10-05 7:18 GMT-03:00 Andreas Stieger <astieger@...e.com>: > Hello, > > On 10/01/2015 04:56 PM, Gustavo Grieco wrote: > > Do you also need a crasher and a stack trace? > > Could you make them available please? > Sure! Please find attached the two test cases as well as a minimal example of a vulnerable program: it is just a call to gdk_pixbuf_new_from_file_at_size. Also, a detailed backtrace of the heap overflow is here: Starting program: pixbuf_vuln_poc overflow.tga Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". Program received signal SIGSEGV, Segmentation fault. scale_line (weights=weights@...ry=0x2aab3c468c10, n_x=148, n_y=148, dest=dest@...ry=0x630ee0 "", dest_x=dest_x@...ry=0, dest_end=dest_end@...ry=0x631144 "", dest_channels=dest_channels@...ry=4, dest_has_alpha=dest_has_alpha@...ry=1, src=src@...ry=0x63ce60, src_channels=src_channels@...ry=4, src_has_alpha=src_has_alpha@...ry=1, x_init=<optimized out>, x_step=x_step@...ry=9629110, src_width=src_width@...ry=22627, check_size=check_size@...ry=0, color1=color1@...ry=0, color2=color2@...ry=0) at pixops.c:974 974 (gdb) bt #0 scale_line (weights=weights@...ry=0x2aab3c468c10, n_x=148, n_y=148, dest=dest@...ry=0x630ee0 "", dest_x=dest_x@...ry=0, dest_end=dest_end@...ry=0x631144 "", dest_channels=dest_channels@...ry=4, dest_has_alpha=dest_has_alpha@...ry=1, src=src@...ry=0x63ce60, src_channels=src_channels@...ry=4, src_has_alpha=src_has_alpha@...ry=1, x_init=<optimized out>, x_step=x_step@...ry=9629110, src_width=src_width@...ry=22627, check_size=check_size@...ry=0, color1=color1@...ry=0, color2=color2@...ry=0) at pixops.c:974 #1 0x00002aaaaace5698 in pixops_process (dest_buf=<optimized out>, render_x0=0, render_y0=<optimized out>, render_x1=<optimized out>, render_y1=<optimized out>, dest_rowstride=<optimized out>, dest_channels=4, dest_has_alpha=1, src_buf=0x2aaaad14f010 "", src_width=22627, src_height=26435, src_rowstride=90508, src_channels=4, src_has_alpha=1, scale_x=<optimized out>, scale_y=<optimized out>, check_x=0, check_y=0, check_size=0, color1=0, color2=0, filter=0x7ffffffedc90, line_func=0x2aaaaace3c10 <scale_line>, pixel_func=0x2aaaaace49a0 <scale_pixel>) at pixops.c:1366 #2 0x00002aaaaace5f09 in _pixops_scale_real (interp_type=PIXOPS_INTERP_BILINEAR, interp_type@...ry =PIXOPS_INTERP_NEAREST, scale_y=0,0068091545299791946, scale_x=0,0068060281964025283, src_has_alpha=1, src_channels=4, src_rowstride=90508, src_height=26435, src_width=22627, src_buf=0x2aaaad14f010 "", dest_has_alpha=1, dest_channels=4, dest_rowstride=616, render_y1=<optimized out>, render_x1=154, render_y0=<optimized out>, render_x0=0, dest_buf=<optimized out>) at pixops.c:2230 #3 _pixops_scale (dest_buf=<optimized out>, dest_width=dest_width@...ry=154, dest_height=dest_height@...ry=180, dest_rowstride=616, dest_channels=4, dest_has_alpha=1, src_buf=0x2aaaad14f010 "", src_width=22627, src_height=26435, src_rowstride=90508, src_channels=4, src_has_alpha=1, dest_x=dest_x@...ry=0, dest_y=dest_y@...ry=0, dest_region_width=dest_region_width@...ry=154, dest_region_height=dest_region_height@...ry=180, offset_x=offset_x@...ry=0, offset_y=<optimized out>, scale_x=scale_x@...ry=0,0068060281964025283, scale_y=scale_y@...ry =0,0068091545299791946, interp_type=interp_type@...ry=PIXOPS_INTERP_BILINEAR) at pixops.c:2285 #4 0x00002aaaaacdda2d in gdk_pixbuf_scale (src=0x618000, dest=0x618050, dest_x=0, dest_y=0, dest_width=154, dest_height=180, offset_x=0, offset_y=<optimized out>, scale_x=0,0068060281964025283, scale_y=0,0068091545299791946, interp_type=GDK_INTERP_BILINEAR) at gdk-pixbuf-scale.c:147 #5 0x00002aaaaacde07a in gdk_pixbuf_scale_simple (src=src@...ry=0x618000, dest_width=154, dest_height=dest_height@...ry=180, interp_type=interp_type@...ry=GDK_INTERP_BILINEAR) at gdk-pixbuf-scale.c:321 #6 0x00002aaaaacdf340 in get_scaled_pixbuf (scaled=0x616440, pixbuf=0x618000) at gdk-pixbuf-scaled-anim.c:138 #7 0x00002aaaaacdae88 in gdk_pixbuf_new_from_file_at_scale (filename=0x7fffffffe36b "overflow.tga", width=<optimized out>, height=<optimized out>, preserve_aspect_ratio=<optimized out>, error=0x7fffffffdee0) at gdk-pixbuf-io.c:1377 #8 0x00000000004007b8 in main () (gdb) x/i $rip => 0x2aaaaace3dd0 <scale_line+448>: movzbl 0x3(%rcx),%edx (gdb) info registers rax 0x0 0 rbx 0x94 148 rcx 0x2aaa2d6d51c4 46910394945988 rdx 0x0 0 rsi 0x4 4 rdi 0x2aab3c468c10 46914939030544 rbp 0x2aab3c468e60 0x2aab3c468e60 rsp 0x7ffffffeda18 0x7ffffffeda18 r8 0x0 0 r9 0x0 0 r10 0x0 0 r11 0x0 0 r12 0x0 0 r13 0x63ce60 6540896 r14 0x2aab3c468c10 46914939030544 r15 0x94 148 rip 0x2aaaaace3dd0 0x2aaaaace3dd0 <scale_line+448> eflags 0x10202 [ IF RF ] cs 0x33 51 ss 0x2b 43 ds 0x0 0 es 0x0 0 fs 0x0 0 gs 0x0 0 And the backtrace of the DoS here: Starting program: pixbuf_vuln_poc DoS.tga [Depuración de hilo usando libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". Program received signal SIGSEGV, Segmentation fault. 0x00002aaaacf4c384 in parse_data_for_row_pseudocolor (ctx=0x614ca0) at io-tga.c:367 367 (gdb) bt #0 0x00002aaaacf4c384 in parse_data_for_row_pseudocolor (ctx=0x614ca0) at io-tga.c:367 #1 parse_data_for_row (err=0x7ffffffede28, ctx=0x614ca0) at io-tga.c:413 #2 gdk_pixbuf__tga_load_increment (data=0x614ca0, buffer=<optimized out>, size=<optimized out>, err=0x7ffffffede28) at io-tga.c:922 #3 0x00002aaaaacdca45 in gdk_pixbuf_loader_load_module (loader=loader@...ry=0x60f200, image_type=image_type@...ry=0x0, error=error@...ry=0x7ffffffede28) at gdk-pixbuf-loader.c:445 #4 0x00002aaaaacdd2b8 in gdk_pixbuf_loader_close (loader=loader@...ry=0x60f200, error=error@...ry=0x7fffffffdef0) at gdk-pixbuf-loader.c:810 #5 0x00002aaaaacdae2a in gdk_pixbuf_new_from_file_at_scale (filename=0x7fffffffe370 "DoS.tga", width=<optimized out>, height=<optimized out>, preserve_aspect_ratio=<optimized out>, error=0x7fffffffdef0) at gdk-pixbuf-io.c:1372 #6 0x00000000004007b8 in main () (gdb) x/i $rip => 0x2aaaacf4c384 <gdk_pixbuf__tga_load_increment+612>: mov 0x8(%rdx),%rdx (gdb) info registers rax 0x6163e0 6382560 rbx 0x614ca0 6376608 rcx 0x7 7 rdx 0x0 0 rsi 0x611b02 6363906 rdi 0x618000 6389760 rbp 0x7ffffffede28 0x7ffffffede28 rsp 0x7ffffffedd80 0x7ffffffedd80 r8 0x616200 6382080 r9 0x6163e7 6382567 r10 0x8 8 r11 0x2aaaaaf05c10 46912500685840 r12 0x0 0 r13 0x0 0 r14 0x15 21 r15 0xb 11 rip 0x2aaaacf4c384 0x2aaaacf4c384 <gdk_pixbuf__tga_load_increment+612> eflags 0x10202 [ IF RF ] cs 0x33 51 ss 0x2b 43 ds 0x0 0 es 0x0 0 fs 0x0 0 gs 0x0 0 > > Thanks, > Andreas > > -- > Andreas Stieger <astieger@...e.com> > Project Manager Security > SUSE Linux GmbH, GF: Felix Imendörffer, Jane Smithard, Graham Norton, HRB > 21284 (AG Nürnberg) > > > Content of type "text/html" skipped Download attachment "overflow.tga.gz" of type "application/x-gzip" (105 bytes) Download attachment "DoS.tga.gz" of type "application/x-gzip" (60 bytes) View attachment "pixbuf_vuln_poc.c" of type "text/x-csrc" (397 bytes)
Powered by blists - more mailing lists
Please check out the Open Source Software Security Wiki, which is counterpart to this mailing list.
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.