Android security tags, read closely by Lightrion

CVE-2025-48574 AI-generated analysis

platform/frameworks/base, WindowManager (services/core/java/com/android/server/wm/DisplayPolicy.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 (2 corrections). Verify against the commit before relying on it.

DisplayPolicy.validateAddingWindowLw now enforces MANAGE_ACTIVITY_TASKS against the explicitly supplied callingPid/callingUid when a window requests PRIVATE_FLAG_INTERCEPT_GLOBAL_DRAG_AND_DROP, instead of calling ActivityTaskManagerService.enforceTaskPermission(), which reads the Binder calling identity that has already been cleared at that point.

Root cause

In DisplayPolicy.validateAddingWindowLw(attrs, callingPid, callingUid), the branch for attrs.privateFlags containing PRIVATE_FLAG_INTERCEPT_GLOBAL_DRAG_AND_DROP called the static ActivityTaskManagerService.enforceTaskPermission("DisplayPolicy"). Per the commit message, that helper uses the Binder calling uid/pid, which has been cleared before validateAddingWindowLw() is invoked, so the check did not evaluate the window's real caller. The sibling checks in the same method (PRIVATE_FLAG_TRUSTED_OVERLAY, TYPE_STATUS_BAR, TYPE_NOTIFICATION_SHADE, TYPE_NAVIGATION_BAR) use mContext.enforcePermission(..., callingPid, callingUid, ...) with the passed-in identity; this branch did not.

How the fix works

Completeness

Behavior changes

Per major

Unknowns

Back to March 2026 · Findings