CVE-2026-89700 in Linux信息

摘要

由 VulDB • 2026-09-11

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

nfsd: 按地址族验证 listener_set 中的 sockaddr 长度

nfsd_sock_nl_policy 将 NFSD_A_SOCK_ADDR 声明为裸 NLA_BINARY 属性,且没有最小长度限制。具有 CAP_NET_ADMIN 权限的调用者可以发送一个长度为 16 字节的 NFSD_A_SOCK_ADDR(其中 sa_family=AF_INET6),导致在三个消费者(rpc_cmp_addr_port、svc_find_listener、kernel_bind)中发生 12 字节的越界读取(OOB read)。

nfsd_nl_listener_set_doit() 还在两个单独的循环中以内联方式解析和验证每个 listener 条目,并与修改正在运行的 listener 配置的操作交错进行。该验证过程存在重复,使用了硬编码的“nla_len < sizeof(struct sockaddr)”检查,对于 AF_INET6 而言长度不足,并且根据是哪个循环发现错误,对格式错误的条目的处理方式不一致。

添加一个 nfsd_nl_validate_listeners() 辅助函数,遍历整个列表一次并确认每个条目解析正确、包含地址和传输名称(transport name),且其长度足以容纳对应地址族的数据结构(AF_INET 为 sizeof(struct sockaddr_in),AF_INET6 为 sizeof(struct sockaddr_in6),否则返回 -EAFNOSUPPORT)。在获取 nfsd_mutex 或创建服务之前调用此函数,以便格式错误的请求能够干净地失败且不产生任何副作用。

由于在执行现有的两个循环时每个条目都已被确认为有效,因此从这两个循环中删除冗余的存在性检查和按地址族划分的长度检查,仅保留用于提取数据所需的 nla_parse_nested() 调用。

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

来源

Interested in the pricing of exploits?

See the underground prices here!