
CVE-2021-40444(Microsoft Office Word リモートコード実行)を悪用する悪意のある docx ジェネレーター。任意の DLL ファイルで動作します。
インターネット上にはすでに多くの PoC が出回っていますが、この脆弱性の完全な武器化に挑戦してみることにしました。というのも、私が見つけた既存の情報には共有する価値のある詳細が欠けており、また Microsoft はすでにこの脆弱性のパッチを公開しています。
これまでに、完全に動作するジェネレーターを作成するための貴重なリソースとして見つけたのは次のものです:
上記のリソースは、完全なチェーンを作成するために必要な要件の多くを概説しています。あまりにも多くの不要な情報を繰り返すのを避けるため、関連する詳細だけを要約します。
このエクスプロイトを動作させるには、かなりの数の見落とされがちな要件があります。そのため、lockedbyte によるもののような優れた PoC でさえ、正しく動作しないことがありました。
おそらく、この脆弱性がさらに悪用されるのを避けるために、誰も明示的に「公開」しなかったのでしょう。しかし現在はパッチが適用されているため、詳細を公開しても大きな問題にはならないはずです。
Will Dormann によるこのツイートにあるように、MS Word 内で「プレビュー」をトリガーするには、HTML は少なくとも 4096 バイトのサイズが必要です。
CAB ファイルは、抽出エラーを回避し ZipSlip を達成するためにバイトパッチを適用する必要があります:
filename.inf は ../filename.inf にするfilename.inf coffCabStart を変更することですCFFOLDER.typeCompress CFFOLDER.coffCabStart は 3 増加させる(追加された '../' のため)CFFOLDER.cCfData CFFILE.cbFile は CFHEADER.cbCabinet 全体よりも大きくするCFDATA.csum これらの制約の理由は多岐にわたりますが、すべてを深く理解するのに十分な時間を費やしていません。最も重要なものを見てみましょう:
注1: Defender は現在、_IMAGE_DOS_HEADER.e_magic 値をシグネチャとして使用して CAB ファイルに PE が含まれているかどうかを検出するため、PE ファイルを CAB に埋め込むことを防ぐ可能性があります。このシグネチャは回避できるでしょうか? 確かなことはわかりませんが、前述のとおりこれはパッチ適用済みの脆弱性なので、これ以上多くの時間を費やすつもりはありません。さらなる発展は好奇心旺盛な読者に委ねます。
注2: Microsoft のパッチは、おそらくブラックリスト方式を使用して、任意の URI スキームをブロックします(これは推測にすぎません)。
CVE-2021-40444 に関連する主な攻撃チェーンは、.cpl URI スキームを介してロードされる DLL 攻撃です。これを悪用するには、攻撃者は特別に細工された DLL を生成する必要があります。テストしたい場合は、私の evildll-gen スクリプトを試してみてください。
Max Maluin が指摘したように、IE と関連するファイル拡張子ベースの URI を悪用して、複数のファイルタイプとやり取りすることが可能です。これは IE を悪用する良い方法かもしれませんが、制限があります。
実際、このエクスプロイトでファイルをダウンロードするために使用される方法は ActiveX コントロールの更新に基づいており、任意のファイルをダウンロードするために使用することはできません。Microsoft のドキュメントによると、codebase タグが指すことができるのは、OCX、INF、CAB のわずかなファイルタイプだけです。
OCX または INF ファイルを直接ダウンロードできたとしても、システム内の正しい場所にファイルをダウンロードできるとは限りません。cab エクスプロイトでは、パストラバーサルを使用して .inf ファイルを既知のパスに移動できますが、それ以外の場合はファイルがランダムなディレクトリに保存されるため、事実上参照することは不可能です。
現在のところ、CAB ファイルなしでダウンロードと実行を連鎖させる方法は見つけていません。
注: IE 単体について言えば、HTML スモークリングがこの脆弱性を悪用する可能性のあるシナリオです。
この手法は、Eduardo Braun によって Twitter で最初に公開され、このペーパーでさらに説明されています。
この手法を使用する場合、攻撃チェーンは少し異なることに注意してください。この攻撃では、有効な WSF スクリプトと有効な RAR ファイルを連結して得られる、特別に細工された RAR ファイルをユーザーがダウンロードする必要があります。開かれると、RAR には HTML への参照を含む DOCX が含まれており、その HTML が RAR ファイルを WSF スクリプトとしてロードしようとします。
要約すると:
ジェネレーターユーティリティは現在、次の攻撃を再現できます:
| 攻撃 | HTML テンプレート | ターゲット | 配信方法 | 実行方法 | 動作 |
|---|---|---|---|---|---|
| 攻撃のオリジナルバージョン | cab-orig-* | WORD | DOCX | CAB + DLL | はい |
| j00sean の IE 限定攻撃 | cab-orig-j00san | IE | HTML | CAB + DLL | はい |
| DLL なしの私のバージョン | cab-uri-* | WORD | DOCX | CAB + JS/VBS | いいえ1 |
| Eduardo B. の「CABless」RAR 攻撃 | cabless-rar-* | WORD | RAR | WSF | はい |
| 改良版 j00sean 攻撃 + HTML スモークリング | cabless-smuggling-* | IE | HTML | JS/VBS | はい2 |
1一部の環境では CAB が正しくダウンロードされない
2IE でファイルをダウンロードするには、ユーザーが「保存」をクリックする必要がある
cab_parser.py ユーティリティを使用してエクスプロイトファイルのヘッダーを確認できますが、これを完全なパーサーとは考えないでください。これは、何が起こっているのかを理解するために私が開発した、非常に簡易的な CAB ヘッダービューアです。
このジェネレーターは Windows で動作するように設計されています。makecab ユーティリティを使用するためです。使用前に、必要な依存関係をインストールしてください:
git clone https://github.com/klezVirus/CVE-2021-40444
cd CVE-2021-40444
pip install virtualenv
python -m virtualenv venv
venv\Scripts\activate.bat
pip install -r requirements
git clone https://github.com/klezVirus/CVE-2021-40444
cd CVE-2021-40444
pip install -r requirements
このジェネレーターの使い方は簡単です。さまざまなペイロードや Windows バージョンでテストされていますが、完璧というわけではありません。Windows のビルドによって動作が異なることがあります。共有できる詳細が増えたら、ここに投稿します。
usage: generator.py [-h] -P PAYLOAD -u URL [-o OUTPUT] [--host] [-c COPY_TO] [-nc] [-t]
[%] CVE-2021-40444 - MS Office Word RCE Exploit [%]
optional arguments:
-h, --help show this help message and exit
-P PAYLOAD, --payload PAYLOAD
DLL payload to use for the exploit
-u URL, --url URL Server URL for malicious references (CAB->INF)
-o OUTPUT, --output OUTPUT
Output files basename (no extension)
--host If set, will host the payload after creation
-c COPY_TO, --copy-to COPY_TO
Copy payload to an alternate path
-nc, --no-cab Use the CAB-less version of the exploit
-t, --test Open IExplorer to test the final HTML file
python generator.py -u http://127.0.0.1 -P test\calc.dll --host
注: ポートは URL によって選択され、エクスプロイトはペイロードのファイル拡張子に基づいて生成されます
python generator.py -u http://127.0.0.1 -P test\job-jscript.wsf --no-cab --host -t
python generator.py -u http://127.0.0.1 -P test\calc.js --no-cab --host -t