
CVE-2026-1961 の PoC — Foreman の WebSocket プロキシ(lib/ws_proxy.rb)におけるコマンドインジェクション。サニタイズされていないコンピュートリソースのホスト名を介して、foreman ユーザーとして RCE に至る。責任ある開示が行われ、修正済み。
ForemanのWebSocketプロキシ(lib/ws_proxy.rb)におけるコマンドインジェクション脆弱性の概念実証です。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)
パッチ適用後にリリースされ、協調的開示に従っています。認可されたセキュリティテストおよび教育目的のみに提供されています。所有していないシステム、またはテストの明示的な許可を持たないシステムに対して使用しないでください。