Android security tags, read closely by Lightrion

CVE-2026-0016 AI-generated analysis

platform/frameworks/base, Credential Manager service (services/credentials) and the shared AbstractMasterSystemService infra (services/core/java/com/android/server/infra)

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

Makes Credential Manager package-update handling user-correct: CredentialManagerService.updateProvidersWhenServiceRemoved now reads and writes the Secure settings of the passed userId instead of UserHandle.myUserId(), and AbstractMasterSystemService.removeInvalidCachedServicesLocked only acts on cached services belonging to the user whose package changed.

Root cause

Two defects on the package-update path. (1) In CredentialManagerService.updateProvidersWhenServiceRemoved(settingsWrapper, componentName, userId), three settings accesses used UserHandle.myUserId() (the user of the system_server process) instead of the userId parameter: the write of Settings.Secure.CREDENTIAL_SERVICE_PRIMARY, and the read and the write of Settings.Secure.CREDENTIAL_SERVICE. The initial read of CREDENTIAL_SERVICE_PRIMARY, isAutofillProviderPresent and clearAllCredentialProviders already used userId. A service removal handled for one user could therefore change the credential provider settings of the system process's user. (2) In AbstractMasterSystemService.removeInvalidCachedServicesLocked(validServices, packageName, userId), visitServicesLocked iterates mServicesCacheList across all users (per index search) and the check matched only on package name. A package change in one user could therefore call handleServiceRemovedMultiModeLocked(serviceComponentName, userId) for another user's service with the same package name, pairing that service's component with the changing user's userId. The package monitor is registered with UserHandle.ALL (mPackageMonitor.register(getContext(), null, UserHandle.ALL, true)).

How the fix works

Completeness

Behavior changes

Per major

Unknowns

Back to June 2026 · Findings