Make mutable PendingIntent explicit
Starting from target SDK U, we will block creation of mutable PendingIntents with implicit Intents because attackers can mutate the Intent object within and launch altered behavior on behalf of victim apps. For more details on the vulnerability, see go/pendingintent-rca. From a quick analysis, we concluded that the PendingIntent here was only destined to the test app/to the app, so it was made explicit. Reviewers, please call out if this is not the case. Bug: 236704164 Bug: 229362273 Test: atest OverlayManagerPerfTest Test: atest CtsPackageInstallTestCases Test: atest NotificationManagerServiceTest Change-Id: I56cc8c1852caffadae424e08d7719f58779bab11
This commit is contained in:
@@ -133,9 +133,9 @@ public class TestPackageInstaller {
|
||||
mContext.registerReceiver(this, filter,
|
||||
Context.RECEIVER_EXPORTED_UNAUDITED);
|
||||
|
||||
Intent intent = new Intent(action);
|
||||
Intent intent = new Intent(action).setPackage(mContext.getPackageName());
|
||||
PendingIntent pending = PendingIntent.getBroadcast(mContext, sessionId, intent,
|
||||
PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_MUTABLE_UNAUDITED);
|
||||
PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_MUTABLE);
|
||||
return pending.getIntentSender();
|
||||
}
|
||||
|
||||
|
||||
@@ -268,7 +268,7 @@ public class PackageInstallerImpl {
|
||||
Context.RECEIVER_EXPORTED);
|
||||
|
||||
// Create a matching PendingIntent and use it to generate the IntentSender
|
||||
Intent broadcastIntent = new Intent(action);
|
||||
Intent broadcastIntent = new Intent(action).setPackage(mContext.getPackageName());
|
||||
PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, packageName.hashCode(),
|
||||
broadcastIntent, PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_UPDATE_CURRENT
|
||||
| PendingIntent.FLAG_MUTABLE);
|
||||
|
||||
@@ -839,7 +839,8 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
|
||||
.setName("bubblebot")
|
||||
.build();
|
||||
RemoteInput remoteInput = new RemoteInput.Builder("reply_key").setLabel("reply").build();
|
||||
PendingIntent inputIntent = PendingIntent.getActivity(mContext, 0, new Intent(),
|
||||
PendingIntent inputIntent = PendingIntent.getActivity(mContext, 0,
|
||||
new Intent().setPackage(mContext.getPackageName()),
|
||||
PendingIntent.FLAG_MUTABLE);
|
||||
Icon icon = Icon.createWithResource(mContext, android.R.drawable.sym_def_app_icon);
|
||||
Notification.Action replyAction = new Notification.Action.Builder(icon, "Reply",
|
||||
@@ -9227,7 +9228,8 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
|
||||
NotificationRecord r = generateNotificationRecord(mTestNotificationChannel);
|
||||
ArrayList<Notification.Action> extraAction = new ArrayList<>();
|
||||
RemoteInput remoteInput = new RemoteInput.Builder("reply_key").setLabel("reply").build();
|
||||
PendingIntent inputIntent = PendingIntent.getActivity(mContext, 0, new Intent(),
|
||||
PendingIntent inputIntent = PendingIntent.getActivity(mContext, 0,
|
||||
new Intent().setPackage(mContext.getPackageName()),
|
||||
PendingIntent.FLAG_MUTABLE);
|
||||
Icon icon = Icon.createWithResource(mContext, android.R.drawable.sym_def_app_icon);
|
||||
Notification.Action replyAction = new Notification.Action.Builder(icon, "Reply",
|
||||
|
||||
Reference in New Issue
Block a user