Android security tags, read closely by Lightrion

CVE-2026-0015 AI-generated analysis

platform/frameworks/base, AppOps (services/core/java/com/android/server/appop)

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.

AppOpsService now only accepts proxied attribution tags from trusted proxies (flags without OP_FLAG_UNTRUSTED_PROXIED). It also checks that the proxy package really belongs to the proxy uid before treating it as system, stops the start dry run and finish paths from creating per-tag state, and finds the AttributedOp to finish by clientId and trust flag.

Root cause

In AppOpsService.verifyAndGetBypass, a tag not declared in the proxied package was re-checked against the proxy package's manifest (isAttributionInPackage(proxyPkg, attributionTag)), whether or not the proxy was trusted. In the ROOT_UID early return and in a second early return that yields RestrictionBypass.UNRESTRICTED, the tag counted as valid whenever isPackageNullOrSystem(proxyPackageName, proxyUid) held. That check did not verify that the named package belongs to proxyUid. A tag judged valid is used as a key when creating state: in the start path (getOpsLocked with edit=true, including dry run) and in the finish path (getOpLocked, which used edit=true before the fix). The in-code comment describes the concern as abusive apps clogging the appops system with unlimited attribution tags via proxy calls.

How the fix works

Completeness

Behavior changes

Per major

Unknowns

Back to March 2026 · Findings