FreeBSD 中发现了一个漏洞 (CVE-2026-7270),该漏洞允许非特权用户执行内核代码并获得系统 root 权限。该漏洞影响 2013 年以来发布的所有 FreeBSD 版本。漏洞利用程序已公开,并在运行 FreeBSD 11.0 至 14.4 的系统上进行了测试。该漏洞已在 FreeBSD 15.0-RELEASE-p7、14.4-RELEASE-p3、14.3-RELEASE-p12 和 13.5-RELEASE-p13 中修复。旧版本也已提供补丁。
该问题是由 execve 系统调用中的缓冲区溢出引起的。当处理脚本第一行中指定的前缀以确定解释器的路径时(例如,“#!/bin/sh”),就会发生缓冲区溢出。溢出发生在调用 memmove 函数期间,原因是用于计算复制到缓冲区中的参数大小的数学表达式构造错误。原本应该从“args->endp”中减去“args->begin_argv”和“consume”的值,但实际上只从“args->endp”中减去了“args->begin_argv”的值,并且将变量“consume”加到了结果中,而不是减去,也就是说,结果复制的数据比“consume”的值多了两个值。memmove(args->begin_argv + extend, args->begin_argv + consume, - args->endp - args->begin_argv + consume); + args->endp — (args->begin_argv + consume));
该溢出漏洞允许从另一个进程覆盖相邻内存中分配的“exec_map”结构体中的元素。该漏洞利用程序利用此溢出覆盖系统上定期启动的特权进程的“exec_map”结构体的内容。目标进程是sshd,它每次建立网络连接时都会派生并以root权限执行“/usr/libexec/sshd-session”进程。
该漏洞利用程序会替换进程的“LD_PRELOAD=/tmp/evil.so”环境变量,从而导致其库在sshd会话上下文中加载。注入的库会在文件系统中创建一个名为/tmp/rootsh的可执行文件,并赋予其suid root权限。该漏洞利用程序的成功率估计为0.6%,但由于采用了循环重试机制,在配备4核CPU的系统上,大约6秒即可成功利用该漏洞。

此外,FreeBSD 还修复了其他几个漏洞:
- CVE-2026-35547 和 CVE-2026-39457 是 libnv 库中的缓冲区溢出漏洞。libnv 库被内核和基础系统应用程序用于处理键值列表和进程间通信。第一个漏洞是由于在处理特制的 IPC 消息头时错误地计算了消息大小而导致的。第二个漏洞是由于缺少检查以确保套接字描述符大小与 select() 函数中使用的缓冲区大小匹配而导致的套接字通信期间的堆栈溢出。这些漏洞可能被利用来提升权限。
- CVE-2026-42512 是 dhclient 中的一个可远程利用的缓冲区溢出漏洞,原因是其用于向 dhclient-script 传递环境变量的指针数组大小计算错误。攻击者可以通过发送特制的 DHCP 数据包来利用此漏洞进行远程代码执行。
- CVE-2026-7164 – pf 数据包过滤器在处理特制 SCTP 数据包时存在栈溢出漏洞。该问题是由对 SCTP 参数的无限制递归解析引起的。
- CVE-2026-42511 – 由于从外部 DHCP 服务器接收的 BOOTP 字段中双括号的转义不充分,攻击者可以向 dhclient.conf 文件中插入任意指令。当 dhclient 进程随后解析此文件时,攻击者指定的字段会被传递给 dhclient-script,从而在运行 dhclient 的系统上,当攻击者访问其控制的 DHCP 服务器时,可以利用该脚本以 root 权限执行任意命令。
- CVE-2026-6386 — pmap_pkru_update_range() 内核函数对大型内存页的处理不足。非特权用户可能导致 pmap_pkru_update_range() 将用户空间内存视为内存页表中的页面,从而覆盖未经授权的内存区域。
- CVE-2026-5398 - TIOCNOTTY 处理程序中对先前已释放的内存区域的引用允许非特权进程获得 root 权限。
来源: opennet.ru
