From 553ca3e58d4b0411a8ed3eb83013f94f495a890d Mon Sep 17 00:00:00 2001 From: Linus Tufvesson Date: Mon, 5 Jul 2021 18:02:10 +0100 Subject: [PATCH] Make WifiDppEnrolleeActivity launches explicit Bug: 180518134 Test: make RunSettingsRoboTests \ ROBOTEST_FILTER=WifiDppUtilsTest\|WifiDialogActivityTest Test: Manually verified b/180518134 attack is no longer possible Change-Id: I8c4e1e17117582c78671d0e4658bd87715a9a046 (cherry picked from commit 59c0a7bc634a8f3bd205b2c444330af18ab0d0ff) --- .../settings/network/NetworkProviderSettings.java | 3 ++- src/com/android/settings/wifi/AddNetworkFragment.java | 3 ++- .../settings/wifi/AddWifiNetworkPreference.java | 2 +- src/com/android/settings/wifi/WifiDialogActivity.java | 4 ++-- src/com/android/settings/wifi/WifiSettings.java | 3 ++- src/com/android/settings/wifi/dpp/WifiDppUtils.java | 6 +++--- .../android/settings/wifi/dpp/WifiDppUtilsTest.java | 10 ++++++++++ 7 files changed, 22 insertions(+), 9 deletions(-) diff --git a/src/com/android/settings/network/NetworkProviderSettings.java b/src/com/android/settings/network/NetworkProviderSettings.java index bae3cda36a6..aedb2990ab7 100644 --- a/src/com/android/settings/network/NetworkProviderSettings.java +++ b/src/com/android/settings/network/NetworkProviderSettings.java @@ -1137,7 +1137,8 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment @Override public void onScan(WifiDialog2 dialog, String ssid) { // Launch QR code scanner to join a network. - startActivityForResult(WifiDppUtils.getEnrolleeQrCodeScannerIntent(ssid), + startActivityForResult( + WifiDppUtils.getEnrolleeQrCodeScannerIntent(dialog.getContext(), ssid), REQUEST_CODE_WIFI_DPP_ENROLLEE_QR_CODE_SCANNER); } diff --git a/src/com/android/settings/wifi/AddNetworkFragment.java b/src/com/android/settings/wifi/AddNetworkFragment.java index 4adc6727614..01d5ef1ca4a 100644 --- a/src/com/android/settings/wifi/AddNetworkFragment.java +++ b/src/com/android/settings/wifi/AddNetworkFragment.java @@ -109,7 +109,8 @@ public class AddNetworkFragment extends InstrumentedFragment implements WifiConf final String ssid = ssidEditText.getText().toString(); // Launch QR code scanner to join a network. - startActivityForResult(WifiDppUtils.getEnrolleeQrCodeScannerIntent(ssid), + startActivityForResult( + WifiDppUtils.getEnrolleeQrCodeScannerIntent(view.getContext(), ssid), REQUEST_CODE_WIFI_DPP_ENROLLEE_QR_CODE_SCANNER); } } diff --git a/src/com/android/settings/wifi/AddWifiNetworkPreference.java b/src/com/android/settings/wifi/AddWifiNetworkPreference.java index 8216f86ff64..ff4d38e6fde 100644 --- a/src/com/android/settings/wifi/AddWifiNetworkPreference.java +++ b/src/com/android/settings/wifi/AddWifiNetworkPreference.java @@ -59,7 +59,7 @@ public class AddWifiNetworkPreference extends Preference { getContext().getString(R.string.wifi_dpp_scan_qr_code)); scanButton.setOnClickListener(view -> { getContext().startActivity( - WifiDppUtils.getEnrolleeQrCodeScannerIntent(/* ssid */ null)); + WifiDppUtils.getEnrolleeQrCodeScannerIntent(getContext(), /* ssid */ null)); }); } diff --git a/src/com/android/settings/wifi/WifiDialogActivity.java b/src/com/android/settings/wifi/WifiDialogActivity.java index ffcfbb84c14..58e9a7b5bb9 100644 --- a/src/com/android/settings/wifi/WifiDialogActivity.java +++ b/src/com/android/settings/wifi/WifiDialogActivity.java @@ -309,7 +309,7 @@ public class WifiDialogActivity extends ObservableActivity implements WifiDialog @Override public void onScan(WifiDialog2 dialog, String ssid) { - Intent intent = WifiDppUtils.getEnrolleeQrCodeScannerIntent(ssid); + Intent intent = WifiDppUtils.getEnrolleeQrCodeScannerIntent(dialog.getContext(), ssid); WizardManagerHelper.copyWizardManagerExtras(mIntent, intent); // Launch QR code scanner to join a network. @@ -318,7 +318,7 @@ public class WifiDialogActivity extends ObservableActivity implements WifiDialog @Override public void onScan(WifiDialog dialog, String ssid) { - Intent intent = WifiDppUtils.getEnrolleeQrCodeScannerIntent(ssid); + Intent intent = WifiDppUtils.getEnrolleeQrCodeScannerIntent(dialog.getContext(), ssid); WizardManagerHelper.copyWizardManagerExtras(mIntent, intent); // Launch QR code scanner to join a network. diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java index f43fdc450e8..4c7be5871d2 100644 --- a/src/com/android/settings/wifi/WifiSettings.java +++ b/src/com/android/settings/wifi/WifiSettings.java @@ -1035,7 +1035,8 @@ public class WifiSettings extends RestrictedSettingsFragment @Override public void onScan(WifiDialog2 dialog, String ssid) { // Launch QR code scanner to join a network. - startActivityForResult(WifiDppUtils.getEnrolleeQrCodeScannerIntent(ssid), + startActivityForResult( + WifiDppUtils.getEnrolleeQrCodeScannerIntent(dialog.getContext(), ssid), REQUEST_CODE_WIFI_DPP_ENROLLEE_QR_CODE_SCANNER); } diff --git a/src/com/android/settings/wifi/dpp/WifiDppUtils.java b/src/com/android/settings/wifi/dpp/WifiDppUtils.java index abf5becfbc3..39a5431e636 100644 --- a/src/com/android/settings/wifi/dpp/WifiDppUtils.java +++ b/src/com/android/settings/wifi/dpp/WifiDppUtils.java @@ -114,9 +114,9 @@ public class WifiDppUtils { * @param ssid The data corresponding to {@code WifiConfiguration} SSID * @return Intent for launching QR code scanner */ - public static Intent getEnrolleeQrCodeScannerIntent(String ssid) { - final Intent intent = new Intent( - WifiDppEnrolleeActivity.ACTION_ENROLLEE_QR_CODE_SCANNER); + public static Intent getEnrolleeQrCodeScannerIntent(Context context, String ssid) { + final Intent intent = new Intent(context, WifiDppEnrolleeActivity.class); + intent.setAction(WifiDppEnrolleeActivity.ACTION_ENROLLEE_QR_CODE_SCANNER); if (!TextUtils.isEmpty(ssid)) { intent.putExtra(EXTRA_WIFI_SSID, ssid); } diff --git a/tests/robotests/src/com/android/settings/wifi/dpp/WifiDppUtilsTest.java b/tests/robotests/src/com/android/settings/wifi/dpp/WifiDppUtilsTest.java index d8bcb598f63..e60530847cd 100644 --- a/tests/robotests/src/com/android/settings/wifi/dpp/WifiDppUtilsTest.java +++ b/tests/robotests/src/com/android/settings/wifi/dpp/WifiDppUtilsTest.java @@ -27,6 +27,8 @@ import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiConfiguration.KeyMgmt; import android.net.wifi.WifiManager; +import androidx.test.core.app.ApplicationProvider; + import com.android.wifitrackerlib.WifiEntry; import org.junit.Before; @@ -80,4 +82,12 @@ public class WifiDppUtilsTest { assertThat(intent.getBooleanExtra(WifiDppUtils.EXTRA_WIFI_HIDDEN_SSID, false)) .isEqualTo(true); } + + @Test + public void getEnrolleeQrCodeScannerIntent_isExplicitIntent() { + Intent intent = WifiDppUtils.getEnrolleeQrCodeScannerIntent( + ApplicationProvider.getApplicationContext(), null); + assertThat(intent.getComponent()).isNotNull(); + } + }