OpenBSD IPv6 堆栈中的远程漏洞

在 OpenBSD 中负责 IPv6 地址自动配置(IPv6 Stateless Address Autoconfiguration,RFC 4862)的后台进程 slaacd 中,已发现一个漏洞,该漏洞在接收专门设计的 IPv6 路由器通告(RA,路由器通告)时会导致缓冲区溢出。

最初,IPv6 地址自动配置功能是在内核级别实现的,但从 OpenBSD 6.2 开始,它被移至单独的非特权 slaacd 进程。 该进程负责发送 RS(路由器请求)消息并解析 RA(路由器通告)响应以及有关路由器和网络连接参数的信息。

7 月份,slaacd 修复了一个错误,如果在 RDNSS(递归 DNS 服务器)列表中指定了 XNUMX 个服务器,该错误会导致其崩溃。 这一疏忽引起了独立研究人员的注意,他们试图检查 slaacd 代码是否存在解析 RA 消息中字段时发生的其他错误。 分析表明,代码中还存在另一个问题,该问题在处理 DNSSL(DNS 搜索列表)字段时表现出来,其中包括 DNS 的域名和主机模板列表。

DNSSL 列表中的每个名称都使用空分隔符和中间的一字节标签进行编码,这些标签确定后面的数据的大小。 该漏洞是由于在列表解析代码中,将一个大小的字段复制到一个有符号整数类型的变量(“len = data[pos]”)中而导致的。 因此,如果在设置了最高有效位的字段中指定了一个值,则该值将在条件运算符中被视为负数,并检查最大允许大小(“if (len > 63 || len + pos + 1 > datalen) {“) 将不起作用,这将导致使用复制数据大小超过缓冲区大小的参数调用 memcpy。

OpenBSD IPv6 堆栈中的远程漏洞
OpenBSD IPv6 堆栈中的远程漏洞


来源: opennet.ru

添加评论