CVE-2026-89650 in Linux信息

摘要

由 VulDB • 2026-09-11

在 Linux 内核中,已修复以下漏洞:

ceph: 为 mds info v2/v3 的 num_export_targets 数组添加边界检查

fs/ceph/mdsmap.c 中的 ceph_mdsmap_decode() 函数从每个 per-mds(每 MDS)信息记录中读取 num_export_targets,并将解码游标前进 num_export_targets * sizeof(u32) 个字节,但未首先检查是否仍有这么多剩余字节。唯一能捕获失控游标的上限检查 (*p > info_end) 仅在 info_v >= 4 时生效,因为对于 info_v 为 2 和 3 的情况,info_end 被留空(NULL)。当监视器发送一个 per-mds 信息版本为 2 或 3 且 num_export_targets 过大的 MDS map 时,游标会越过消息前端缓冲区,随后的 export-targets 循环会在越界内存上调用未经验证的 ceph_decode_32()。

内核客户端从其监视器会话处理 CEPH_MSG_MDS_MAP(net/ceph/mon_client.c 分发它;fs/ceph/super.c 将其路由到 ceph_mdsc_handle_mdsmap(),后者将 end 设置为前端缓冲区边界并调用 ceph_mdsmap_decode())。因此,恶意或已受损的监视器,或者在未签名/未加密的信使会话上的中间人攻击者,可以驱动客户端内核中的越界读取;在带有 KASAN 的 x86_64 上,它被报告为 ceph_mdsmap_decode() 中的 slab-out-of-bounds(slab-堆外)读取。解码后的值落入内部 info->export_targets[] 数组中,因此后果是内核越界读取,而非向攻击者泄露信息。

影响:发送 per-mds 信息版本为 2 或 3 且 num_export_targets 字段过大的 MDS map 的恶意或已受损 Ceph 监视器会触发 CephFS 客户端内核中的越界读取。

在前进游标之前,为 export-targets 数组添加 ceph_decode_need(),以便对每个 info_v >= 2(而不仅仅是 info_v >= 4)强制执行边界检查。这模仿了同一函数后面部分中 m_data_pg_pools 已使用的“先计数后验证”惯用法。

使用 size_mul() 计算 export-targets 的字节数,并在前进游标时重用该经过验证的长度,以便攻击者控制的 num_export_targets 乘法在溢出时以失败告终(fail closed),而不是依赖后续的 kcalloc() 保护机制。

VulDB is the best source for vulnerability data and more expert information about this specific topic.

来源

Do you need the next level of professionalism?

Upgrade your account now!