In the add_match function in libbb/lineedit.c in BusyBox through 1.27.2,
the tab autocomplete feature of the shell, used to get a list of filenames
in a directory, does not sanitize filenames and results in executing any
escape sequence in the terminal. This could potentially result in code
execution, arbitrary file writes, or other attacks.

Backport the patch from:
https://git.busybox.net/busybox/commit/?id=c3797d40a1c57352192c6106cc0f435e7d9c11e8
https://nvd.nist.gov/vuln/detail/CVE-2017-16544

Signed-off-by: Zhixiong Chi <[email protected]>
---
 .../busybox/busybox/busybox-CVE-2017-16544.patch   | 42 ++++++++++++++++++++++
 meta/recipes-core/busybox/busybox_1.27.2.bb        |  1 +
 2 files changed, 43 insertions(+)
 create mode 100644 
meta/recipes-core/busybox/busybox/busybox-CVE-2017-16544.patch

diff --git a/meta/recipes-core/busybox/busybox/busybox-CVE-2017-16544.patch 
b/meta/recipes-core/busybox/busybox/busybox-CVE-2017-16544.patch
new file mode 100644
index 0000000000..489bf71573
--- /dev/null
+++ b/meta/recipes-core/busybox/busybox/busybox-CVE-2017-16544.patch
@@ -0,0 +1,42 @@
+From c3797d40a1c57352192c6106cc0f435e7d9c11e8 Mon Sep 17 00:00:00 2001
+From: Denys Vlasenko <[email protected]>
+Date: Tue, 7 Nov 2017 18:09:29 +0100
+Subject: lineedit: do not tab-complete any strings which have control
+ characters
+
+function                                             old     new   delta
+add_match                                             41      68     +27
+
+Upstream-Status: Backport
+
+Signed-off-by: Denys Vlasenko <[email protected]>
+Signed-off-by: Zhixiong Chi <[email protected]>
+---
+ libbb/lineedit.c | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+diff --git a/libbb/lineedit.c b/libbb/lineedit.c
+index c0e35bb..56e8140 100644
+--- a/libbb/lineedit.c
++++ b/libbb/lineedit.c
+@@ -645,6 +645,18 @@ static void free_tab_completion_data(void)
+ 
+ static void add_match(char *matched)
+ {
++      unsigned char *p = (unsigned char*)matched;
++      while (*p) {
++              /* ESC attack fix: drop any string with control chars */
++              if (*p < ' '
++               || (!ENABLE_UNICODE_SUPPORT && *p >= 0x7f)
++               || (ENABLE_UNICODE_SUPPORT && *p == 0x7f)
++              ) {
++                      free(matched);
++                      return;
++              }
++              p++;
++      }
+       matches = xrealloc_vector(matches, 4, num_matches);
+       matches[num_matches] = matched;
+       num_matches++;
+-- 
+cgit v0.12
diff --git a/meta/recipes-core/busybox/busybox_1.27.2.bb 
b/meta/recipes-core/busybox/busybox_1.27.2.bb
index 575127ec42..6c1f4888cf 100644
--- a/meta/recipes-core/busybox/busybox_1.27.2.bb
+++ b/meta/recipes-core/busybox/busybox_1.27.2.bb
@@ -43,6 +43,7 @@ SRC_URI = 
"http://www.busybox.net/downloads/busybox-${PV}.tar.bz2;name=tarball \
            file://runlevel \
            file://makefile-libbb-race.patch \
            file://CVE-2011-5325.patch \
+           file://busybox-CVE-2017-16544.patch \
 "
 SRC_URI_append_libc-musl = " file://musl.cfg "
 
-- 
2.11.0

-- 
_______________________________________________
Openembedded-core mailing list
[email protected]
http://lists.openembedded.org/mailman/listinfo/openembedded-core

Reply via email to