From 6407b20ab3ab49318ba5cbfc0d6b59c675df67b4 Mon Sep 17 00:00:00 2001 From: Alex Johnston Date: Wed, 5 Jan 2022 22:19:29 +0000 Subject: [PATCH] Add caller check to com.android.credentials.RESET * Only the Settings app can reset credentials via com.android.credentials.RESET. * com.android.credentials.INSTALL should still be callable by CertInstaller. Manual testing steps: * Install certificate via Settings * Verify unable to reset certificates via test app provided in the bug (app-debug.apk) * Verify able to reset certificates via Settings * Verify com.android.credentials.INSTALL isn't changed Bug: 200164168 Test: manual Change-Id: I9dfde586616d004befbee529f2ae842d22795065 (cherry picked from commit 4c1272a921bb9037e17a01e1e5a0692f7f704c3d) Merged-In: I9dfde586616d004befbee529f2ae842d22795065 --- .../settings/security/CredentialStorage.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/security/CredentialStorage.java b/src/com/android/settings/security/CredentialStorage.java index 090fdf6bb07..ea336314566 100644 --- a/src/com/android/settings/security/CredentialStorage.java +++ b/src/com/android/settings/security/CredentialStorage.java @@ -86,7 +86,7 @@ public final class CredentialStorage extends FragmentActivity { final String action = intent.getAction(); final UserManager userManager = (UserManager) getSystemService(Context.USER_SERVICE); if (!userManager.hasUserRestriction(UserManager.DISALLOW_CONFIG_CREDENTIALS)) { - if (ACTION_RESET.equals(action)) { + if (ACTION_RESET.equals(action) && checkCallerIsSelf()) { new ResetDialog(); } else { if (ACTION_INSTALL.equals(action) && checkCallerIsCertInstallerOrSelfInProfile()) { @@ -318,6 +318,19 @@ public final class CredentialStorage extends FragmentActivity { finish(); } + /** + * Check that the caller is Settings. + */ + private boolean checkCallerIsSelf() { + try { + return Process.myUid() == android.app.ActivityManager.getService() + .getLaunchedFromUid(getActivityToken()); + } catch (RemoteException re) { + // Error talking to ActivityManager, just give up + return false; + } + } + /** * Check that the caller is either certinstaller or Settings running in a profile of this user. */