Don't allow Guest user to bypass permission check
Fix an issue where Guest can bypass addNetwork permission check with
SYSTEM_ALERT_WINDOW permission.
Bug: 255537598
Test: atest com.android.server.wifi
Change-Id: I1526944d1d2c67db83d20137f5b98fead64d331c
Merged-In: I1526944d1d2c67db83d20137f5b98fead64d331c
(cherry picked from commit 6c8e32237668d1e4c9329d76729f38bcd0bb287e)
diff --git a/service/java/com/android/server/wifi/WifiServiceImpl.java b/service/java/com/android/server/wifi/WifiServiceImpl.java
index 4101d14..d63246a 100644
--- a/service/java/com/android/server/wifi/WifiServiceImpl.java
+++ b/service/java/com/android/server/wifi/WifiServiceImpl.java
@@ -1104,7 +1104,8 @@
|| mWifiPermissionsUtil.isAdmin(uid, packageName)
|| mWifiPermissionsUtil.isSystem(packageName, uid)
// TODO(b/140540984): Remove this bypass.
- || mWifiPermissionsUtil.checkSystemAlertWindowPermission(uid, packageName);
+ || (mWifiPermissionsUtil.checkSystemAlertWindowPermission(uid, packageName)
+ && !isGuestUser());
}
private boolean isGuestUser() {
diff --git a/service/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java b/service/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java
index 0426fe6..503e5f1 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java
@@ -6378,17 +6378,24 @@
when(mWifiConfigManager.addOrUpdateNetwork(any(), anyInt(), any(), eq(false))).thenReturn(
new NetworkUpdateResult(0));
+ // Verify caller fails to add network as Guest user.
when(mWifiPermissionsUtil.checkSystemAlertWindowPermission(
Process.myUid(), TEST_PACKAGE_NAME)).thenReturn(true);
-
+ when(mWifiPermissionsUtil.isGuestUser()).thenReturn(true);
WifiConfiguration config = WifiConfigurationTestUtil.createOpenNetwork();
mLooper.startAutoDispatch();
+ assertEquals(-1,
+ mWifiServiceImpl.addOrUpdateNetwork(config, TEST_PACKAGE_NAME, mAttribution));
+
+ // Verify caller successfully add network when not a Guest user.
+ when(mWifiPermissionsUtil.isGuestUser()).thenReturn(false);
assertEquals(0,
mWifiServiceImpl.addOrUpdateNetwork(config, TEST_PACKAGE_NAME, mAttribution));
mLooper.stopAutoDispatchAndIgnoreExceptions();
verifyCheckChangePermission(TEST_PACKAGE_NAME);
- verify(mWifiPermissionsUtil).checkSystemAlertWindowPermission(anyInt(), anyString());
+ verify(mWifiPermissionsUtil, times(2))
+ .checkSystemAlertWindowPermission(anyInt(), anyString());
verify(mWifiConfigManager).addOrUpdateNetwork(any(), anyInt(), any(), eq(false));
verify(mWifiMetrics).incrementNumAddOrUpdateNetworkCalls();
}