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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
ツール/GitHubGitHub/liumuqing/cve-2021-3899_poc
特権昇格脆弱性分析エクスプロイトペネトレーションテスト
GitHubliumuqing/cve-2021-3899_poc

CVE-2021-3899_PoC

apport の競合状態により、Ubuntu 上でローカル権限昇格が発生する

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

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2021-3899 PoC

再現手順

  1. 古いバージョンのapportをインストールします: sudo apt-get install apport=2.20.11-0ubuntu27 (2.20.11-0ubuntu27.10以下の任意のバージョンで構いませんが、ソースコードをダウンロードする必要があります)
  2. (任意) pid_maxを小さく設定します。そうしないと、pidロールバックの準備に時間がかかります。echo 10000 | sudo tee /proc/sys/kernel/pid_max
  3. 誰でもrootとしてpingを実行できるようにします: /etc/sudoers に ALL ALL=(root) NOPASSWD: /usr/bin/ping を追加します
  4. ulimit -c unlimited; ./exploit を複数回実行します
  5. /etc/logrotate.d/core にファイルが生成されるはずです
  6. 別のシェルを開いて nc -lvcp 1234 を実行します
  7. logrotateがトリガーされるのを待ちます。以下の方法があります:
    1. crontab-dailyのトリガーより1分早く時計を調整し、待ちます。(/etc/crontab を確認)
    2. sudo logrotate -vf /usr/sbin/logrotate /etc/logrotate.conf を実行して、logrotateを即座にトリガーします。(/etc/cron.daily/logrotate と同じです)
  8. 127.0.0.1:1234 に接続するrootリバースシェルが得られます

詳細

Apportは、プロセスの開始時刻がapport自身の開始時刻より後かどうかをチェックすることで、pidが再利用されているかどうかを確認します:

root@kitploit:~
  # /usr/share/apport/apport
  594 apport_start = get_apport_starttime()
  595 process_start = get_process_starttime()
  596 if process_start > apport_start:
  597 error_log('process was replaced after Apport started, ignoring')
  598 sys.exit(0)

しかし、このpidはapport起動直後に再利用される可能性があります。その場合、get_apport_starttime() == get_process_starttime() となります。

したがって、uid==0 で実行される別のプロセスでこのPIDを再占有できれば、apportに -rw------- root:root のコアファイルを落下させることができます:

  1. クラッシュさせるプロセスXを準備します。そのpidはAです。
  2. 現在のpidがA - 2に達するまで、forkプロセスを繰り返します。
  3. プロセスXをクラッシュさせると、カーネルによってpid A - 1でapportが起動されます。プロセスXをkillするので、pid Aは空きになります。
  4. cwd を /etc/logrotate.d/ にして sudo ping 8.8.8.8 を実行します。root:root で実行されるプロセスがpid Aを再占有します。
  5. sudoとapportの開始時刻が同じなので、596行目のチェックはバイパスされます。apportはプロセスXのコアファイルを /etc/logrotate.d に落下させます。
ツールをダウンロード