flawopen.com/Teardowns/cve-2026-1731-beyondtrust-websocket-command-injection
CVE-2026-1731:BeyondTrust 命令注入
CVE-2026-1731 可通过 WebSocket 在未修补的 BeyondTrust Remote Support/PRA 中免认证执行系统命令。请打补丁并排查暴露设备。
想象前台询问访客版本号,却把答案交给会计算公式的计算器,而不是只检查数字。这样输入就可能从数据变成指令。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 已知遭利用漏洞目录,记录有现实世界利用证据的漏洞。
框架映射
- 本指南所述弱点的 CWE 参考: CWE-78
- CISA KEV — 收录日期 2026-02-13 — CVE-2026-1731
根本原因剖析 (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 的集群及不同后续行为。这些报告证明存在已观察到的活动,但并不表示所有受害者都经历相同攻击链。
攻击执行流程分解
公网 appliance 接受协议连接
受影响服务为轻客户端协议提供 WebSocket 路径。Rapid7 指出该易受攻击路径无需身份验证即可访问;BeyondTrust 将问题归类为预认证 RCE。
对端提供协议版本
封装程序从连接中读取远程版本值。该值由请求方控制,不是可信的本地配置。
Bash 将该值作为算术操作数处理
易受攻击的比较使用 Bash 数值运算符。由于 Bash 会将数值操作数作为表达式求值,未经验证的输入不一定保持为普通文本。
命令注入以服务账户权限执行
成功利用可在 BeyondTrust 站点用户上下文中执行操作系统命令。厂商将机密性、完整性和可用性影响均评为高。
已观察到的利用带来后续风险
BeyondTrust 报告了初始尝试以及针对暴露且未修补的自托管 appliance 的有限活动。GTIG 后续报告了多个集群及后续行为;每份报告反映特定活动,并非通用攻击链。
补丁在比较前验证输入
补丁会拒绝无效的远程版本并退出封装程序;只有有效值才会继续协议协商。请安装对应补丁或修复版本,并调查曾处于暴露状态的系统。
源代码对比:漏洞与安全实现
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
工程与系统安全加固清单
- ✓盘点所有 Remote Support 和 Privileged Remote Access appliance,包括未启用自动更新的自托管系统。
- ✓安装 BT26-02-RS 或升级 Remote Support 至 25.3.2 及以上;安装 BT26-02-PRA 或升级 Privileged Remote Access 至 25.1.1 及以上,并遵循 BeyondTrust 最新公告中的适用路径。
- ✓对于截至 2026 年 2 月 9 日仍面向互联网且未修补的自托管系统,遵循 BeyondTrust 事件响应指引,调查未授权访问、持久化、提权和数据访问。
- ✓检查网络及应用遥测,查找异常 WebSocket 会话以及由服务账户启动的异常子进程或命令;结合 appliance 的正常行为验证告警。
- ✓在每个 shell 边界,使用严格允许列表校验协议字段后再进行数值比较;不要将不可信文本传入 Bash 算术、
eval或命令字符串。 - ✓为版本为空、过长、带符号、含空格或非十进制字符的情况添加回归测试;确保在比较或启动进程前拒绝这些值。