Android security tags, read closely by Lightrion

CVE-2026-28660 AI-generated analysis

platform/frameworks/base, package manager / PackageInstaller and LauncherApps system services

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 (4 corrections). Verify against the commit before relying on it.

Adds a PackageInstallerService.getAllSessions(userId, filterCallingUid) overload and makes LauncherAppsService.getAllSessions pass the real caller UID into it. SessionInfo objects returned through LauncherApps.getAllPackageInstallerSessions() are therefore generated and filtered for the actual caller instead of for system_server.

Root cause

LauncherAppsService.LauncherAppsImpl.getAllSessions(String callingPackage) captures the caller's UID, then calls Binder.clearCallingIdentity() and invokes PackageInstallerService.getAllSessions(int userId) for each profile. Because identity was cleared, callingUid = Binder.getCallingUid() inside that method is system_server's UID. That UID went to session.generateInfoForCaller(false, callingUid) and to shouldFilterSession(snapshot, callingUid, info). The commit message says originatingUri and referrerUri were exposed, and the new javadoc describes the UID as 'used for SessionInfo scrubbing and filtering'. Together these indicate that generateInfoForCaller scrubs based on the UID and left the URIs intact for the system UID. Afterwards LauncherAppsService applied only its own shouldFilterSession(callingUid, info) (installer-UID match or canQueryPackage). That check removes whole sessions but does not scrub fields of the sessions it keeps. The result: an app calling LauncherApps.getAllPackageInstallerSessions() with package visibility to the session owner received unscrubbed originatingUri/referrerUri.

How the fix works

Completeness

Behavior changes

Per major

Unknowns

Back to September 2026 · Findings