• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
Keine Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

frameworks/base


Commit MetaInfo

Revisioncaf3c62161d2a0562d54d53088cad8490782f2d7 (tree)
Zeit2020-03-03 20:50:09
Autorpaulhu <paulhu@goog...>
CommiterVasyl Gello

Log Message

Fix security problem on PermissionMonitor#hasPermission

PermissionMonitor#hasPermission only checks permssions that app
requested but it doesn't check whether the permission can be
granted to this app. If requested permission doens't be granted
to app, this method still returns that app has this permission.
Then PermissionMonitor will pass this info to netd that means
this app still can use network even restricted network without
granted privileged permission like CONNECTIVITY_INTERNAL or
CONNECTIVITY_USE_RESTRICTED_NETWORKS.

Bug: 144679405
Test: Build, flash, manual test
Change-Id: I5eba4909e4c2e1d9f275f66be90ac36466b93e90
Merged-In: I8a1575dedd6e3b7a8b60ee2ffd475d790aec55c4
Merged-In: Iae9c273af822b18c2e6fce04848a86f8dea6410a
(cherry picked from commit 305946b910a9ab3974daa4277f155614a3fc27a4)

Ändern Zusammenfassung

Diff

--- a/services/core/java/com/android/server/connectivity/PermissionMonitor.java
+++ b/services/core/java/com/android/server/connectivity/PermissionMonitor.java
@@ -21,6 +21,7 @@ import static android.Manifest.permission.CONNECTIVITY_INTERNAL;
2121 import static android.Manifest.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS;
2222 import static android.content.pm.ApplicationInfo.FLAG_SYSTEM;
2323 import static android.content.pm.ApplicationInfo.FLAG_UPDATED_SYSTEM_APP;
24+import static android.content.pm.PackageInfo.REQUESTED_PERMISSION_GRANTED;
2425 import static android.content.pm.PackageManager.GET_PERMISSIONS;
2526
2627 import android.content.BroadcastReceiver;
@@ -39,6 +40,8 @@ import android.os.UserManager;
3940 import android.text.TextUtils;
4041 import android.util.Log;
4142
43+import com.android.internal.util.ArrayUtils;
44+
4245 import java.util.ArrayList;
4346 import java.util.HashMap;
4447 import java.util.HashSet;
@@ -150,15 +153,13 @@ public class PermissionMonitor {
150153 update(mUsers, mApps, true);
151154 }
152155
153- private boolean hasPermission(PackageInfo app, String permission) {
154- if (app.requestedPermissions != null) {
155- for (String p : app.requestedPermissions) {
156- if (permission.equals(p)) {
157- return true;
158- }
159- }
156+ private boolean hasPermission(final PackageInfo app, final String permission) {
157+ if (app.requestedPermissions == null || app.requestedPermissionsFlags == null) {
158+ return false;
160159 }
161- return false;
160+ final int index = ArrayUtils.indexOf(app.requestedPermissions, permission);
161+ if (index < 0 || index >= app.requestedPermissionsFlags.length) return false;
162+ return (app.requestedPermissionsFlags[index] & REQUESTED_PERMISSION_GRANTED) != 0;
162163 }
163164
164165 private boolean hasNetworkPermission(PackageInfo app) {