针对 CVE-2026-74580 (Vghost) 的 Linux 内核权限审计与加固实践

枫少@KillBoy
枫少@KillBoy
枫少@KillBoy
管理员
287
文章
0
粉丝
安全运维341,500字数 2682阅读8分56秒阅读模式
AI智能摘要
AI 生成的文章内容摘要

CVE-2026-74580(Vghost)的排查重点,不是简单确认服务器上是否存在 /dev/kvm,而是确认本地用户能否接触虚拟化相关设备节点,以及当前内核是否已经获得发行版提供的修复。公开资料将该漏洞描述为 linux 内核 vhost 子系统中的缺陷:本地攻击者可能在 IOTLB 已连接时,通过特定 ioctl 重新配置虚拟环(vring)。因此,设备节点权限是降低暴露面的措施,但不能替代内核更新,也不能仅凭 /dev/kvm 的权限判断主机是否已经修复。

Linux 虚拟化设备节点权限审计示意图

先确认漏洞范围,不要把 /dev/kvm 当成唯一指标

现有资料明确指向 vhost 子系统和虚拟环重配置路径,但没有提供 Ubuntu 或 Amazon linux 2023 的统一修复版本,也没有证明 /dev/kvm 本身就是该漏洞的唯一入口。实际排查时,应把 /dev/kvm 作为虚拟化权限审计的一部分,同时检查系统中是否存在其他虚拟化和 vhost 相关设备节点。

先记录发行版、内核和设备节点状态:

cat /etc/os-release
uname -a
uname -r

printf '%sn' '--- virtualization-related device nodes ---'
find /dev -maxdepth 1 ( -name 'kvm' -o -name 'vhost*' ) -ls 2>/dev/null

printf '%sn' '--- loaded modules ---'
lsmod | grep -E '(^|[[:space:]])(vhost|kvm)' || true

lsmod 没有匹配项,并不代表系统完全不存在相关能力,因为模块可能尚未加载,也可能由其他服务按需加载。相反,发现 kvm 或 vhost 模块,也不能直接说明系统易受攻击,最终仍要以发行版安全公告和已安装内核的修复状态为准。

Red Hat 的漏洞描述明确提到,利用条件涉及本地攻击者、vhost 子系统、IOTLB 和特定 ioctl。Ubuntu 的 OSV 条目则提供了对应的 Ubuntu 安全漏洞记录。对于 Amazon Linux 2023,搜索到的 ALAS2023-2026-1753 摘要对应的是另一个漏洞,不能把它当成 CVE-2026-74580 的修复依据。管理员应继续在本发行版的安全公告中核对 CVE 编号、受影响内核和修复内核。

检查 /dev/kvm 及相关节点权限

先查看传统 Unix 权限、扩展 ACL 和所属用户组:

stat -c '%A %a %U:%G %n' /dev/kvm /dev/vhost* 2>/dev/null

getfacl -p /dev/kvm 2>/dev/null
getfacl -p /dev/vhost* 2>/dev/null

getent group kvm
getent group libvirt 2>/dev/null

重点关注以下几类情况:

  • 设备节点是否对“其他用户”开放写权限;
  • 节点是否属于一个包含普通登录用户的用户组;
  • 是否存在扩展 ACL,导致传统权限位看起来收紧,但某些用户仍然拥有读写权限;
  • /dev/kvm 或 vhost 相关节点是否被错误设置为全局可写;
  • 节点权限是否由 udev 或虚拟化服务动态生成,重启后可能恢复原状。

随后检查当前登录用户及服务账号的组成员关系:

id
id 用户名

for user in $(getent passwd | cut -d: -f1); do
    groups "$user" 2>/dev/null | grep -E '(^|[[:space:]])(kvm|libvirt)([[:space:]]|$)' 
        && echo "matched: $user"
done

如果主机不需要为普通用户提供虚拟机创建或管理能力,应重点清理不必要的 kvm、libvirt 等组成员。删除组成员前,要先确认该账号不是虚拟化平台、构建任务或其他业务服务的必要运行账号。修改组成员后,已有登录会话通常不会立即失去旧的组凭据,应要求用户重新登录,必要时重启对应服务。

还可以检查设备当前是否被进程打开:

fuser -v /dev/kvm 2>/dev/null
fuser -v /dev/vhost* 2>/dev/null

lsof /dev/kvm /dev/vhost* 2>/dev/null

这一步不能判断进程是否利用了漏洞,但能帮助管理员识别哪些服务确实依赖这些节点。对生产环境直接收紧权限之前,先保留进程、服务和账号对应关系,避免把虚拟机管理服务或关键业务任务一并中断。

Ubuntu 与 Amazon Linux 2023 不要套用同一组权限假设

不同发行版、镜像和云平台初始化方式,可能为设备节点设置不同的用户组、权限位和动态规则。即使两台主机都显示为 Linux,也不能假设它们都使用相同的节点属主或相同的虚拟化服务。

建议分别在 Ubuntu 和 Amazon Linux 2023 主机上保存以下结果,再进行对比:

{
    date
    cat /etc/os-release
    uname -r
    stat -c '%A %a %U:%G %n' /dev/kvm /dev/vhost* 2>/dev/null
    getfacl -p /dev/kvm /dev/vhost* 2>/dev/null
    getent group kvm
    getent group libvirt 2>/dev/null
    lsmod | grep -E '(^|[[:space:]])(vhost|kvm)' || true
} | tee /var/tmp/virtualization-permission-audit.txt

对比时不要只看权限数字。例如,一台主机可能显示为 root:kvm 且权限为组可读写,另一台主机可能使用不同的属组;也可能有 ACL 覆盖基本权限。正确做法是先确认发行版原本的设计,再根据实际业务需求缩小授权范围,而不是为了得到相同的权限字符串,直接对两类系统执行同一条 chmod 命令。

如果节点权限由规则动态生成,手工执行 chmod 只能解决当前状态。应进一步检查设备管理规则和相关服务配置,确认权限在重启、模块重新加载或虚拟化服务启动后仍然符合预期。

通过用户组限制本地访问权限

对不需要使用 KVM 或虚拟化管理能力的普通账号,最直接的措施是移除不必要的特权组成员:

sudo gpasswd -d 用户名 kvm
sudo gpasswd -d 用户名 libvirt

执行前先确认组确实存在,且用户确实属于该组:

getent group kvm
id 用户名

如果设备节点被错误设置为全局可写,应先记录当前状态,再按照发行版默认策略恢复属主和权限。下面的命令仅适用于管理员已经确认系统应使用 root:kvm 且允许组成员访问的场景:

sudo chown root:kvm /dev/kvm
sudo chmod 0660 /dev/kvm

不要把这两条命令直接套用到所有主机。某些系统可能使用不同的用户组,或者通过专门服务管理节点权限。对于 /dev/vhost*,同样应先查看实际节点、属主和动态规则,再决定是否收紧权限,不能因为文件名包含 vhost 就批量修改整个目录。

更稳妥的权限目标通常是:设备节点由系统管理员或受控服务账号拥有,普通用户不具备写权限,只有确实承担虚拟机管理职责的账号进入对应用户组。若业务只需要查看状态而不需要操作设备,也不要默认授予读写权限。

检查并谨慎使用内核参数

内核参数不能凭空替代 CVE 修复。当前资料没有给出 CVE-2026-74580 对应的通用参数名、推荐值或适用于 Ubuntu 与 Amazon Linux 2023 的统一配置,因此不要自行编造类似“关闭某个 vhost 参数即可修复”的结论。

可以先审计当前内核参数中是否存在与虚拟化、IOMMU 或设备访问相关的配置:

sysctl -a 2>/dev/null | grep -Ei 'vhost|kvm|iommu|virt|io'

如果发行版安全公告明确给出了针对该漏洞的参数或模块配置,应以公告中的参数名和值为准,并先在测试主机验证。持久化配置可以采用以下流程:

sudo install -m 0644 /dev/null /etc/sysctl.d/99-local-virtualization-hardening.conf
sudo editor /etc/sysctl.d/99-local-virtualization-hardening.conf

配置文件中只能填写厂商公告明确要求的参数,例如:

# 仅填写发行版安全公告明确给出的参数和值
# 参数名=值

保存后,使用发行版提供的 sysctl 加载方式应用配置,并复核实际值:

sudo sysctl --system
sysctl -a 2>/dev/null | grep -Ei 'vhost|kvm|iommu|virt|io'

如果公告要求更新内核,则应优先完成内核更新和重启,而不是把未注明用途的参数作为替代方案。参数调整可能影响虚拟机启动、网络虚拟化、设备直通和 I/O 行为,生产环境必须先确认运行中的虚拟化工作负载。

不需要虚拟化时,减少相关组件暴露面

如果服务器没有运行虚拟机、容器运行时不依赖相关能力,也没有业务需要访问 KVM 或 vhost 设备,可以从服务和模块两个层面确认是否能够关闭相关组件。先找出使用者:

ps -ef | grep -E '[q]emu|[k]vm|[v]host|[l]ibvirt'
systemctl list-units --type=service --state=running | grep -Ei 'virt|qemu|kvm'

确认没有依赖后,再按照该发行版和业务服务的标准停用流程处理。不要在仍有虚拟机或网络虚拟化任务运行时直接卸载模块,也不要通过粗暴禁用内核模块来代替漏洞修复。对于云主机,是否能够使用 KVM 还可能由宿主机和实例类型决定,客体系统看到的设备节点并不一定代表完整的虚拟化控制能力。

建立一次性修复后的复核清单

完成更新和权限调整后,至少复核以下项目:

uname -r
stat -c '%A %a %U:%G %n' /dev/kvm /dev/vhost* 2>/dev/null
getfacl -p /dev/kvm /dev/vhost* 2>/dev/null
getent group kvm
getent group libvirt 2>/dev/null
lsmod | grep -E '(^|[[:space:]])(vhost|kvm)' || true

然后用一个不应具备虚拟化权限的普通账号重新登录,确认其组成员和设备访问结果:

id
test -r /dev/kvm && echo "readable" || echo "not readable"
test -w /dev/kvm && echo "writable" || echo "not writable"

“不可写”只是权限层面的结果,不代表漏洞已经修复;“节点不存在”也不代表内核一定安全。最终判断应同时满足三个条件:发行版公告确认当前内核已包含修复、非必要账号不再拥有设备访问权限、主机上的虚拟化服务和节点权限在重启后仍保持预期状态。

可供核对的安全资料包括 Ubuntu 的 CVE-2026-74580 OSV 记录 和 Red Hat 对 CVE-2026-74580 的漏洞描述。如果本机使用 Amazon Linux 2023,应以该发行版针对同一 CVE 的安全公告和已安装内核状态为最终依据,不要用其他 CVE 的 ALAS 条目替代判断。

 
枫少@KillBoy
评论  34  访客  33  作者  1
    • 鸡腿汉堡侠
      鸡腿汉堡侠 0

      别把/dev/kvm当成漏洞修复的唯一判断依据

      • 晴空
        晴空 1

        先核对发行版公告和内核版本,这个提醒很关键

          • 古旧巷
            古旧巷 1

            @ 晴空 还要确认已安装内核是否包含对应修复,不能只看版本号

          • 长亭暮雪
            长亭暮雪 0

            ACL这块确实容易被忽略,光看权限位不够

            • 甜奶小羊
              甜奶小羊 1

              权限收紧前先查清楚哪些服务正在使用设备

                • HornHops
                  HornHops 1

                  @ 甜奶小羊 用 lsof 或 fuser 能先把设备和具体服务对应起来

                • 敏锐的鹰眼
                  敏锐的鹰眼 1

                  不同发行版直接套同一套chmod命令风险不小

                    • 沙漠独行者
                      沙漠独行者 1

                      @ 敏锐的鹰眼 动态设备规则可能会覆盖手工修改,确实不能只改一次就算完成

                    • Zero狐
                      Zero狐 1

                      普通账号的kvm组成员最好定期审计一下

                      • 月影幻
                        月影幻 1

                        重启后权限是否恢复,确实需要纳入复核

                        • 猫夜行
                          猫夜行 1

                          想问下vhost相关节点在不同云镜像里差异大吗

                            • 河伯之女
                              河伯之女 0

                              @ 猫夜行 不同镜像的属主、用户组和动态规则都可能不一样,还是以实机检查为准

                            • 椰奶小兔子
                              椰奶小兔子 1

                              没有虚拟化需求的机器,减少组件暴露面更稳妥

                                • 扯筋
                                  扯筋 1

                                  @ 椰奶小兔子 确实,停用前先确认业务依赖,避免误伤虚拟机服务

                                • MoonlightDrifter
                                  MoonlightDrifter 1

                                  @豆包 这种细粒度审计流程太实用了,打算照着整理一份自家内核基线

                                    • doubao
                                      doubao 6

                                      @ MoonlightDrifter 可以先按照文中步骤记录设备节点、权限和模块信息,整理成清单,再结合发行版安全公告核对修复状态。

                                    • 聊天永动机
                                      聊天永动机 0

                                      内核更新和权限加固还是不能互相替代

                                      • 寒澈
                                        寒澈 1

                                        lsmod 没匹配到,不等于相关模块一定不存在

                                        • NamiRipple
                                          NamiRipple 0

                                          移除用户组后要重新登录,旧会话里的权限不会立刻消失

                                          • 龙啸九天
                                            龙啸九天 1

                                            内核参数别凭经验乱加,公告没写的配置不建议自行尝试

                                            • ReverieShade
                                              ReverieShade 2

                                              设备只需查看时,也没必要默认给读写权限

                                              • 青影
                                                青影 1

                                                云主机里看到设备节点,不一定代表拥有完整的虚拟化控制能力

                                                • 慢步青云
                                                  慢步青云 1

                                                  重启和模块重新加载后再测一次,才能确认规则没有被覆盖

                                                    • 虚空之影
                                                      虚空之影 1

                                                      @ 慢步青云 模块重载和相关服务重新启动后的状态,也应该一起复核

                                                    • 血色瞳孔
                                                      血色瞳孔 1

                                                      不同发行版的安全公告要按同一个 CVE 逐条核对,别拿相近条目替代

                                                      • 平行宇宙清洁工
                                                        平行宇宙清洁工 1

                                                        先用 fuser 查清谁在占用,再动权限

                                                          • 咕噜咕噜魔法师
                                                            咕噜咕噜魔法师 1

                                                            @ 平行宇宙清洁工 对,先确认占用者再动权限更稳,也能避免误伤正在运行的虚拟化服务。

                                                          • 果冻小
                                                            果冻小 1

                                                            组成员改完别忘了重新登录,旧会话权限还在

                                                            • 柠檬薄荷水
                                                              柠檬薄荷水 1

                                                              普通测试账号最好分别验证读权限和写权限

                                                              • 在云上种植闪电
                                                                在云上种植闪电 1

                                                                内核补丁没跟上,光收紧设备权限还是不够

                                                                  • 枫少@KillBoy
                                                                    枫少@KillBoy

                                                                    @ 在云上种植闪电 没错,设备权限只能降低暴露面,不能替代内核补丁。最终还是要以发行版安全公告和已安装内核的修复状态为准。

                                                                  • 独夜人
                                                                    独夜人 1

                                                                    sysctl调整先在测试机验证,避免影响虚拟化业务

                                                                    • 银河幻想
                                                                      银河幻想 1

                                                                      手动改权限只是临时的,重启后还得检查udev规则

                                                                      • 幻光流影
                                                                        幻光流影 1

                                                                        看到设备不可写,也不能据此认定内核漏洞已经修复

                                                                      匿名

                                                                      发表评论

                                                                      匿名网友

                                                                      拖动滑块以完成验证