Android security tags, read closely by Lightrion

CVE-2025-48646 AI-generated analysis

platform/frameworks/base, WindowManager / ActivityTaskManager (services/core/java/com/android/server/wm/ActivityStarter.java)

AI-generated: written from the bulletin and the fixing diffs by claude-fable-5-1, then checked against the code by claude-opus-5-5 (6 corrections). Verify against the commit before relying on it.

In ActivityStarter's FLAG_ACTIVITY_FORWARD_RESULT trampoline handling, the fix no longer always copies sourceRecord.launchedFromPackage into callingPackage. It now does so only after PackageManagerInternal.getPackageUid shows the package belongs to the same app as callingUid (UserHandle.isSameApp).

Root cause

In ActivityStarter.java, an activity can be started with FLAG_ACTIVITY_FORWARD_RESULT when sourceRecord.launchedFromUid == callingUid. In that case the code treated the source as a trampoline and overwrote callingPackage and callingFeatureId with sourceRecord.launchedFromPackage / launchedFromFeatureId. The removed comment said this was safe because "these two packages come from the same uid". However, the added test shows that launchedFromPackage and launchedFromUid on an ActivityRecord need not match: an activity started through startNextMatchingActivity() can carry the launchedFromPackage of a different (privileged) app while its launchedFromUid is the caller's own uid. Because the copy had no check, the newly started activity could record a launchedFromPackage that the calling uid does not own.

How the fix works

Completeness

Behavior changes

Per major

Unknowns

Back to March 2026 · Findings