当 Dolby 的 DDPlus 统一解码器处理文件时,在处理演化数据(evolution data)的过程中可能发生越界写入。解码器将演化信息写入一个由更大结构体包含的大型、类似堆的连续缓冲区,而其中一次写入的长度计算可能因整数回绕而溢出。这导致“已分配”缓冲区过小,使得后续写入的越界检查失效。这可能导致结构体后续成员被覆盖,包括在处理下一个同步帧时被写入的指针。
在 Android 上,这是一个 0-click 漏洞,因为 Android 会使用该解码器在本地解码所有传入的音频消息和音频附件以进行转录,而无需用户与设备交互。
此代码存在于 MacOS 上,但由于预处理检查,目前尚不清楚该漏洞是否可被利用。
随着我们进一步调查受此漏洞影响的设备,我们将更新此漏洞信息。
dolby_android_crash.mp4 —— 一个可直接导致 Android 崩溃的容器化文件 dolby_android_crash.ec3 —— 导致 Android 崩溃的比特流 dolby_evo_crash32.ec3 —— 一个可在 32 位目标上导致崩溃的比特流(上述比特流仅使 64 位目标崩溃)
复现此问题最简单的方法是在 Android 设备上播放 dolby_android_crash.mp4。
以 0-click 方式复现该问题:
设置一台测试 Android 设备,使其能够向目标 Android 设备发送 RCS 消息
在测试设备上打开 RCS,按住语音消息图标创建一条语音消息,但不要发送
运行:
adb -s TEST_DEVICE shell ls -l /data/user/0/com.google.android.apps.messaging/cache/mediascratchspace/
并记下最近写入的文件名(某些文件将具有 *.m4a 扩展名,此文件是没有扩展名的那个)
adb -s TEST_DEVICE push dolby_android_crash.mp4 /data/user/0/com.google.android.apps.messaging/cache/mediascratchspace/FILENAME
发送音频消息
目标设备的 C2 进程应会崩溃。
自提交此漏洞以来,我们调查了哪些设备集成了 Dolby 统一解码器。我们使用上述文件在以下设备上复现了崩溃:
微软已就此问题发布了公告:https://msrc.microsoft.com/update-guide/vulnerability/CVE-2025-54957 ChromeOS 也在以下版本的二进制文件中修复了此问题,但公告中未提及该漏洞:https://chromereleases.googleblog.com/2025/09/stable-channel-update-for-chromeos_18.html