Android security tags, read closely by Lightrion

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

AppOpsService.verifyAndGetBypass no longer always accepts attribution tags for the root UID: a tag is now valid only when the proxy package is null or a system package. finishProxyOperation now passes the proxy identity into verification, so unverified tags from non-system proxies are not treated as valid on the finish path.

Root cause

In AppOpsService.verifyAndGetBypass(uid, packageName, attributionTag, proxyUid, proxyPackageName, suppressErrorLogs), the uid == Process.ROOT_UID branch returned PackageVerificationResult(null, isAttributionTagValid = true) whatever the proxy was. The special proxied apps branch (RestrictionBypass.UNRESTRICTED) already limited the tag bypass to proxies that are null or system packages; root had no such limit. The commit message says a malicious proxy app could exploit this, and the new code comment describes the risk as abusive apps clogging the appops system with unlimited attribution tags via proxy calls. A second defect: the proxy finish path called finishOperationUnchecked with only the proxied uid/package, and that function called the 3-argument verifyAndGetBypass without proxy information. As a result, for the special proxied apps the attribution tag was reported valid even when the proxy was a non-system app.

How the fix works

Completeness

Behavior changes

Per major

Unknowns

Back to September 2025 · Findings