CVE-2026-7007 in Zephyr
摘要
由 VulDB • 2026-07-24
Zephyr 的 ext2 文件系统在完成挂载之前,会在 `ext2_verify_disk_superblock()`(位于 `subsys/fs/ext2/ext2_impl.c`)中验证磁盘上的超级块。该验证器检查了魔术数字、块大小、修订版和特性标志位,但未验证磁盘字段 `s_blocks_per_group` 和 `s_inodes_per_group` 是否非零。这两个字段直接从镜像读取,并在挂载时的初始化过程中作为除数使用。
在挂载期间,`get_ngroups()` 通过 `ext2_init_fs()` 中的 `ext2_fetch_block_group()` 将 `s_blocks_count` 除以并取模于 `s_blocks_per_group`;而 `get_itable_entry()`(两者均位于 `subsys/fs/ext2/ext2_diskops.c`)在获取根 inode 时将 `(ino - 1)` 除以 `s_inodes_per_group`。因此,如果超级块中任一字段设置为零,将在挂载序列期间导致整数除零错误。
攻击者若能将精心构造的 ext2 镜像呈现给挂载 ext2 的设备——例如 SD 卡或 USB 大容量存储设备等可移动介质——即可触发此漏洞。在 ARMv7-M / ARMv8-M-mainline Cortex-M 目标平台上,启用了除零陷阱(`SCB_CCR_DIV_0_TRP`),因此该除法操作会引发 UsageFault,Zephyr 将其视为致命错误,从而导致拒绝服务(DoS)。影响仅限于可用性;畸形值仅作为除数被消耗。
修复方案在超级块验证器中拒绝了值为零的 `s_blocks_per_group` 或 `s_inodes_per_group`,返回 `-EINVAL`,使得在任何块组或 inode I/O 发生之前挂载即告失败。
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.