
Polkit の PoC
Policy Toolkit(または Polkit)は、2009 年のリリース以来、root 権限を持たない攻撃者でも、Polkit パッケージを備えた任意の Linux システム上で簡単に管理アクセスを取得できるようにしています。残念ながら(あるいはそうでないかもしれませんが)、これはほとんどの Linux ディストリビューションにデフォルトでインストールされています。そのため、この脆弱性は広範囲に及ぶものとなっています。
幸いなことに(あるいはそうでないかもしれませんが)、この脆弱性はリモートからは悪用できず、ローカル権限昇格(LPE)の脆弱性となっています。
Polkit は、ほとんどの Linux の認可システムの一部を構成しています。管理権限を必要とする何らかのアクションが実行される際、Polkit はそのアクションを実行するために必要な権限を持っているかどうかを判断します。これは systemd(init の置き換え)に統合されています。実際、THM によれば、Systemd は「systemd の sudo」として知られています。
Polkit と対話する際には、pkexec(Pwnkit の脆弱性を含むプログラム)を使用できます。例として、GUI セッションで pkexec を使って useradd を実行しようとすると、資格情報を求めるウィンドウが表示されます。CLI では、次のような出力が得られます:
user@user:~$ pkexec useradd test1
==== AUTHENTICATING FOR org.freedesktop.policykit.exec ===
Authentication is needed to run '/usr/sbin/useradd' as the super user
Authenticating as: user,,, (user)
Password:
当然ながら、Canonical はこのパッケージのパッチ適用済みバージョンを APT パッケージマネージャーで公開しています。パッチ適用済みバージョンが公開されていないディストリビューションでは、pkexec の SUID ビットを削除するだけで済みます。
sudo chmod 0777 'which pkexec'