Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

フィードお問い合わせプライバシー© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
ツール/GitHubGitHub/abraxas/vbox-ovf-href-dest-escape
特権昇格脆弱性分析コード分析エクスプロイトセキュリティ仮想化論文と研究ラボと実践
GitHubabraxas/vbox-ovf-href-dest-escape

vbox-ovf-href-dest-escape

VirtualBox 7.2.20 - 高 - ローカル - ファイル書き込み - OVF href 宛先エスケープ

リポジトリを見る
24日前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

Abraxas Labs - vbox-ovf-href-dest-escape

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  vbox-ovf-href-dest-escape

vbox-ovf-href-dest-escape

クラス: ファイル書き込み 到達範囲: ローカル (ホスト) UI:R

Oracle VM VirtualBox OSS 7.2.20 (f2792cf44) - Oracle

悪意ある OVF/OVA をインポートしたホストユーザーは、新しい VM フォルダの外にディスクイメージのバイト列を書き込んでしまいます。ovf:href が書き込み先のファイル名になります。RTPathAbsExCxx は RTPATHABS_F_STOP_AT_BASE を指定していません。一意なパスを生成するヘルパーはサフィックスの前に _%i を挿入し、ベース名の除去 (basename-strip) を行いません。

IDCVE 未割り当て
クラスファイル書き込み (OVF/OVA の書き込み先パス)
到達範囲ローカル (ホスト) UI:R (被害者が悪意あるアプライアンスをインポートする)
CWECWE-22
CVSSHigh: 7.8 CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N
製品Oracle VM VirtualBox OSS
影響を受けるバージョン7.2.20 (f2792cf44f663989818507e36d3db5f978523c5e)
認証VirtualBox 上では不要。ホストユーザーが File/Import を開くか、VBoxManage import を実行します。
ライセンスGNU Affero GPL v3.0
ラボ127.0.0.1 のみ。ソースハーネス。VirtualBox は起動しません。

攻撃者ができること

OVF ディレクトリまたは OVA を送り込みます。ovf:href に ../somewhere/disk.vmdk や絶対パス /path/disk.iso を設定します。これをインポートしたオペレーターは、インポートを実行している UID として、それらのディスクイメージのバイト列を CREATE_REPLACE で書き込みます。存在しなかった親ディレクトリも含まれます。サフィックスが必要です (vmdk / iso / その他の MediumFormat 拡張子)。これはサフィックス不要な authorized_keys のドロップではありません。

権限手法 + シンク得られるもの検証状況
完全性IAppliance::read が File/href をベース名除去なしでコピーします (ovfreader.cpp)。Appliance::interpret() が dest = di.strHref を設定します (ApplianceImplImport.cpp 802-851)。書き込み先ファイル名は攻撃者が選択でき、../ や絶対パスも含まれます。ラボで実証済み (相対および絶対 href)
完全性i_ensureUniqueImageFilePath (ApplianceImpl.cpp 1126-1160) が RTPATHABS_F_STOP_AT_BASE なしで RTPathAbsExCxx(strAbsName, aMachineFolder, aName) を呼び出します。衝突時は aName のベース名ではなくサフィックスの前に _%i を挿入します。一意化された書き込み先でもマシンフォルダの外に出てしまいます。../oracle/WITNESS.vmdk は ../oracle/WITNESS_1.vmdk になります。ラボで実証済み (unique-keeps-dotdot=yes)
完全性インポート時に i_importOneDiskImage が再び AbsEx を呼び出します (ApplianceImplImport.cpp 4169-4171)。i_importCreateAndWriteDestinationFile (1043-1053) が親ディレクトリを mkdir した後、RTFILE_O_CREATE_REPLACE を実行します。ディスクイメージのバイト列が VM フォルダの外に書き込まれます。絶対 href はマシンフォルダを無視します。対照の disk.vmdk はフォルダ内に留まります。ラボで実証済み (relative-escape=yes absolute-href=yes control-in-folder=yes)
偵察インポートウィザード / VBoxManage import --dry-run が書き込み先を表示します。パスが可視化されます。それ自体は秘密情報の漏洩ではありません。推測
可用性別の VM のディスクに着地する相対パスの書き込み先。インポートを実行している UID としてそのファイルを上書きします。推測 (同じ CREATE_REPLACE 書き込み)
対象外MediumFormat サフィックスのない書き込み先インポート時に has no extension がスローされます。サフィックス不要な authorized_keys / crontab 書き込みではありません。対象外
対象外NVRAM の書き込み先マシンフォルダ配下の {vmname}.nvram に強制されます。対象外
対象外VM 名 ..sanitiseMachineFilename が無害化します。対象外
対象外共有フォルダ / ExtraData / シリアル RawFilevbox:Machine パス上でサニタイズされます。対象外
対象外ホストカーネル、ゲストからホストこの残存問題ではありません。VM の起動は不要です。インポーターと同じ UID です。対象外

OVA はクリーンな経路です。tar メンバーがバイト列を供給し、href がエスケープされた dest を供給します。3D なし、Guest Additions なし、VRDP なし、PUEL なし。

発見の経緯

2026年9月の CPU の後、タグ v7.2.20(f2792cf44)に留まり、OVF インポートを読みました。ExtraData、共有フォルダ、NVRAM の dest、シリアルの RawFile はすでに除去されています。ディスクの dest は除去されていません。interpret() は di.strHref をそのまま HardDiskImage の VBox 値にコピーします:

Utf8Str strFilename = di.strHref;
/* ... */
i_ensureUniqueImageFilePath(strMachineFolder, devType, strFilename);
pNewDesc->i_addEntry(VirtualSystemDescriptionType_HardDiskImage,
                     hd.strDiskId,
                     di.strHref,
                     strFilename,
                     di.ulSuggestedSizeMB,
                     strExtraConfig);

ApplianceImpl.cpp の 1126-1160 行は、RTPATHABS_F_STOP_AT_BASE を使わずにその名前をマシンフォルダに対して補完し、その後 aName をその場で変更します:

int vrc = RTPathAbsExCxx(strAbsName, aMachineFolder, aName);
/* ... */
const char *pszSuffix = RTPathSuffix(aName.c_str());
offDashNum = pszSuffix ? (size_t)(pszSuffix - aName.c_str()) : aName.length();
aName.replace(offDashNum, cchDashNum, szTmp, cchTmp);

Import は、まだ相対的な dest に対して AbsEx を繰り返し (ApplianceImplImport.cpp 4169-4171)、CREATE_REPLACE で書き込みます。IPRT のテストも同じ結合を記録しています。絶対パスの第 2 引数が優先され、/VirtualBox/Machines に ../VirtualBox.xml を加えると /VirtualBox/VirtualBox.xml になります。

すでに記録済みの誤った方向性: サフィックスのない authorized_keys 書き込みを残留物として扱うこと (import がスローする)、NVRAM の dest (フォルダ内に強制)、VM 名 .. (サニタイザー)、共有フォルダ / ExtraData / シリアル RawFile (すでにサニタイズ済み)。見せかけ: ホストカーネル、ゲストからホストへ。オラクルは、マシンフォルダ外の目撃行と、その場に留まった対照用の disk.vmdk です。

ラボ

python3 vbox-ovf-href-dest-escape-Abraxas-Labs.py

または

cd lab
./run.sh

dest-join の解釈、unique-path、および import CREATE_REPLACE 書き込みのソースハーネス。Docker compose、ループバック、VirtualBox バイナリなし。マシンフォルダ /work/Machines/ImportedVM。Oracle /work/oracle。

SUCCESS vbox-ovf-href-dest-escape relative-escape=yes unique-keeps-dotdot=yes absolute-href=yes control-in-folder=yes VBOX-OVF-HREF-DEST-ESCAPE-WITNESS

修正

ovf:href が dest になる前にベース名を除去するか、RTPATHABS_F_STOP_AT_BASE を渡す(そして絶対名を拒否する)。RTPATH_PROP_DOTDOT_REFS を拒否する。ユニークパスは相対文字列ではなくベース名を変更すべきである。

参考資料

  • github.com/VirtualBox/virtualbox タグ v7.2.20 (f2792cf44f663989818507e36d3db5f978523c5e)
  • ApplianceImplImport.cpp 802-851, 1043-1053, 4169-4171
  • ApplianceImpl.cpp 1126-1160
  • CWE-22

ライセンス

GNU Affero GPL v3.0。LICENSE を参照。ループバックラボ専用。保証なし。

ツールをダウンロード