
pkexec の CVE-2021-4034 に対するローカル権限昇格エクスプロイトで、脆弱なシステム上で root シェルを取得する概念実証を提供します。
このリポジトリには、pkexec におけるローカル権限昇格の脆弱性である CVE-2021-4034 のエクスプロイトが含まれています。この実装は、CVE 開示情報 に記載されている内容に基づいており、そちらを読むことをお勧めします。
このエクスプロイトがお使いのマシンで動作した場合、そのシステムは脆弱であることを意味します。これに対処するには、polkit をパッチ適用済みのバージョンに更新するか、以下のコマンドで pkexec の setuid ビットを無効にしてください:
$ sudo chmod a-s $(which pkexec)
このエクスプロイトは、開示情報に基づいて非常に簡単に作成できるため、すべてのマシンに至急パッチを適用してください。
このエクスプロイトを実行するには、トップレベルのディレクトリで make を実行するだけです。これにより、以下の処理が行われます:
exploit.c をコンパイルgconv/badconv.c をコンパイル./exploit を実行これにより root としてシェルが起動された場合、そのシステムは脆弱です。
以下のような出力が得られた場合、上記の chmod コマンドを使用してバグの緩和に成功しています:
Running exploit...
GLib: Cannot convert message: Could not open converter from “UTF-8” to “ZT”
pkexec must be setuid root
出力として pkexec のヘルプメッセージが表示された場合、そのシステムはおそらく既にパッチが適用されています。
この実装は、Fedora 34+ や、一部の実装では脆弱ではないと思われる OpenSUSE の一部のバージョンを含む、脆弱なシステムであれば動作するはずです。具体的には、GVFS を無効にするバージョンの polkit がインストールされているシステムでも動作します(こちらで追加)。とはいえ、私はコンピュータセキュリティに関する正式な経験がなく、この脆弱性や他の類似のエクスプロイトに対してまだ脆弱であるにもかかわらず、システムがパッチ適用済みであると報告する可能性があります。そのため、システムを常に最新の状態に保ち、知識のある人々の話に耳を傾け、そして野菜をしっかり食べるようにしてください。