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 59c0a7bc63)
This commit is contained in:
Linus Tufvesson
2021-07-05 18:02:10 +01:00
committed by Weng Su
parent a93796f7a3
commit 553ca3e58d
7 changed files with 22 additions and 9 deletions

View File

@@ -1137,7 +1137,8 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment
@Override @Override
public void onScan(WifiDialog2 dialog, String ssid) { public void onScan(WifiDialog2 dialog, String ssid) {
// Launch QR code scanner to join a network. // 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); REQUEST_CODE_WIFI_DPP_ENROLLEE_QR_CODE_SCANNER);
} }

View File

@@ -109,7 +109,8 @@ public class AddNetworkFragment extends InstrumentedFragment implements WifiConf
final String ssid = ssidEditText.getText().toString(); final String ssid = ssidEditText.getText().toString();
// Launch QR code scanner to join a network. // 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); REQUEST_CODE_WIFI_DPP_ENROLLEE_QR_CODE_SCANNER);
} }
} }

View File

@@ -59,7 +59,7 @@ public class AddWifiNetworkPreference extends Preference {
getContext().getString(R.string.wifi_dpp_scan_qr_code)); getContext().getString(R.string.wifi_dpp_scan_qr_code));
scanButton.setOnClickListener(view -> { scanButton.setOnClickListener(view -> {
getContext().startActivity( getContext().startActivity(
WifiDppUtils.getEnrolleeQrCodeScannerIntent(/* ssid */ null)); WifiDppUtils.getEnrolleeQrCodeScannerIntent(getContext(), /* ssid */ null));
}); });
} }

View File

@@ -309,7 +309,7 @@ public class WifiDialogActivity extends ObservableActivity implements WifiDialog
@Override @Override
public void onScan(WifiDialog2 dialog, String ssid) { public void onScan(WifiDialog2 dialog, String ssid) {
Intent intent = WifiDppUtils.getEnrolleeQrCodeScannerIntent(ssid); Intent intent = WifiDppUtils.getEnrolleeQrCodeScannerIntent(dialog.getContext(), ssid);
WizardManagerHelper.copyWizardManagerExtras(mIntent, intent); WizardManagerHelper.copyWizardManagerExtras(mIntent, intent);
// Launch QR code scanner to join a network. // Launch QR code scanner to join a network.
@@ -318,7 +318,7 @@ public class WifiDialogActivity extends ObservableActivity implements WifiDialog
@Override @Override
public void onScan(WifiDialog dialog, String ssid) { public void onScan(WifiDialog dialog, String ssid) {
Intent intent = WifiDppUtils.getEnrolleeQrCodeScannerIntent(ssid); Intent intent = WifiDppUtils.getEnrolleeQrCodeScannerIntent(dialog.getContext(), ssid);
WizardManagerHelper.copyWizardManagerExtras(mIntent, intent); WizardManagerHelper.copyWizardManagerExtras(mIntent, intent);
// Launch QR code scanner to join a network. // Launch QR code scanner to join a network.

View File

@@ -1035,7 +1035,8 @@ public class WifiSettings extends RestrictedSettingsFragment
@Override @Override
public void onScan(WifiDialog2 dialog, String ssid) { public void onScan(WifiDialog2 dialog, String ssid) {
// Launch QR code scanner to join a network. // 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); REQUEST_CODE_WIFI_DPP_ENROLLEE_QR_CODE_SCANNER);
} }

View File

@@ -114,9 +114,9 @@ public class WifiDppUtils {
* @param ssid The data corresponding to {@code WifiConfiguration} SSID * @param ssid The data corresponding to {@code WifiConfiguration} SSID
* @return Intent for launching QR code scanner * @return Intent for launching QR code scanner
*/ */
public static Intent getEnrolleeQrCodeScannerIntent(String ssid) { public static Intent getEnrolleeQrCodeScannerIntent(Context context, String ssid) {
final Intent intent = new Intent( final Intent intent = new Intent(context, WifiDppEnrolleeActivity.class);
WifiDppEnrolleeActivity.ACTION_ENROLLEE_QR_CODE_SCANNER); intent.setAction(WifiDppEnrolleeActivity.ACTION_ENROLLEE_QR_CODE_SCANNER);
if (!TextUtils.isEmpty(ssid)) { if (!TextUtils.isEmpty(ssid)) {
intent.putExtra(EXTRA_WIFI_SSID, ssid); intent.putExtra(EXTRA_WIFI_SSID, ssid);
} }

View File

@@ -27,6 +27,8 @@ import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiConfiguration.KeyMgmt; import android.net.wifi.WifiConfiguration.KeyMgmt;
import android.net.wifi.WifiManager; import android.net.wifi.WifiManager;
import androidx.test.core.app.ApplicationProvider;
import com.android.wifitrackerlib.WifiEntry; import com.android.wifitrackerlib.WifiEntry;
import org.junit.Before; import org.junit.Before;
@@ -80,4 +82,12 @@ public class WifiDppUtilsTest {
assertThat(intent.getBooleanExtra(WifiDppUtils.EXTRA_WIFI_HIDDEN_SSID, false)) assertThat(intent.getBooleanExtra(WifiDppUtils.EXTRA_WIFI_HIDDEN_SSID, false))
.isEqualTo(true); .isEqualTo(true);
} }
@Test
public void getEnrolleeQrCodeScannerIntent_isExplicitIntent() {
Intent intent = WifiDppUtils.getEnrolleeQrCodeScannerIntent(
ApplicationProvider.getApplicationContext(), null);
assertThat(intent.getComponent()).isNotNull();
}
} }