文章

PVE 7 的登录绕过已在野外被利用:先堵 8006,再安排升级

静水流深 6小时前 · 1,614 字 · 约 5 分钟 · 17 次阅读
我发布了文章:《PVE 7 的登录绕过已在野外被利用:先堵 8006,再安排升级》

官方已经把话说死了

9 月 1 日,Proxmox 官方安全公告 PSA-2026-00043-1(CVE-2023-54391)挂出来:受影响的包是 libpve-access-control,版本区间 >= 7.0-7 且 < 8.0.4,大致对应 PVE 7.0 到 7.4(2024 年 7 月就已 EOL),顺带还包括最初的 8.0。修复版本是 2023 年 7 月发布的 8.0.4 及之后,官方明确写:没有任何受支持的 PVE 版本受影响。更要紧的一句是——两天内收到多起独立报告,并且报告了野外利用。

为什么一个参数就能进 root

登录接口 POST /api2/json/access/ticket 有个 tfa-challenge 参数,用来完成二次因子的第二步。在受影响版本里,对没配二次因子的用户,这个参数既不做校验,又会因为它的存在直接跳过密码校验。结果就是:攻击者只要能访问 API 端口 8006(直连或经过反向代理都算),传一个任意值,就能以任意已启用、没开二次因子的用户身份登录——默认包含 root@pam,全程不需要任何凭据。

先判定,别看大版本号

包版本和大版本只是松散对应,官方给的判定方式是查包:

dpkg-query -W -f '${Version}\n' libpve-access-control
# 或者
pveversion -v   # 在输出里找 libpve-access-control 的版本

三步处置,按顺序做

第一步,把 8006 收起来。 官方一直的建议就是把 API 访问限制在可信网络,访问不到就不算暴露。VPN、防火墙白名单、只放行自己的出口 IP,哪个顺手用哪个。改之前先确认你还有别的通路(SSH 或 IPMI/iKVM),别把自己锁在门外。

第二步,暂时升不了就打官方给的补丁。 公告里给了一段 sed,给 tfa-challenge 补上校验,正常密码登录和二次因子登录都不受影响:

sed -i.bck 's/^\t# This is the 2nd factor, use the password for the OTP response.$/\tverify_ticket($tfa_challenge, 0, $username);\n\t# This is the 2nd factor, use the password for the OTP response./' /usr/share/perl5/PVE/AccessControl.pm
grep -n 'verify_ticket($tfa_challenge, 0, $username)' /usr/share/perl5/PVE/AccessControl.pm | wc -l
systemctl reload-or-restart pvedaemon pveproxy

那个 grep 必须输出 3,输出别的数说明补丁没打上,机器还是开着门。想回滚就把 .bck 文件还原,再重启这两个服务。

第三步,给 root@pam 配二次因子。 官方写明:配了任意二次因子的用户不受影响。这一步不用停机。

但这些都只是权宜之计

PVE 7 系列已经 EOL,之后的修复它都拿不到——不只是 PVE 自身,还有内核、QEMU、LXC 这些组件。官方原话:升级到受支持的版本是唯一持久的解法。

从 7 升到 8 是跨 Debian 大版本的事,官方 wiki 的 Upgrade from 7 to 8 写得挺细,几个硬前提值得抄下来:

  1. 先把所有节点升到 PVE 7.4 最新小版本;
  2. pve7to8 --full,把报告的问题逐个清掉(脚本只报告、不改系统);
  3. 有效且验证过的备份,最好先在实验室里恢复一次;
  4. 有 IPMI/iKVM 或物理访问,别只靠 SSH;
  5. 根分区至少 5GB 空闲;
  6. 然后才是把 bullseye 源换成 bookworm、加上 PVE 8 源、apt dist-upgrade、重启进新内核。

用 Ceph 的、装了第三方存储插件的、硬件上了年纪的,wiki 里都单列了坑,动手前翻一遍。做集群的一台一台来。

升上去也不是终点

就在 9 月 21 日,官方又发了两条:PSA-2026-00047-1,防火墙配置文件可以被注入换行(修复版本 pve-firewall >= 6.0.6、libpve-common-perl >= 9.2.2);PSA-2026-00050-1,有建用户权限的人可以改掉别人的 PAM 密码(修复版本 libpve-access-control >= 9.1.2)。两条都落在受支持的 8.x/9.x 上。意思很清楚:留在受支持版本里不等于可以不管公告,订阅官方安全公告版块、定期打补丁才是长期动作。

适用对象就两类人:独服上装 PVE 自己开小鸡的,和家里或办公室跑一台 PVE 做 homelab、NAS 的。如果机器上还跑着 7.x,今天该做的第一件事不是升级,是先把 8006 关掉。

登录 后参与评论

还没有人评论,来抢沙发