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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
Dirty-Pipe-Exploits — CVE-2022-0847(Dirty Pipe) 脆弱性エクスプロイト. | Kitploit
ツール/GitHubGitHub/gustavo-nogueira/dirty-pipe-exploits
特権昇格脆弱性分析エクスプロイト学習と教育バイナリエクスプロイトラボと実践
GitHubgustavo-nogueira/dirty-pipe-exploits

Dirty-Pipe-Exploits

CVE-2022-0847(Dirty Pipe) 脆弱性エクスプロイト.

リポジトリを見る
2123年前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2022-0847 エクスプロイト

Dirty Pipe

それは何ですか?

2022年3月7日にMax Kellerman[2]によって公開されたCVE-2022-0847は、Linuxカーネル(バージョン5.8から5.16.11まで)の脆弱性で、攻撃者が読み取り専用または不変のファイルを置き換え、被害者のシステムで権限を昇格させることを可能にします。CVE-2022-0847はDirty Pipeと呼ばれ、CVSSスコアは7.8(高)です。

脆弱性の悪用はどのように機能しますか?

Dirty Pipe脆弱性は、Linuxカーネルのcopy_page_to_iter_pipeおよびpush_pipe関数において、struct pipe_buffer[7]のflags属性が適切に初期化されておらず、そのため古くなった値を含む可能性があるという欠陥として説明されています。struct pipe_bufferのflags属性に設定できるフラグの1つにPIPE_BUF_FLAG_CAN_MERGEというフラグがあります。これは、pipe_bufferへのデータのマージが許可されているかどうかを示します。このように、データがpipe_bufferにコピーされると、コピーされたページのサイズが4096バイト未満であれば、さらにデータをpipe_bufferに追加できます。

PIPE_BUF_FLAG_CAN_MERGEをページキャッシュ参照に注入することで、特別に準備されたパイプに新しいデータを書き込むだけで、ページキャッシュ内のデータを上書きできるようになりました(このプロセスは以下の段落で説明します)。これにより、権限のないローカルユーザーは、この欠陥を使用して、読み取り専用ファイルにバックアップされたページキャッシュ内のページを上書き/書き込みし、システムの権限を昇格させることができます。

したがって、脆弱性を悪用するには、次の手順を実行する必要があります。

  1. パイプを作成します。
  2. パイプを任意のデータで満たします(循環配列のすべてのエントリにPIPE_BUF_FLAG_CAN_MERGEフラグを設定するため)。
  3. パイプをドレインします(循環配列のすべてのstruct pipe_bufferインスタンスにPIPE_BUF_FLAG_CAN_MERGEフラグを設定したままにします)。通常、フラグはリセットされるべきです。ただし、Dirty Pipe脆弱性により、フラグは1に設定されたままになります。
  4. spliceシステムコールを使用して、読み取り専用ファイルをパイプに転送します。
  5. 読み取り専用ファイルを変更します。spliceシステムコールは参照渡し(pass-by-reference)メソッドを使用するため、攻撃者はPIPE_BUF_FLAG_CAN_MERGEフラグによりファイルを上書きできます。

エクスプロイト

以下のコマンドですべてをコンパイルします。

root@kitploit:~
make

エクスプロイト1 - 読み取り専用ファイルの上書き

実行

root@kitploit:~
./exploit-1

説明

リポジトリ内のexploit-1.cファイルにあるエクスプロイト1は、/etc/passwdファイル(このファイルには暗号化されたパスワードなどのユーザーアカウント情報が含まれています)内のrootユーザーのパスワードを上書きし、最終的にrootアクセスを持つターミナルを提供するものです。そのために、以下が必要でした。

  1. /etc/passwdファイルのバックアップを作成します。
  2. PIPE_BUF_FLAG_CAN_MERGEフラグを使用してパイプを準備します(上記の手順1、2、3に従って)。
  3. /etc/passwdファイルをパイプに転送し、このファイルの内容を既知の新しいrootパスワードで上書きします(上記の手順4と5に従って)。
  4. 設定された新しいパスワードを使用してrootセッションを作成します。
  5. 次に、パスワードはバックアップから元の値にリセットされ、痕跡を残しません。
  6. 最後に、確立されたrootセッションのまま、rootアクセスを持つシェルターミナルが解放されます。

エクスプロイト2 - SUIDバイナリのハイジャック

SUIDバイナリの検索

root@kitploit:~
find / -perm -4000 2>/dev/null

実行

root@kitploit:~
./exploit-2 <path-of-suid-binary>

説明

リポジトリ内のexploit-2.cファイルにあるエクスプロイト2は、SUIDバイナリを上書きしてハイジャックし(この種の攻撃はセクション3.5.2で報告されています)、最終的にrootアクセスを持つターミナルを提供するものです。そのために、以下が必要でした。

  1. パラメータとして受け取ったSUIDバイナリを上書きするために使用されるELF(Executable and Linking Format)実行可能コードを準備します。エクスプロイトでは、使用されるELF実行可能ファイルが新しい実行可能ファイル(/tmp/sh)を作成し、それがrootアクセスを持つシェルターミナルを作成します。
  2. パラメータとしてSUIDバイナリのパスを受け取ります。
  3. 受け取ったバイナリのバックアップを作成します。
  4. PIPE_BUF_FLAG_CAN_MERGEフラグを使用してパイプを準備します(上記の手順1、2、3に従って)。
  5. 受け取ったバイナリファイルをパイプに転送し、このファイルの内容を手順1で説明したELF実行可能ファイルで上書きします(上記の手順4と5に従って)。
  6. 次に、受け取ったバイナリはバックアップから元の内容に復元され、痕跡を残しません。
  7. 最後に、手順1で述べた実行可能ファイル/tmp/shが実行され、rootアクセスを持つ新しいシェルが開かれます。

エクスプロイト3 - リモートアクセスのための鍵の追加

実行

root@kitploit:~
./exploit-3

説明

リポジトリ内のexploit-3.cファイルにあるエクスプロイト3は、ルートシェルアクセスを取得するためにエクスプロイト1と同じ手順を使用します。違いは、エクスプロイト3はルートシェルアクセスを取得した後、攻撃者のSSH(Secure Shell)公開鍵を/root/.ssh/authorized_keysファイルに読み込み、Ngrokプラットフォームを使用してSSHリモートアクセス用のTCP(Transmission Control Protocol)トンネルを作成することです。

参考文献

[1] AHMED, Alexis. Privilege Escalation Techniques: Learn the art of exploiting Windows and Linux systems. Birmingham: Packt Publishing, 2021年10月.

[2] KELLERMANN, Max. The Dirty Pipe Vulnerability. 入手先: https://dirtypipe.cm4all.com/. アクセス日: 2022年7月23日.

[3] Exploit Database. 入手先: https://www.exploit-db.com/. アクセス日: 2022年8月3日.

[4] Traitor: Automatically exploit low-hanging fruit to pop a root shell. 入手先: https://github.com/liamg/traitor. アクセス日: 2022年8月3日.

[5] PayloadsAllTheThings. Linux - Privilege Escalation. 入手先: https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Linux%20-%20Privilege%20Escalation.md#cve-2022-0847-dirtypipe. アクセス日: 2022年8月3日.

[6] Linux Kernel Repository - Struct pipe_inode_info. 入手先: https://github.com/torvalds/linux/blob/v5.8/include/linux/pipe_fs_i.h#L76. アクセス日: 2022年8月3日.

[7] Linux Kernel Repository - Struct pipe_buffer. 入手先: https://github.com/torvalds/linux/blob/v5.8/include/linux/pipe_fs_i.h#L26-L32. アクセス日: 2022年8月3日.

[8] ARNTZ, Pieter. Linux "Dirty Pipe" vulnerability gives unprivileged users root access. Malwarebytes Lab. 入手先: https://www.malwarebytes.com/blog/news/2022/03/linux-dirty-pipe-vulnerability-gives-unprivileged-users-root-access. アクセス日: 2022年8月3日.

[9] Picus Security. Linux “Dirty Pipe” CVE-2022-0847 Vulnerability Exploitation Explained. 入手先: https://www.picussecurity.com/resource/linux-dirty-pipe-cve-2022-0847-vulnerability-exploitation-explained. アクセス日: 2022年8月3日.

[10] Exploit Database - Local Privilege Escalation (Dirty Pipe). 入手先: https://www.exploit-db.com/exploits/50808. アクセス日: 2022年8月3日.

ツールをダウンロード