
これは CVE-2024-21338 の POC です。この脆弱性は Windows AppLocker ドライバー(appid.sys)の権限昇格の脆弱性であり、Lazarus 組織によって 0day として悪用され、Windows のローカル権限昇格に使用されました。
CVE-2024-21338 は、2024 年 2 月 13 日のマイクロソフトの Patch Tuesday で開示された権限昇格の脆弱性であり、Lazarus ハッキンググループによって悪用され、カーネルアクセスを取得して FudModule ルートキットを展開するために使用されました。
この脆弱性は appid.sys ドライバーの0x22A018制御コードに存在します。攻撃者は特別に細工された IOCTL リクエストを送信することでこの脆弱性をトリガーし、任意のコールバック呼び出しを実現して、最終的にカーネルの読み書き権限を取得することができます。

この脆弱性は appid.sys ドライバーのAppHashComputeImageHashInternal関数に存在します。AipDeviceIoControlDispatchは0x22A018リクエストを処理する際にPreviousModeを適切にチェックしないため、ユーザーモードのプロセスがカーネルモードのコールバック関数をトリガーすることができます。
Local Service 権限の取得:この脆弱性は\\Device\\AppIDデバイスにアクセスするために Local Service 権限が必要です。そのため、ツールはまず Local Service プロセスを見つけて偽装します。
IOCTL リクエストの構築:ツールは、制御可能な関数ポインターとパラメーターを含む特別に細工された IOCTL リクエストを構築します。
脆弱性のトリガー:IOCTL リクエストを送信して脆弱性をトリガーし、カーネル内の gadget 関数を呼び出して、現在のスレッドのPreviousModeフィールドをユーザーモードからカーネルモードに変更します。
カーネルの読み書き権限の取得:PreviousModeを変更した後、ユーザーモードのプロセスはNtReadVirtualMemoryとNtWriteVirtualMemoryを使用して任意のカーネルメモリを読み書きできます。
Visual Studio 2026 を使用してこのプロジェクトをコンパイルします。Windows SDK と C++ コンパイラのサポートが必要です。
パッチが適用されていない Windows システム(Windows 10 1709 など)で Application Identity サービスを有効にします。
管理者権限でコンパイルされた実行可能ファイルを実行します。
ツールは自動的に Local Service プロセスを見つけ、そのプロセスを偽装します。
ツールは appid.sys ドライバーをロードし、IOCTL リクエストを構築して脆弱性をトリガーします。
脆弱性のトリガーに成功すると、ツールは変更するカーネルアドレスと値の入力を促し、カーネルメモリの変更を実現します。
このプロジェクトは教育および研究目的のみに使用され、違法な目的には使用できません。
| ファイル名 | 機能説明 |
|---|
| main.cpp | メイン関数。エクスプロイトのフロー制御を担当 |
| CVE-2024-21338.h | エクスプロイト関連の構造体と関数の宣言 |
| CVE-2024-21338.cpp | エクスプロイトの前提条件を実装する関数 |
| export_func.h | エクスポート関数の宣言 |
| gadget_search.cpp | カーネル gadget 検索の実装 |
| Native.h | ネイティブ Native API の定義 |
| PE.h | PE ファイルの処理に関連するユーティリティ関数 |