Android security tags, read closely by Lightrion

CVE-2025-48547 AI-generated analysis

platform/packages/modules/Permission, PermissionController (one-time permission session handling in AppPermissionGroup.java and KotlinUtils.kt)

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

PermissionController now stops a package's one-time permission session on revoke only when no remaining permission of that package is still granted as one-time, and the Kotlin helper that makes this decision is rewritten so its grant and one-time checks evaluate correctly.

Root cause

A package has a single one-time permission session covering all of its one-time grants (commit message). In AppPermissionGroup.java, the else branch of the revoke path called PermissionManager.stopOneTimePermissionSession(packageName) unconditionally. In KotlinUtils.kt, the revoke path gated the stop on anyPermsOfPackageOneTimeGranted(app, newGroup.packageInfo, newGroup), but that helper was flawed in four ways. It skipped every permission belonging to the group passed in. It returned true early when group.isOneTime was true. It masked the permission flags with FLAG_PERMISSION_ONE_TIME before testing FLAG_PERMISSION_REVOKED_COMPAT, so that test always passed. It tested grant state with requestedPermissionsFlags[idx] == PackageManager.PERMISSION_GRANTED instead of testing the REQUESTED_PERMISSION_GRANTED bit. As the commit message states, stopping the session on one revoke terminated the only session running for all of the package's one-time grants.

How the fix works

Completeness

Behavior changes

Per major

Unknowns

Back to September 2025 · Findings