
VirtualBox 7.2.20 - 重大 - ローカル - 型混同 / 任意読み書き - SAS1068 CONFIG SCSI-SPI オーバーレイ
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · vbox-lsilogic-sas-config
クラス: 型混同 / 任意 R/W 到達範囲: ローカル (ゲスト)
Oracle VM VirtualBox OSS 7.2.20 (f2792cf44f663989818507e36d3db5f978523c5e)
SAS1068 MPT CONFIG は SCSI-SPI Port 0 を 12 バイトのページとして扱う。SAS 上では、そのページは union のもう半分である: pManufacturingPage7 と cbManufacturingPage7。ゲストの CONFIG READ はヒープポインタを DMA リークする。CONFIG WRITE はポインタとサイズを植え付ける。その後、Manufacturing page 7 が植え付けられたポインタを経由してコピーする。
接続された SAS1068 (PDM LsiLogicSas、PCI 1000:0054) 上のゲスト ring3 は、VM プロセス内で任意の読み書きを取得する。 これは VirtualBoxVM / VBoxHeadless のヒープであり、ホストカーネルエスケープではない。
| ID | CVE 未割当 |
| クラス | 型混同 / 任意 R/W |
| 到達範囲 | ローカル (ゲスト) |
| CWE | CWE-843, CWE-822 |
| CVSS | Critical: 8.8 CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H |
| 製品 | VirtualBox OSS |
| 影響を受けるバージョン | 7.2.20 (f2792cf44) |
| 必要条件 | 接続された SAS1068 (PDM LsiLogicSas、PCI 1000:0054) |
| ライセンス | GNU Affero GPL v3.0 |
| ラボ | ループバックソースハーネス |
手法: ゲスト ring3 は SAS1068 の MMIO ドアベルまたはリクエスト FIFO を MPT_MESSAGE_HDR_FUNCTION_CONFIG (0x04)、ページタイプ SCSI-SPI Port 0 (0x03) でプログラムする。ディスパッチは常に SPI ゲッターを呼び出す。SAS でゲートされるのは EXTENDED のみである。ページ属性ゲッターはコメントアウトされているため、Readonly Port 0 ページは依然として書き込み可能である。SPI Port 0 は 12 バイトでパックされ、SasPages.pManufacturingPage7 (8) と cbManufacturingPage7 (4) にオーバーレイする。
| 権限 | 種別 | 状態 | 得られるもの |
|---|---|---|---|
| CONFIG SCSI-SPI Port 0 READ | 偵察 | ラボ実証済み | VM プロセスのヒープポインタ pManufacturingPage7 とそのサイズをゲスト RAM へ DMA する。ASLR の入力。 |
| CONFIG SCSI-SPI Port 0 WRITE | 完全性 | ラボ実証済み | ゲストが選んだポインタとサイズをそれらの SAS フィールドに植え付ける |
| manufacturing page 7 CONFIG READ | 完全性 | ラボ実証済み | 植え付けられたアドレスからゲスト GPA へホストのバイト列をコピーする (VBOX-LSILOGIC-SAS-CONFIG-WITNESS) |
| manufacturing page 7 CONFIG WRITE | 完全性 | 同じゲッターから推測 | ゲストのバイト列を植え付けられたアドレスへコピーする (VirtualBoxVM 内での任意書き込み) |
| Port 1 / Device 0 SPI ページ | 偵察 / 完全性 | オーバーレイを推測 | Port 1 は pSASIOUnitPage0 をリーク/植え付けする; Device 0 page 0 は paPHYs に到達する; Device 0 page 1 は pSASDeviceHead に到達する |
| 任意の植え付けられたポインタ | 可用性 | 推測 | 次回の SAS ページアクセス時、または lsilogicR3ConfigurationPagesFree 時に VM プロセスをクラッシュさせる |
隣接するクローズ済み項目:
SpiPages が実際のレイアウトである; この型混同には SAS1068 が必要)VERR_NOT_FOUND)これは VM プロセスの任意 R/W であり、ホストカーネルエスケープではない。完全なホストユーザー権限には依然としてハードニングの残存物が必要である。私はこれを残っている 3D 書き込みと組み合わせなかった: VMSVGA DX11 UAF (d691aa68) はこのピンではクローズ済みである。
Guest Additions なし。3D なし。VRDP なし。PUEL ではない。敵対的ゲスト ring3 で十分である; 同梱の mpt/mptsas ドライバは不要である。
2026年9月のCPU後、私はOSS 7.2.20上でLsiLogic MPT CONFIGを調査しました。2026年のサイレントなreply-stackリークはすでに修正済みです。122c6880はSCSI I/Oエラー時にMptReplyUnionをRT_ZEROします。私はそのシンクではなく、その類の残存物を探していました。
残存物はスタックのreplyではなく、unionです:
union {
MptConfigurationPagesSpi SpiPages;
MptConfigurationPagesSas SasPages;
} u; /* DevLsiLogicSCSI.h:3323 */
SAS alloc は SasPages ホストポインタを埋め、SPI ページ初期化を一切実行しません。DevLsiLogicSCSI.cpp:2795 の SPI Port ゲッターには enmCtrlType チェックがありません。CONFIG ディスパッチの SPI ケースはゲートされていません。ページ属性ゲッターは cpp:3159 でコメントアウトされています。cpp:2701 の Manufacturing page 7 は SAS でゲートされており、これが意図された経路ですが、pManufacturingPage7 を NULL チェックなしで参照解除します。これにより、SPI 型の Port 0 READ/WRITE が SAS ポインタリークおよび plant になる仕組みです。
すでに記録済みの誤った方向性: 122c6880 の再提出; デフォルトの LSI53C1030 をこのバグとみなすこと; ワイルドポインタクラッシュをホストカーネルエスケープに誇張すること; パック済みオーバーレイで十分なのにライブ VM を使うこと。見せかけ: リバースシェル。オラクルは CONTROL ダミーページデータであり、その後 VBOX-LSILOGIC-SAS-CONFIG-WITNESS のリーク/plant/arb-read です。
cd lab
./run.sh
または python3 vbox-lsilogic-sas-config-Abraxas-Labs.py。pin 構造体のソースハーネス。VirtualBox は起動されません。Compose プロジェクト vbox-lsilogic-sas-config、network_mode: none。何もバインドしません。
CONTROL: SPI 型の Port 0 オーバーレイ読み取りはダミーページデータであり、製造ページ 7 のヒープポインタではありません。
SAS の混同: Port 0 READ は calloc に一致する pManufacturingPage7 をリークします。Port 0 WRITE は 2 つ目のウィットネスバッファのポインタ+サイズを植え付けます。製造ページ 7 のゲッターと CONFIG READ がウィットネスをゲストの GPA 配列にコピーします。
SUCCESS vbox-lsilogic-sas-config leak=yes plant=yes arb-read=yes VBOX-LSILOGIC-SAS-CONFIG-WITNESS
SCSI-SPI ページタイプを enmCtrlType == LSILOGICCTRLTYPE_SCSI_SPI でゲートする。Readonly Port 0 が読み取り専用のままになるよう、ページ属性チェックを復元する。pManufacturingPage7(およびその他の SAS ポインタ)を逆参照する前に NULL チェックする。SpiPages と SasPages を単一の union で重ね合わせるのをやめる。
f2792cf44f663989818507e36d3db5f978523c5e)DevLsiLogicSCSI.h 3323 行目の union、2251 行目の SPI Port 0 サイズ 12DevLsiLogicSCSI.cpp 619 行目の SAS 割り当て、2701 行目の manufacturing ゲッター、2795 行目の SPI Port ゲッター、3159 行目でコメントアウトされたページ属性、3293 行目の CONFIG READ/WRITE122c6880(MptReplyUnion SCSI I/O エラースタック)