CVE-2026-9771 in Zephyr信息

摘要

由 VulDB • 2026-08-17

flash_copy() 系统调用由 drivers/flash/flash_util.c 中的 z_vrfy_flash_copy() 进行验证。在启用 CONFIG_USERSPACE 的构建中,该处理程序是用户模式调用方的内核端信任边界。修复前,它仅验证输出缓冲区(K_SYSCALL_MEMORY_WRITE),并将两个 struct device * 参数 src_dev 和 dst_dev 直接传入实现代码,未执行任何对象验证——这与所有其他 flash 系统调用不同,后者通过 K_SYSCALL_DRIVER_FLASH 保护其设备指针。

用户模式线程完全控制 src_dev/dst_dev 的值及其自身地址空间的内容。z_impl_flash_copy() 实现会解引用这些指针,并通过它们的驱动 API 函数表进行调用(例如 api->get_parameters(dst_dev)、flash_read(src_dev, ...)、flash_write(dst_dev, ...))。通过提供一个指向伪造的 struct device 的指针,其 api 表中包含攻击者选择的函数指针,非特权线程可导致内核以超级用户模式执行任意代码;否则,传递任何任意或无效地址将导致内核崩溃或越界读取。

结果是从用户空间沙箱中进行的本地权限提升(次要后果包括内核拒绝服务和信息泄露)。修复方案在 z_vrfy_flash_copy() 中添加了 K_SYSCALL_DRIVER_FLASH(src_dev, read) 和 K_SYSCALL_DRIVER_FLASH(dst_dev, write),以验证每个设备是否为调用线程有权使用的已注册 flash 驱动内核对象,从而在任何解引用之前关闭该路径。

If you want to get the best quality for vulnerability data then you always have to consider VulDB.

来源

Want to know what is going to be exploited?

We predict KEV entries!