Android 14–17 全部中招:一个不需要用户点击的远程执行漏洞

导语:Android 安全公告 2026 年 11 月版共披露 216 个漏洞、其中 23 个评级为 Critical。最值得警惕的是框架组件中的 CVE-2026-58868——FrameDecoder.cpp 的 onOutputReceived 存在堆缓冲区溢出,可导致越界写入,且不需要任何用户交互即可完成远程代码执行。

Android 框架层堆溢出漏洞示意

一、为什么值得关注

过去我们讨论 Android 漏洞时,默认前提是”需要用户点一下”。弹窗、授权、打开一张图。这类假设在 CVE-2026-58868 面前直接失效:Google 在公告中明确写明 “no additional execution privileges needed. User interaction is not needed for exploitation”。

这意味着威胁模型发生了变化。攻击者只需要让受害者接收一段精心构造的媒体数据——一条消息、一个缩略图请求、一个被投毒的网页——后续的内存破坏与提权都由系统框架代劳。更麻烦的是,这个漏洞位于系统媒体播放路径而非普通应用沙箱,一旦利用成功,攻击者拿到的是框架层权限,突破沙箱只是时间问题。

安全研究员 Nicolas Krassas (@Dinosn) 在推特上转发了 Security Affairs 的报道后,这一条漏洞迅速成为当月 Android 安全的焦点话题。

二、漏洞基本信息

根据 AOSP 官方 2026 年 11 月安全公告(补丁级别 2026-11-01),CVE-2026-58868 的条目如下:

项目内容
CVE 编号CVE-2026-58868
组件Framework(框架层)
漏洞类型RCE(远程代码执行)/ 堆缓冲区溢出导致越界写
严重级别Critical
受影响版本Android 14、15、16、16-qpr2、17
缺陷位置FrameDecoder.cpp 的 onOutputReceived
Bug IDA-486464711
用户交互不需要

CVE 记录由 Google 作为 CNA 于 2026 年 11 月 2 日发布,CISA 的 SSVC 评估给出的结论是:exploitation: none、automatable: yes、technicalImpact: total——自动化程度高、技术影响为完全接管。

值得注意的是,Google 已确认其 11 月公告中的部分漏洞存在在野利用。同批公告里,CVE-2026-58876 与 CVE-2026-58936 同属 System 组件的免交互 RCE,与本漏洞共享”零点击”威胁模型。

三、代码层面:崩溃是如何被升级为 RCE 的

漏洞位于 AOSP 源码 frameworks/av/media/libstagefright/FrameDecoder.cpp。VideoFrameDecoder::onOutputReceived() 的职责是:拿到解码器输出的原始帧数据,按裁剪区域做色彩空间转换,写入目标缓冲区。

核心逻辑可以简化为这样一段:

// FrameDecoder.cpp —— VideoFrameDecoder::onOutputReceived()
int32_t width, height, stride, srcFormat;
// 从 outputFormat 中取出解码器上报的尺寸与 stride
outputFormat->findInt32("width", &width);
outputFormat->findInt32("height", &height);
outputFormat->findInt32("color-format", &srcFormat);

// 依据裁剪区域分配目标缓冲区
sp<IMemory> frameMem = allocVideoFrame(
        trackMeta(),
        (crop_right - crop_left + 1),
        (crop_bottom - crop_top + 1),
        0, 0, dstBpp(), bitDepth, ...);

// 色彩转换:源尺寸按 width/height/stride,目标按 mFrame 实际大小
colorConverter.convert(
        (const uint8_t *)frameData,
        width, height, stride,
        crop_left, crop_top, crop_right, crop_bottom,
        mFrame->getFlattenedData(),
        mFrame->mWidth, mFrame->mHeight, mFrame->mRowBytes,
        0, 0, mFrame->mWidth - 1, mFrame->mHeight - 1);

危险点就在两套尺寸的错配:分配目标缓冲区时用的是 crop 区域推导出的宽高(甚至被 slice-height 二次改写),而色彩转换读取源数据时用的是解码器上报的 width / height / stride。当恶意媒体文件让上报尺寸与裁剪区域不一致时,convert() 按源尺寸计算出的写入量会超过 mFrame 的实际容量,写入便越过堆缓冲区尾部,污染相邻的堆对象元数据。

堆溢出导致远程代码执行的示意流程

这就是堆溢出最典型的升级路径:崩溃只是最坏的情况;一旦攻击者能控制溢出内容与相邻堆布局,就能覆写函数指针、vtable 或后续释放的元数据,把一次内存破坏转化为任意代码执行,在框架层进程中执行。

四、同批公告中其他需要立刻关注的点

11 月公告规模空前,216 个漏洞、23 个 Critical,其中几个与本漏洞同一量级:

  • CVE-2026-58876 / CVE-2026-58936:System 组件,免交互远程代码执行,Google 确认存在在野利用。
  • CVE-2026-58882(”SMS of Death”):decodeWapPdu 处理 WAP Push 消息时崩溃 com.android.phone,可导致呼叫(含紧急呼叫)中断,且设备会在重启后反复重放该恶意消息形成崩溃循环。研究者 Mark B 于 10 月 29 日发布的技术分析中在多款机型上复现了崩溃;不过 Google 公告并未明确确认该 CVE 与这份研究即同一问题,引用时需保留这一区分。
  • 内核层:6 个 Critical,涉及蓝牙(2 个)、pKVM(3 个)与 HID(1 个),最严重者无需交互即可提权。
  • 基带侧:MediaTek 调制解调器 8 个 Critical,MediaTek 自身公告披露了其中 6 个(CVE-2026-20499、CVE-2026-20545 至 CVE-2026-20549),均因缺少边界检查、整数溢出或输入校验不当导致的越界写;高通闭源组件另有一个 CVE-2026-25285。厂商均表示未发现在野利用。

五、验证方法:怎么确认自己是否受影响

  1. 查补丁级别:进入「设置 → 关于手机 → 软件信息」,确认”安全补丁级别”为 2026-11-01 或更高。低于该日期的设备理论上仍受影响,具体还取决于厂商与运营商的推送节奏。
  2. 不要只看系统版本:Android 14/15/16/16-qpr2/17 全部在影响范围内,包括长期支持机型;反之更老的系统(Android 13 及以下)不在公告的修复清单中,但也不能因此认为安全。
  3. 审计媒体路径:如果你的产品集成了 libstagefright 或调用了 MediaMetadataRetriever / MediaCodec 做视频帧提取,需检查是否存在自研的格式解析与尺寸校验逻辑,尤其是依赖解码器上报 stride 的场合。
  4. 关注利用迹象:留意系统进程 mediaserver / media.sw 相关的异常崩溃日志,以及框架进程被异常重启的记录。

六、未来趋势预测

CVE-2026-58868 折射出一个正在成型的攻击面迁移方向:从”应用层逻辑漏洞”转向”媒体与框架层的内存安全漏洞”。

一方面,Stagefright 之后的十余年里,Android 媒体栈已经历多轮沙箱化与权限收敛,框架层进程被进一步隔离在权限更低的服务中;但这类隔离恰恰要求解析器在极小的地址空间里正确处理不可信输入,一次越界写就足以在受限沙箱内部完成提权。另一方面,零点击触发路径正在变得比”诱导安装应用”更廉价——一条消息、一个自动拉取的缩略图就够了。

值得持续关注的方向包括:更多针对同一 FrameDecoder / ColorConverter 路径的边界检查缺陷;厂商在推送 2026-11-01 补丁时对不同芯片平台的差异表现;以及该漏洞是否会像过去的 Stagefright 系列一样,出现公开的 PoC 与在野利用工具包。

结语:CVE-2026-58868 的真正重量不在于它的分数,而在于它把”必须点一下”的前提彻底删掉了。对移动端安全团队而言,媒体输入路径的内存安全审计,已经从可选项变成了必选项。

版权声明:本文由华盟网原创发布,保留所有权利。配图由华盟网授权使用。

© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容