diff options
| author | 2019-11-14 17:22:05 +0800 | |
|---|---|---|
| committer | 2019-12-02 20:42:32 +0800 | |
| commit | f365d3a8e8e37a16841af9074fba3a41ef89a9a1 (patch) | |
| tree | 05c6d78517cc0e48cd210735901af426aa321a3f | |
| parent | b39135098a51e17b4793bc2d0cb7d196a1089e3b (diff) | |
Limit Activity taskAffinity to application uid
Currently, activities with same affinity will be in the same task even
if they don't have the same uid. As a result, malicious apps may set
the same task affinity with attacked app, and hijack intents to get
permissions.
This patch limits activity task affinity to application uid. Activities
must have the same task affinity and uid to be in the same task.
fixes: 139128211
fixes: 144435022
Bug: 35954083
Test: test attacker with steps in attached video from b/139128211#comment9
Test: atest ActivityTaskAffinityTests
Change-Id: I4f1ab7e132f850a7ff8d207f927d862644513bde
| -rw-r--r-- | services/core/java/com/android/server/wm/ActivityRecord.java | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 3de3578a09f1..077e735d9d60 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -1520,7 +1520,13 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A hasBeenLaunched = false; mStackSupervisor = supervisor; - taskAffinity = aInfo.taskAffinity; + // b/35954083: Limit task affinity to uid to avoid various issues associated with sharing + // affinity across uids. + final String uid = Integer.toString(info.applicationInfo.uid); + if (info.taskAffinity != null && !info.taskAffinity.startsWith(uid)) { + info.taskAffinity = uid + ":" + info.taskAffinity; + } + taskAffinity = info.taskAffinity; stateNotNeeded = (aInfo.flags & FLAG_STATE_NOT_NEEDED) != 0; nonLocalizedLabel = aInfo.nonLocalizedLabel; labelRes = aInfo.labelRes; |