
CVE-2026-1961 の PoC — Foreman の WebSocket プロキシ(lib/ws_proxy.rb)におけるコマンドインジェクション。サニタイズされていないコンピュートリソースのホスト名を介して、foreman ユーザーとして RCE に至る。責任ある開示が行われ、修正済み。
ForemanのWebSocketプロキシ (lib/ws_proxy.rb) におけるコマンドインジェクション脆弱性の概念実証 (PoC)。Red Hatへ責任ある開示を行い、修正済みです。
ForemanのWebSocketプロキシは、コンピュートリソースプロバイダーのAPIレスポンス (例: VMware vSphere の HostSystem.name) に由来する未サニタイズの host 値を、Open3.popen3 経由で実行されるシェルコマンドに直接埋め込みます。Foremanインスタンスが接続するコンピュートリソースサーバーを攻撃者が制御または偽装できる場合、任意のシェルコマンドを注入でき、管理者がVMのコンソールを開いた際に foreman ユーザーとしてリモートコード実行が可能になります。
悪用に成功すると、Foremanのデータベース認証情報と暗号化キーにアクセスでき、保存されているすべてのインフラ認証情報 (vCenter、AWS、SSHキー、APIトークン) が露出し、管理対象インフラへのさらなる横展開が可能になります。
| CVE | CVE-2026-1961 |
| CWE | CWE-78 (OSコマンドインジェクション) |
| CVSS 3.1 | 8.0 (High) - AV:N/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:H |
| 影響を受けるコンポーネント | lib/ws_proxy.rb |
| 影響を受けるバージョン | Foreman 3.18.0まで (3.17.0で確認済み。コードパスは2020年以降変更なし) |
| 修正バージョン | Foreman 3.18.1、3.17.2、3.16.3 |
| 必要な認証 | なし (攻撃者が悪意のあるサーバーを実行し、Foreman管理者は通常のワークフローの一環としてそのサーバーへ認証を行う) |
| ユーザー操作 | 管理者がVM上で Console をクリック (通常のワークフロー) |
| アドバイザリ | https://access.redhat.com/security/cve/cve-2026-1961 |
lib/ws_proxy.rb:44 において、hostパラメータがシェルコマンド文字列に直接埋め込まれています:
cmd = "websockify --daemon --idle-timeout=#{idle_timeout} --timeout=#{timeout} #{port} #{host}:#{host_port}"
host はコンピュートリソースのAPIレスポンスに由来し、Open3.popen3 経由でシェルに渡される前にサニタイズされることはありません。
malicious_vsphere_server.py は最小限のvSphere SOAP APIを実装しており、認証とVM列挙を処理するのに十分な機能を持ち、シェルメタ文字ペイロードを含む汚染された HostSystem.name 値を返します。
python3 malicious_vsphere_server.py
python3 malicious_vsphere_server.py
VMware<attacker_ip>user / pass)EvilDatacenter が読み込まれる)VNCTestVM を特定find /tmp -name "vsphere_rce.txt" 2>/dev/null
cat /tmp/systemd-private-*/tmp/vsphere_rce.txt
期待される出力: foremanHoussam Sahli (Malleum)
調整された開示に従い、パッチ適用後に公開されています。許可されたセキュリティテストおよび教育目的にのみ提供されています。所有していない、または明示的なテスト許可を得ていないシステムに対して使用しないでください。