安全/密钥:修复 key_task_permission 中的 slab-out-of-bounds(CVE-2024-50301)
CVE编号
CVE-2024-50301
利用情况
暂无
补丁情况
N/A
披露时间
2024-11-19
漏洞描述
在Linux内核中,存在一个已解决的漏洞,具体描述如下:该漏洞涉及安全模块中的键管理功能。KASAN报告了一个越界读取问题。在`key_task_permission`函数中,存在`slab-out-of-bounds`错误。该漏洞的详细情况如下:* 报告了边界读取错误,具体在`__kuid_val`函数(位于include/linux/uidgid.h的第36行)、`uid_eq`函数(位于include/linux/uidgid.h的第63行内联)以及`key_task_permission`函数(位于security/keys/permission.c的第54行)。错误发生在地址`ffff88813c3ab618`处,由进程stress-ng(PID 4362)触发。* CPU信息:CPU编号为2,进程PID为4362,进程名为stress-ng。调用堆栈显示了相关的函数调用序列。* 该问题也被syzbot报告。复现步骤如下:1. 获取超过32个具有相似哈希值的输入,这些输入的哈希值以'0xxxxxxxe6'模式结束。2. 重启系统并添加步骤1中获得的密钥。问题产生的原因在于:在`search_nested_keyrings`函数中,当遍历节点中的槽位时(在标签`ascend_to_node`之下),如果槽位指针是元指针并且节点->反向指针不等于NULL(意味着是根节点),则会继续执行到`descend_to_node`。但是存在一个特殊情况:如果节点是根节点,并且其中一个槽位指向一个快捷方式,则会将其视为一个密钥环。问题在于如何判断指针是否指向密钥环,由函数`keyring_ptr_is_keyring`决定。然而,问题在于`KEYRING_PTR_SUBTYPE`的值为`0x2UL`,与`ASSOC_ARRAY_PTR_SUBTYPE_MASK`相同。当添加32个具有相似哈希值的密钥到树中时,如果根节点的某些槽位指向的密钥哈希值不相似(例如槽位0),则会导致节点分裂而不使用快捷方式。当这些具有相似哈希值的节点充满密钥并以快捷方式分裂时,会形成特定的树结构,可能导致错误的读取操作。为了修复这个问题,如果指针是一个快捷方式,无论节点是否是根节点,都应该跳转到`descend_to_node`。
解决建议
建议您更新当前系统或软件至最新版,完成漏洞的修复。
文章评论