
これは、PwnKit 脆弱性に対するエクスプロイトのシンプルな実装です。
注記: このリポジトリとその内容は卒業研究 (GrAL) の一部であり、教育目的および学術研究のみを目的として作成されています。
このリポジトリには、CVE-2021-4034 の脆弱性 (PwnKit としても知られる) に対する概念実証 (PoC - Proof of Concept) コードが含まれています。このメモリ破壊の脆弱性は、Linux システム上の Polkit の pkexec コンポーネントに影響を与えます。pkexec が空の引数リスト (argc == 0) で実行されると、環境変数を操作して任意の共有ライブラリを強制的に読み込ませることができ、これによりローカルの権限昇格が達成されます。
以下に、この脆弱性を悪用するために実行環境を準備するために必要な手順を説明します。このプロセスでは、pkexec のメモリ読み取り/書き込みエラーがどのように利用されるかを詳しく説明します。
gconv 構造)このエクスプロイトは、GLib がエラーメッセージを出力しようとする際の文字変換の処理方法を悪用します。そのため、最初のステップとして、GLib にとって GCONV 変換モジュールのローカルリポジトリとして機能する特定のディレクトリ構造を作成します。
この脆弱性の要となるのは、pkexec の argc == 0 状態によって引き起こされる範囲外書き込みを利用して、GCONV_PATH 環境変数を注入することです。これにより、プログラムは異常な文字セットを使用することを強制され、GLib に対して文字変換モジュールを前のステップで作成した制御されたディレクトリ内で探すように指示します。
.so)自分のコードを実行するには、共有ライブラリ (shared object または .so) をコンパイルする必要があります。pkexec が見つけることのできない文字セットを処理しようとすると、このライブラリが偽の gconv ディレクトリから読み込まれます。pkexec は SUID ビットが有効なバイナリであるため (root として実行されます)、このライブラリを読み込むと、自分のコードが root 権限を取得し、システムの完全な制御を奪います (例: root シェルを開く)。
gconv-modules ファイルの設定最後に、そのローカルディレクトリに gconv-modules という名前の設定ファイルを作成する必要があります。このファイルはインデックスとして機能し、要求された特定の文字セットの変換を実行するために、GLib にどの特定のライブラリ (.so) を読み込むかを指示します。このファイルは、pkexec が要求する変換を、手順 3 で作成した共有ライブラリに結び付けます。
このプロジェクトには、C バイナリのコンパイルと環境のクリーンアップを自動化する Makefile が含まれています。
プロジェクトをコンパイルするには: $ make
生成されたファイル (一時ファイル、フォルダ、バイナリ) をクリーンアップするには: $ make clean