Android security tags, read closely by Lightrion

CVE-2025-0097 AI-generated analysis

platform/frameworks/base, WindowManager (services/core/java/com/android/server/wm: EmbeddedWindowController, WindowManagerService)

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.

WindowManagerService.transferTouchGesture now records Binder.getCallingUid() before clearing the calling identity. EmbeddedWindowController.transferToHost and transferToEmbedded then throw a SecurityException unless that UID owns the transferFrom side (the embedded window owner or the host WindowState owner), so a process can no longer move an active touch gesture from a window it does not own.

Root cause

Before the fix, IWindowManager.transferTouchGesture(transferFromToken, transferToToken) only checked that the embedded window and the host WindowState were associated with each other. EmbeddedWindowController.isValidTouchGestureParams compares the mClient binder of the embedded window's host WindowState with the host's mClient, and checks that both sides have input channels. Nothing checked who was calling: Binder.clearCallingIdentity() ran before any use of the caller's identity. As the commit message describes, a host or embedded process that passed the association checks could therefore make InputManagerService.transferTouchGesture move the gesture in either direction, including taking an active gesture from its counterpart, without owning the transferFrom window.

How the fix works

Completeness

Behavior changes

Per major

Unknowns

Back to February 2025 · Findings