Android security tags, read closely by Lightrion

CVE-2025-48533 AI-generated analysis

platform/frameworks/base, services/core WindowManager (ActivityRecord, StartingData, Transition, WindowState)

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

When the keyguard is locked and the activity does not request showWhenLocked, WindowManager now waits for the transition to finish before it removes the activity's starting (splash) window. Until then it reports the activity's other windows as not visible, so app content is not shown on a locked device during the unocclude animation.

Root cause

The starting window (splash screen) may carry FLAG_SHOW_WHEN_LOCKED because it holds no sensitive content. A WindowState method copies FLAG_SHOW_WHEN_LOCKED | FLAG_DISMISS_KEYGUARD | FLAG_ALLOW_LOCK_WHILE_SCREEN_ON from the app window into mActivityRecord.mStartingWindow.mAttrs. It just overwrote those flags: it did not re-check keyguard state (checkKeyguardFlagsChanged) and did not delay removal of the starting window. ActivityRecord.removeStartingWindow() had no keyguard-based deferral, and WindowState visibility depended only on atoken.isVisible() and animation state. So while the device was still locked, the app window of an activity that does not request showWhenLocked could briefly become visible, including through alpha blending during the unocclude animation. On Android 14, StartingData.mRemoveAfterTransaction was also only a boolean, so there was no state meaning 'remove after the transition finishes'.

How the fix works

Completeness

Behavior changes

Per major

Unknowns

Back to August 2025 · Findings