diff options
| author | 2017-03-09 19:26:52 +0000 | |
|---|---|---|
| committer | 2017-03-09 19:26:52 +0000 | |
| commit | 903102fa54aaa20d3969f90426512d09adb69f09 (patch) | |
| tree | a7bb3ec2910d8ecf2e634806540d1aa90c545b02 | |
| parent | 7c6b2f4d8bbebbe517675b3aa666d09186ad14c1 (diff) | |
| parent | fe430be9f102893c95258cc81589df132b7d02b3 (diff) | |
[DO NOT MERGE] Don't allow permission change to runtime
am: fe430be9f1
Change-Id: I7c41e88f49738d927a5c0233b9702b36d2ca7282
| -rw-r--r-- | services/core/java/com/android/server/pm/PackageManagerService.java | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index f326555ee00a..df9923e993e9 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -14964,6 +14964,20 @@ public class PackageManagerService extends IPackageManager.Stub { + perm.info.name + "; ignoring new declaration"); pkg.permissions.remove(i); } + } else if (!PLATFORM_PACKAGE_NAME.equals(pkg.packageName)) { + // Prevent apps to change protection level to dangerous from any other + // type as this would allow a privilege escalation where an app adds a + // normal/signature permission in other app's group and later redefines + // it as dangerous leading to the group auto-grant. + if ((perm.info.protectionLevel & PermissionInfo.PROTECTION_MASK_BASE) + == PermissionInfo.PROTECTION_DANGEROUS) { + if (bp != null && !bp.isRuntime()) { + Slog.w(TAG, "Package " + pkg.packageName + " trying to change a " + + "non-runtime permission " + perm.info.name + + " to runtime; keeping old protection level"); + perm.info.protectionLevel = bp.protectionLevel; + } + } } } } |