Android security tags, read closely by Lightrion

CVE-2025-48532 AI-generated analysis

platform/packages/providers/MediaProvider, the MediaProvider.call() handler for MARK_MEDIA_AS_FAVORITE and its MediaStore client helper (apex/framework)

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.

MediaProvider.markMediaAsFavorite no longer applies a caller-supplied ContentValues from the call extras. It now reads only a boolean IS_FAVORITE extra and builds the ContentValues itself, and the MediaStore client helper now sends that boolean instead of EXTRA_CONTENT_VALUES.

Root cause

In src/com/android/providers/media/MediaProvider.java, markMediaAsFavorite(Bundle extras) took the ContentValues directly from extras.getParcelable(MediaStore.EXTRA_CONTENT_VALUES), which is controlled by whoever invoked resolver.call(AUTHORITY, MARK_MEDIA_AS_FAVORITE, ...). It then called clearLocalCallingIdentity() and ran update(uri, values, null) for every URI in the ClipData. For callers other than the package manager, the only check was AccessChecker.hasAccessToCollection(..., forWrite=false), i.e. read access to the collection. The values were not limited to the IS_FAVORITE column, so columns other than is_favorite could be written to media rows under the provider's cleared identity. The commit message says: "The content values retrieved from extras in the MediaProvider can have values preset by the calling app and can affect other fields set."

How the fix works

Completeness

Behavior changes

Per major

Unknowns

Back to September 2025 · Findings