about summary refs log tree commit diff
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2017-06-19 18:33:26 +0200
committerFlorian Weimer <fweimer@redhat.com>2017-06-19 18:33:26 +0200
commit87bd4186da10371f46e2f1a7bf7c0a45bb04f1ac (patch)
tree01feac430471cad6e78d157333c518d61256dc8d
parent600b10a8714d334c091afc0deedd35bca7370bfc (diff)
downloadglibc-87bd4186da10371f46e2f1a7bf7c0a45bb04f1ac.tar.gz
glibc-87bd4186da10371f46e2f1a7bf7c0a45bb04f1ac.tar.xz
glibc-87bd4186da10371f46e2f1a7bf7c0a45bb04f1ac.zip
CVE-2017-1000366: Ignore LD_LIBRARY_PATH for AT_SECURE=1 programs [BZ #21624]
LD_LIBRARY_PATH can only be used to reorder system search paths, which
is not useful functionality.

This makes an exploitable unbounded alloca in _dl_init_paths unreachable
for AT_SECURE=1 programs.

(cherry picked from commit f6110a8fee2ca36f8e2d2abecf3cba9fa7b8ea7d)
-rw-r--r--ChangeLog7
-rw-r--r--NEWS1
-rw-r--r--elf/rtld.c3
3 files changed, 10 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 1795e284ef..e37f14f02a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2017-06-19  Florian Weimer  <fweimer@redhat.com>
+
+	[BZ #21624]
+	CVE-2017-1000366
+	* elf/rtld.c (process_envvars): Ignore LD_LIBRARY_PATH for
+	__libc_enable_secure.
+
 2017-02-01  Andreas Schwab  <schwab@linux-m68k.org>
 
 	* sysdeps/m68k/m680x0/m68020/atomic-machine.h
diff --git a/NEWS b/NEWS
index 82a718ff64..d42af91972 100644
--- a/NEWS
+++ b/NEWS
@@ -25,6 +25,7 @@ The following bugs are resolved with this release:
 
   [21289] Fix symbol redirect for fts_set
   [21386] Assertion in fork for distinct parent PID is incorrect
+  [21624] Unsafe alloca allows local attackers to alias stack and heap (CVE-2017-1000366)
 
 Version 2.24
 
diff --git a/elf/rtld.c b/elf/rtld.c
index 647661ca45..215a9aec8f 100644
--- a/elf/rtld.c
+++ b/elf/rtld.c
@@ -2437,7 +2437,8 @@ process_envvars (enum mode *modep)
 
 	case 12:
 	  /* The library search path.  */
-	  if (memcmp (envline, "LIBRARY_PATH", 12) == 0)
+	  if (!__libc_enable_secure
+	      && memcmp (envline, "LIBRARY_PATH", 12) == 0)
 	    {
 	      library_path = &envline[13];
 	      break;