Android security tags, read closely by Lightrion

CVE-2025-48529 AI-generated analysis

platform/frameworks/opt/telephony, voicemail notification settings (VoicemailNotificationSettingsUtil, NotificationChannelController)

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.

Removes the shared-preference storage, readback and channel migration of the voicemail ringtone URI in frameworks/opt/telephony, so TelephonyManager#setVoicemailRingtoneUri becomes a no-op and getVoicemailRingtoneUri only returns the voicemail NotificationChannel sound.

Root cause

VoicemailNotificationSettingsUtil.setRingtoneUri wrote any URI passed through TelephonyManager#setVoicemailRingtoneUri into the phone process default SharedPreferences. Per index search, that call goes through PhoneInterfaceManager.setVoicemailRingtoneUri, which is reachable by the default dialer or by callers that pass the modify-permission or carrier-privilege check. Two legacy paths then consumed the stored value. First, getRingtoneUri fell back to getRingTonePreference when the voicemail channel did not exist. Second, NotificationChannelController.migrateVoicemailNotificationSettings called getRingTonePreference and set the URI as the sound of the newly created CHANNEL_ID_VOICE_MAIL channel. The commit message states that a URI set via the setter could be migrated onto the notification channel, causing a cross-profile exploit. The pre-P shared preference mechanism was obsolete (the setting has lived on the NotificationChannel since Android P) but was still writable and readable.

How the fix works

Completeness

Behavior changes

Per major

Unknowns

Back to September 2025 · Findings