Skip to content
This repository has been archived by the owner on Nov 8, 2023. It is now read-only.

Commit

Permalink
Fix the issue provider can be wrong when requesting slice permission
Browse files Browse the repository at this point in the history
SlicePermissionActivity reads provider_pkg from intent, which can be
modified at will. As a result user might see incorrect package name in
the dialog granting slice permission.

Bug: 159145361
Test: manual
Merged-In: I8b66c02786df4096dad74b7e76255d5ddd1d609d
Change-Id: I8b66c02786df4096dad74b7e76255d5ddd1d609d
(cherry picked from commit 4344e63)
  • Loading branch information
pinyaoting authored and android-build-team Robot committed Nov 18, 2020
1 parent e0b64f1 commit a185996
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 1 deletion.
1 change: 1 addition & 0 deletions core/java/android/app/slice/SliceProvider.java
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,7 @@ public abstract class SliceProvider extends ContentProvider {
*/
public static final String EXTRA_PKG = "pkg";
/**
* @Deprecated provider pkg is now being extracted in SlicePermissionActivity
* @hide
*/
public static final String EXTRA_PROVIDER_PKG = "provider_pkg";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;

import android.annotation.Nullable;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.slice.SliceManager;
Expand All @@ -29,6 +30,7 @@
import android.net.Uri;
import android.os.Bundle;
import android.text.BidiFormatter;
import android.util.EventLog;
import android.util.Log;
import android.widget.CheckBox;
import android.widget.TextView;
Expand All @@ -50,10 +52,12 @@ protected void onCreate(Bundle savedInstanceState) {

mUri = getIntent().getParcelableExtra(SliceProvider.EXTRA_BIND_URI);
mCallingPkg = getIntent().getStringExtra(SliceProvider.EXTRA_PKG);
mProviderPkg = getIntent().getStringExtra(SliceProvider.EXTRA_PROVIDER_PKG);

try {
PackageManager pm = getPackageManager();
mProviderPkg = pm.resolveContentProvider(mUri.getAuthority(),
PackageManager.GET_META_DATA).applicationInfo.packageName;
verifyCallingPkg();
CharSequence app1 = BidiFormatter.getInstance().unicodeWrap(pm.getApplicationInfo(
mCallingPkg, 0).loadSafeLabel(pm, PackageItemInfo.DEFAULT_MAX_LABEL_SIZE_PX,
PackageItemInfo.SAFE_LABEL_FLAG_TRIM
Expand Down Expand Up @@ -97,4 +101,29 @@ public void onClick(DialogInterface dialog, int which) {
public void onDismiss(DialogInterface dialog) {
finish();
}

private void verifyCallingPkg() {
final String providerPkg = getIntent().getStringExtra(SliceProvider.EXTRA_PROVIDER_PKG);
if (providerPkg == null || mProviderPkg.equals(providerPkg)) return;
final String callingPkg = getCallingPkg();
EventLog.writeEvent(0x534e4554, "159145361", getUid(callingPkg), String.format(
"pkg %s (disguised as %s) attempted to request permission to show %s slices in %s",
callingPkg, providerPkg, mProviderPkg, mCallingPkg));
}

@Nullable
private String getCallingPkg() {
final Uri referrer = getReferrer();
if (referrer == null) return null;
return referrer.getHost();
}

private int getUid(@Nullable final String pkg) {
if (pkg == null) return -1;
try {
return getPackageManager().getApplicationInfo(pkg, 0).uid;
} catch (NameNotFoundException e) {
}
return -1;
}
}

0 comments on commit a185996

Please sign in to comment.