From cfad7dd31711c4784996b4edbf2fc423d7baa3f9 Mon Sep 17 00:00:00 2001 From: topjohnwu Date: Sun, 1 Sep 2019 14:16:12 +0800 Subject: [PATCH] Sanitize magiskhide targets Fix #1785 --- native/jni/magiskhide/hide_utils.cpp | 22 ++++++++++++++++++++++ native/jni/magiskhide/magiskhide.cpp | 5 +++-- native/jni/magiskhide/magiskhide.h | 3 ++- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/native/jni/magiskhide/hide_utils.cpp b/native/jni/magiskhide/hide_utils.cpp index 6115dbfff..8366dddf7 100644 --- a/native/jni/magiskhide/hide_utils.cpp +++ b/native/jni/magiskhide/hide_utils.cpp @@ -57,10 +57,32 @@ static void kill_process(const char *name, bool multi = false) { }); } +static bool validate(const char *s) { + bool dot = false; + for (char c; (c = *s); ++s) { + if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || + (c >= '0' && c <= '9') || c == '_') { + dot = false; + continue; + } + if (c == '.') { + if (dot) // No consecutive dots + return false; + dot = true; + continue; + } + return false; + } + return true; +} + static int add_list(const char *pkg, const char *proc = "") { if (proc[0] == '\0') proc = pkg; + if (!validate(pkg) || !validate(proc)) + return HIDE_INVALID_PKG; + for (auto &hide : hide_set) if (hide.first == pkg && hide.second == proc) return HIDE_ITEM_EXIST; diff --git a/native/jni/magiskhide/magiskhide.cpp b/native/jni/magiskhide/magiskhide.cpp index a8194c647..5c2ea2615 100644 --- a/native/jni/magiskhide/magiskhide.cpp +++ b/native/jni/magiskhide/magiskhide.cpp @@ -147,8 +147,9 @@ int magiskhide_main(int argc, char *argv[]) { case HIDE_NO_NS: fprintf(stderr, "Your kernel doesn't support mount namespace\n"); break; - - /* Errors */ + case HIDE_INVALID_PKG: + fprintf(stderr, "Invalid package / process name\n"); + break; case ROOT_REQUIRED: fprintf(stderr, "Root is required for this operation\n"); break; diff --git a/native/jni/magiskhide/magiskhide.h b/native/jni/magiskhide/magiskhide.h index d271861d5..aeb87c380 100644 --- a/native/jni/magiskhide/magiskhide.h +++ b/native/jni/magiskhide/magiskhide.h @@ -58,5 +58,6 @@ enum { HIDE_NOT_ENABLED, HIDE_ITEM_EXIST, HIDE_ITEM_NOT_EXIST, - HIDE_NO_NS + HIDE_NO_NS, + HIDE_INVALID_PKG };