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は未修正のBeyondTrust Remote Support/PRAで、WebSocket経由の認証前OSコマンド実行を許します。修正し、公開機器を調査してください。

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 に存在する、認証不要の重大な OS コマンド注入脆弱性。
thin-scc-wrapper
クライアントプロトコル経路で使われる BeyondTrust の shell ラッパー。Rapid7 のパッチ分析では、相手から受け取るバージョンの処理が脆弱な境界とされています。
Bash の算術評価
Bash の数値比較演算子はオペランドを算術式として評価します。そのため、信頼できない文字列がデータと式の境界を越える可能性があります。
CWE-78
OS コマンドで使われる特殊要素の無効化が不適切な状態。OS コマンド注入とも呼ばれます。
CISA KEV
実環境での悪用証拠がある脆弱性を記録する CISA の既知悪用脆弱性カタログ。

フレームワーク対応

根本原因の分析 (Root Cause)

BeyondTrust が 2026 年 2 月に公開したアドバイザリは、CVE-2026-1731 を Remote Support と Privileged Remote Access の認証前リモートコード実行として説明し、CWE-78 と CVSS 4.0 9.9 を割り当てています。細工されたクライアント要求により、サイトユーザーの権限で OS コマンドが実行される可能性があります。Rapid7 によるベンダーパッチの分析では、ソース上の境界は thin-scc-wrapper の WebSocket 経路にあります。スクリプトは相手が制御する remoteVersion を読み取り、Bash の数値演算子で比較します。この比較は算術評価を行うため、単純な数値でない値は不活性な文字列ではなく式として解釈される可能性があります。パッチは比較前に ASCII 数字 1~2 桁(^[0-9]{1,2}$)を要求します。以下のコードは情報源に基づく簡略化した例であり、製品スクリプト全体や悪用の実証ではありません。BeyondTrust は 2 月 10 日に初期の悪用試行を確認し、2 月 9 日より前に未修正だったインターネット公開の自社運用システムに対する活動は限定的と報告しました。その後 Google Threat Intelligence Group は、複数の攻撃クラスターと異なる後続活動を報告しています。これらは観測された活動の証拠であり、すべての被害環境で同じ攻撃チェーンが発生したことを意味しません。

ステップ・バイ・ステップの攻撃フロー

ステップ 1

公開 appliance がプロトコル接続を受け付ける

対象サービスはシンクライアントプロトコル向けの WebSocket 経路を公開しています。Rapid7 は脆弱な経路を認証なしで到達可能と説明し、BeyondTrust は認証前 RCE と分類しています。

ステップ 2

接続相手がプロトコルバージョンを送る

ラッパーは接続からリモートバージョン値を読み取ります。これは要求側が制御する値であり、信頼できるローカル設定ではありません。

ステップ 3

Bash が値を算術オペランドとして扱う

脆弱な比較では Bash の数値演算子を使います。Bash は数値オペランドを式として評価するため、検証されていない入力が単なる文字列のままとは限りません。

ステップ 4

サービスアカウントの権限でコマンドが実行される

悪用に成功すると、BeyondTrust のサイトユーザーのコンテキストで OS コマンドが実行される可能性があります。ベンダーは機密性・完全性・可用性への影響を高と評価しています。

ステップ 5

観測された悪用から後続リスクが生じる

BeyondTrust は初期試行と、公開され未修正の自社運用 appliance への限定的な活動を報告しました。GTIG は後に複数クラスターと後続行動を報告しています。各報告は特定キャンペーンの証拠であり、共通の攻撃チェーンを示すものではありません。

ステップ 6

パッチは比較前に入力を検証する

パッチは無効なリモートバージョンを拒否してラッパーを終了します。有効な値の場合のみプロトコルのネゴシエーションを続行します。該当パッチまたは修正版を適用し、脆弱な期間に公開されていたシステムを調査してください。

ソースコード比較:脆弱 vs 堅牢化

Rapid7 によると BT26-02 パッチは remoteVersion の比較前に 1~2 桁の検証を追加しています。抜粋は簡略化されており、製品プロトコルや要求の詳細は含みません。重要なのは 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

エンジニアリング&システム堅牢化チェックリスト

参考資料