Ваши приложения уязвимы для перенаправления намерений

#android #android-security

#Android #android-безопасность

Вопрос:

Когда я обновляю свое приложение в Google Play Store, я получил письмо ниже.

Мы проверили ваше приложение и обнаружили, что оно использует программное обеспечение, содержащее уязвимости для пользователей. Приложения с этими уязвимостями могут раскрывать информацию о пользователе или повреждать устройство пользователя и могут считаться нарушением нашей политики вредоносного поведения.

Ниже приведен список проблем и соответствующих версий APK, которые были обнаружены в вашей недавней отправке. Пожалуйста, перенесите свои приложения на использование обновленного программного обеспечения как можно скорее и увеличьте номер версии обновленного APK.

Перенаправление намерений

Ваши приложения уязвимы для перенаправления намерений.

Ниже приведен мой файл build.gradle.

 apply plugin: 'com.android.application'
apply plugin: 'com.google.firebase.crashlytics'

  android {
    compileSdkVersion 28
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

defaultConfig {
    applicationId "......."
    minSdkVersion 19
    targetSdkVersion 29
    versionCode 7
    versionName "1.0.7"
    multiDexEnabled true
    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
}

}

dependencies {
    
implementation fileTree(dir: 'libs', include: ['*.jar'])

implementation 'com.amazonaws:aws-android-sdk-ddb:2.17.0'
implementation 'com.amazonaws:aws-android-sdk-mobile-client:2.17.0'
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'com.github.smarteist:autoimageslider:1.3.7'
implementation 'com.github.bumptech.glide:glide:4.11.0'
implementation 'com.google.android.material:material:1.2.0-alpha06'
implementation 'androidx.navigation:navigation-fragment:2.0.0'
implementation 'androidx.navigation:navigation-ui:2.0.0'
implementation 'com.google.android.gms:play-services-maps:17.0.0'
implementation 'com.google.android.gms:play-services-location:17.0.0'
implementation 'com.google.android.libraries.places:places:2.3.0'
implementation 'org.jetbrains:annotations-java5:15.0'
implementation 'com.loopj.android:android-async-http:1.4.9'
implementation 'com.google.maps.android:android-maps-utils:0.6.2'
implementation 'com.google.android:flexbox:2.0.1'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
implementation 'com.wang.avi:library:2.1.3'  // Loading Animation
implementation 'com.google.android.gms:play-services-auth-api-phone:17.4.0'
implementation 'net.yslibrary.keyboardvisibilityevent:keyboardvisibilityevent:1.0.1'
implementation 'com.razorpay:checkout:1.5.16'
implementation 'com.paytm:pgplussdk:1.4.3'
implementation 'com.android.volley:volley:1.1.1'
implementation 'com.google.firebase:firebase-crashlytics:17.3.0'
implementation 'com.google.firebase:firebase-analytics:18.0.1'
implementation 'io.sentry:sentry-android:3.1.0'

}
 

Я уже изменил android:exported на false в манифесте Android, а также добавил getPackageName, если проверяет все мои методы GetIntent().

Комментарии:

1. проверьте это, если это поможет support.google.com/faqs/answer/9267555?hl=en

2. Уже пробовали это. Не сработало.

3. это для вашего приложения. вы не опубликовали никакого кода, так как я могу попробовать?

4. пожалуйста, обновите com.razorpay:checkout и paytm:pgplussdk обновите версию до последней

5. Мое обновление приложения было отклонено по следующей причине: ваше приложение содержит уязвимость для перенаправления намерений. Пожалуйста, ознакомьтесь с этой статьей справочного центра Google для получения подробной информации. androidx.fragment.app.FragmentActivity.startActivityForResult. Есть идеи о том, как это выяснить? @Basi

Ответ №1:

Я также получал это предупреждение для своего приложения в прошлом. На самом деле они исследуют ваш код и нашли этот шаблон:

 Intent intent = getIntent();
Intent forward = (Intent) intent.getParcelableExtra(“key”);
startActivity(forward);
 

Я не знаю, как это работает, но вы должны просто избегать шаблона, т.Е. — Не пересылать намерение в parcelable. Возможно, этот шаблон существует в одной из ваших зависимостей, тогда у вас есть некоторые проблемы…

Например, если вы передаете намерение из одного компонента в другой, вы можете временно сохранить его в SharedPreferences , но вместо parcelable вы можете использовать строковое представление намерения, это имеет некоторые ограничения, но работает во многих случаях.
В одном действии:

 Intent targetIntent = ...
String representation = targetIntent.toUri(0);
SharedPreferences prefs = getSharedPreferences("intentStore", MODE_PRIVATE);
String key = UUID.randomUUID().toString();
prefs.edit().putString(key, representation).apply();

Intent startIntent = new Intent(this, ActivityB.class);
startIntent.putExtra("intentKey", key);
startActivity(startIntent);
 

В ActivityB для обработки намерения:

 String key = getIntent().getStringExtra("intentKey");
SharedPreferences prefs = getSharedPreferences("intentStore", MODE_PRIVATE);
String representation = prefs.getString(key, null);
// may be need check on null
Intent targetIntent = null;
try {
   targetIntent = Intent.parseUri(representation, Intent.URI_ALLOW_UNSAFE);
} catch (URISyntaxException e) {
   e.printStackTrace();
}

// handle targetIntent
...
 

Намерение.URI_ALLOW_UNSAFE требуется, если вы используете некоторые флаги в своем намерении для предоставления некоторых разрешений (например, разрешений на запись для URI-адресов документов).
Возможно, вам необходимо очистить префиксы «intentStore» в методе ActivityB onDestroy.