【CVE-2021-4034】PolKitのLinuxでルート権限を自由に取得できる脆弱性

【CVE-2021-4034】PolKitのLinuxでルート権限を自由に取得できる脆弱性

投稿日: カテゴリー: セキュリティ
Pocket

CVE-2021-4034とはどんな脆弱性

たった3行でLinuxのルート権限を奪える既にPoCもツールもある特権管理プログラムPolKitの脆弱性です。PwnKitと名前がついています。
対象は2009年5月以降にリリースされた全てのバージョンのpkexec(Linux)です。
攻撃には脆弱性があるマシンでのローカル認証アクセスが必要であり、リモートでは実行できません。しかし、log4jをはじめ、リモート実行の架け橋になる脆弱性なプログラムが投入されれば途端にサービス全体の危機になりかねません。対応優先度は極めて高いと判断し、最低限主要なサービスへの調査を行い対応に取り掛かりましょう。

CVE-2021-4034のPoC、攻撃ツールは存在するか

はい、存在します。攻撃コード(PoC)もスキャンツールもあり、以下3行でexploit完了します。
https://github.com/arthepsy/CVE-2021-4034

$git clone https://github.com/arthepsy/CVE-2021-4034.git
$gcc CVE-2021-4034/cve-2021-4034-poc.c -o cve-2021-4034-poc
$ ./cve-2021-4034-poc

CVE-2021-4034の対策

一方、対策はたった1行でできます。pkexecのSUIDを取るだけです。

#chmod 0755 /usr/bin/pkexec

PolKitを利用している場合は、パッチをあて対応することになります。パッチも逐次発表されているので確認してみましょう。

そもそもPolkitとはどんなプログラムか?

Polkitはsudoのような特権管理プログラムで、sudoより細かいレベルでシステムのポリシーを制御できることが特徴です。

CVE-2021-4034の脆弱性が起こる原因は?

コマンドライン引数の数 (argc) を空でも引数1と扱ってしまうことで、引数リスト (argv) が空の状態でも境界外のメモリを引数 (argv[1]) として読み書きしてしまうこと、main関数処理前に変数を pkexecの環境に再導入することが可能で悪用可能だったためです。
pkexecの処理は、①コマンドライン引数を処理しパスと実行ファイル名を取得、②PATH 環境変数で指定されたディレクトリを検索(パスが絶対でない場合は、PATH環境変数のディレクトリで実行されるプログラムを検索)、一致する実行ファイルが見つかったらパスを付加して envp[0] を上書きとなって実行を待ちます。
皆さんの開発においても変数の再導入することの悪用可能性に関して見直してみることをお勧めします。

以上です。参考になりましたら幸いです。