Android security tags, read closely by Lightrion

CVE-2025-22431 AI-generated analysis

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

AppOpsService stops treating a proxy-supplied attribution tag as valid when the proxied package is a non-app uid (shell, system, etc.) unless the proxy is a system app or absent, requires the next AttributionSource in a chain to also be trusted, and re-checks remaining restrictions before resuming a paused op when one restriction is lifted.

Root cause

In AppOpsService.verifyAndGetBypass, when the target packageName resolved to a non-app uid (com.android.shell special case, or any uid returned by resolveUid), the method unconditionally returned PackageVerificationResult(RestrictionBypass.UNRESTRICTED, isAttributionTagValid=true). In the proxy note/start paths, where the attribution tag comes from the proxy app, a non-system proxy could therefore get arbitrary, unregistered attribution tags accepted whenever the proxied side was one of these exempt uids. The added code comment says the fix prevents "abusive apps clogging the appops system with unlimited attribution tags via proxy calls". Separately, isCallerAndAttributionTrusted returned true when the first AttributionSource was trusted, without checking attributionSource.getNext(). The restriction-change path also resumed a paused AttributedOp (attrOp.resume()) without checking whether other restrictions still applied.

How the fix works

Completeness

Behavior changes

Per major

Unknowns

Back to April 2025 · Findings