FlawOpen

flawopen.com/Teardowns/cve-2026-1731-beyondtrust-websocket-command-injection

● CVE-2026-1731 · CVSS v4 9.9[1] · 严重
安全研究 · FlawOpen

CVE-2026-1731:BeyondTrust 命令注入

CVE-2026-1731 可通过 WebSocket 在未修补的 BeyondTrust Remote Support/PRA 中免认证执行系统命令。请打补丁并排查暴露设备。

CVSS 向量CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:L/SI:H/SA:L[1]
💡 通俗易懂的原理解析 (ELI5)

想象前台询问访客版本号,却把答案交给会计算公式的计算器,而不是只检查数字。这样输入就可能从数据变成指令。CVE-2026-1731 在 BeyondTrust 服务中暴露了这条边界;修复会在比较前拒绝不是短十进制版本的输入。

核心概念与专有名词

CVE-2026-1731
影响 BeyondTrust Remote Support 与 Privileged Remote Access 的严重、无需身份验证的操作系统命令注入漏洞。
thin-scc-wrapper
BeyondTrust 在客户端协议路径中使用的 shell 封装程序。Rapid7 的补丁分析指出,对端提供的版本值处理是易受攻击的边界。
Bash 算术求值
Bash 数值比较运算符会将操作数作为算术表达式求值。不可信文本因此可能跨越数据与表达式的边界。
CWE-78
未正确处理操作系统命令中特殊元素的问题,也称操作系统命令注入。
CISA KEV
CISA 已知遭利用漏洞目录,记录有现实世界利用证据的漏洞。

框架映射

根本原因剖析 (Root Cause)

BeyondTrust 于 2026 年 2 月发布的公告将 CVE-2026-1731 描述为 Remote Support 和 Privileged Remote Access 中的预认证远程代码执行漏洞,标注 CWE-78 和 CVSS 4.0 9.9 分。特制客户端请求可能以站点用户身份执行操作系统命令。Rapid7 对厂商补丁的分析将源码边界定位在 thin-scc-wrapper 的 WebSocket 路径:脚本读取由对端控制的 remoteVersion,并用 Bash 数值运算符进行比较。此类比较会触发算术求值;不是普通数字的值可能会被当作表达式解析。补丁要求比较前必须匹配一个或两个 ASCII 数字(^[0-9]{1,2}$)。下方代码是基于来源的精简示意,并非完整产品脚本或可利用性证明。BeyondTrust 报告称 2 月 10 日观察到初始利用尝试,活动有限地针对 2 月 9 日前仍未修补且面向互联网的自托管系统。Google Threat Intelligence Group 随后报告了多个利用该 CVE 的集群及不同后续行为。这些报告证明存在已观察到的活动,但并不表示所有受害者都经历相同攻击链。

攻击执行流程分解

步骤 1

公网 appliance 接受协议连接

受影响服务为轻客户端协议提供 WebSocket 路径。Rapid7 指出该易受攻击路径无需身份验证即可访问;BeyondTrust 将问题归类为预认证 RCE。

步骤 2

对端提供协议版本

封装程序从连接中读取远程版本值。该值由请求方控制,不是可信的本地配置。

步骤 3

Bash 将该值作为算术操作数处理

易受攻击的比较使用 Bash 数值运算符。由于 Bash 会将数值操作数作为表达式求值,未经验证的输入不一定保持为普通文本。

步骤 4

命令注入以服务账户权限执行

成功利用可在 BeyondTrust 站点用户上下文中执行操作系统命令。厂商将机密性、完整性和可用性影响均评为高。

步骤 5

已观察到的利用带来后续风险

BeyondTrust 报告了初始尝试以及针对暴露且未修补的自托管 appliance 的有限活动。GTIG 后续报告了多个集群及后续行为;每份报告反映特定活动,并非通用攻击链。

步骤 6

补丁在比较前验证输入

补丁会拒绝无效的远程版本并退出封装程序;只有有效值才会继续协议协商。请安装对应补丁或修复版本,并调查曾处于暴露状态的系统。

源代码对比:漏洞与安全实现

Rapid7 指出 BT26-02 补丁在比较 remoteVersion 前加入了这一到两位数字校验。代码片段经过精简,省略产品协议和请求细节。关键不变量是在 Bash 算术求值前完成验证;仅加引号并不能使算术操作数安全。尽可能在不调用 shell 的类型化组件中解析和比较,并在协议边界拒绝无效值。

源码摘录: thin-scc-wrapper — 根据 Rapid7 对厂商补丁的分析整理的精简示意

存在漏洞的实现
# 精简示例:remoteVersion 来自对端。
read -r remoteVersion || exit 1
if [[ "$localVersion" -lt "$remoteVersion" ]]; then
    version=$localVersion
else
    version=$remoteVersion
fi
加固后的安全修复
# 在任何算术比较前拒绝异常输入。
read -r remoteVersion || exit 1
if [[ ! "$remoteVersion" =~ ^[0-9]{1,2}$ ]]; then
    exit 1
fi
if [[ "$localVersion" -lt "$remoteVersion" ]]; then
    version=$localVersion
else
    version=$remoteVersion
fi

工程与系统安全加固清单

参考来源