Android security tags, read closely by Lightrion

CVE-2024-23713 AI-generated analysis

platform/frameworks/base, NotificationManagerService (notification listener filter migration)

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.

In NotificationManagerService.migrateNotificationFilter, a VersionedPackage is now added to the listener's NotificationListenerFilter only when the resolved uid is not INVALID_UID, so packages whose uid cannot be resolved for a user are no longer stored in the filter.

Root cause

migrateNotificationFilter(INotificationListener token, int defaultTypes, List<String> disallowedApps) loops over the caller-supplied disallowedApps. For each profile of the listener's user it calls getUidForPackageAndUser(pkg, UserHandle.of(userId)), always wraps the result in new VersionedPackage(pkg, uid) and calls nlf.addPackage(vp). Only the exception path was treated as "pkg doesn't exist on that user; skip". When getUidForPackageAndUser returns INVALID_UID instead of throwing, the package was still stored in the NotificationListenerFilter and saved via mListeners.setNotificationListenerFilter(key, nlf). The new test reaches this case by making getPackageUid throw RemoteException for "apples", which suggests the helper turns that exception into INVALID_UID. The commit message's test step ('view policy xml file') suggests the filter ends up in the policy xml file.

How the fix works

Completeness

Behavior changes

Per major

Unknowns

Back to April 2024 · Findings