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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-41651 — # CVE-2026-41651 の概念実証エクスプロイト PackageKit の TOCTOU ローカル権限昇格に対する概念実証エクスプロイト。技術分析、検出ロジック、および修復ガイダンスを含みます。 | Kitploit
ツール/GitHubGitHub/baph00met/cve-2026-41651
特権昇格脆弱性分析エクスプロイトペネトレーションテストレッドチーミングラボと実践
GitHubbaph00met/cve-2026-41651

CVE-2026-41651

# CVE-2026-41651 の概念実証エクスプロイト PackageKit の TOCTOU ローカル権限昇格に対する概念実証エクスプロイト。技術分析、検出ロジック、および修復ガイダンスを含みます。

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

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2026-41651 — PackageKit TOCTOU ローカル権限昇格

分類: パープルチーム評価アーティファクト
許可された用途のみ。 本書および付属のテストスクリプトは、書面による許可が得られたシステム上での内部セキュリティ検証のみを目的としています。


悪用の証明

Proof of exploitation


目次

  1. 脆弱性の概要
  2. 技術的分析
  3. テストスクリプトの説明
    • 動作
    • 強化環境への対応
    • 互換性
  4. 侵害の指標
    • ファイルシステム
    • プロセスと実行
    • D-Bus アクティビティ
    • 監査ログパターン
    • パッケージマネージャの痕跡
    • 権限昇格の痕跡
  5. 検出ロジック
  6. 影響を受けるシステムとバージョン
  7. 修復
  8. 参考情報

脆弱性の概要

フィールド値
CVE IDCVE-2026-41651
CWECWE-367 — Time-of-check Time-of-use (TOCTOU) 競合状態
コンポーネントPackageKit (packagekitd、D-Bus サービス)
影響を受けるPackageKit ≤ 1.3.4
修正バージョンPackageKit 1.3.5
影響ローカル権限昇格 → root
攻撃ベクトルローカル / D-Bus (非特権ユーザーセッション)
公開日2026-04-22 (Deutsche Telekom Red Team)
アドバイザリGHSA-f55j-vvr9-69xv
修正コミット76cfb675fb31acc3ad5595d4380bfff56d2a8697

PackageKit は、システムパッケージ管理のための D-Bus 抽象化レイヤーであり、Debian、Ubuntu、Fedora、RHEL、SUSE、Arch Linux の GNOME ベースのデスクトップにデフォルトで存在します。非特権ユーザーに代わって特権パッケージ操作を仲介するため、その認可フローに存在する欠陥は、システム全体に root レベルの影響を及ぼします。


技術的分析

根本原因

pk-transaction.c (1.3.5 より前) は、アクションメソッドの再呼び出しに対する状態ガードを強制していませんでした。D-Bus クライアントは、トランザクションオブジェクトがすでに PK_TRANSACTION_STATE_NEW から遷移した後でも、同じトランザクションオブジェクトに対して InstallFiles (または他のアクションメソッド) を複数回呼び出すことができました。

攻撃チェーン

攻撃者 (非特権)
  │
  ├─① CreateTransaction()          → PackageKit がトランザクションオブジェクトパス (tid) を返す
  │
  ├─② InstallFiles(tid, FLAG_SIMULATE=4, [dummy.pkg])
  │       PackageKit は dummy.pkg の polkit 認可チェックをキューに入れる。
  │       まだインストールは発生しない — SIMULATE はドライラン専用を意味する。
  │
  ├─③ InstallFiles(tid, FLAG_NONE=0, [payload.pkg])   ← TOCTOU ウィンドウ
  │       認可が解決される前に同じ tid で再呼び出し。
  │       脆弱なバージョンはキューに入れられたパラメータを payload.pkg で上書きする。
  │
  └─④ polkit が認可を付与 (ユーザーが承認、または自動認可)
          packagekitd が payload.pkg を root としてインストール。
          payload の postinst/post スクリプト: install -m 4755 /bin/bash /tmp/.suid_bash
          攻撃者は /tmp/.suid_bash -p を実行  →  root シェル。

競合が成立する理由

手順②と③は、同じ接続上でノンブロッキングの非同期 D-Bus 呼び出しとして送信され、単一の書き込みでフラッシュされます。この2つのメッセージは、packagekitd が②を処理して状態機械を進める前に到着するため、TOCTOU ウィンドウが開いたままになります。1.3.5 の修正では、PK_TRANSACTION_STATE_NEW 以降の再呼び出しに対して PK_TRANSACTION_ERROR_INVALID_STATE を返す明示的な状態チェックが追加されています。


テストスクリプトの説明

ファイル: cve-2026-41651-purpleteam.py
言語: Python 3
依存関係: python3-gi (GObject introspection / GLib/Gio バインディング)

目的

準備されたテストシステム上で CVE-2026-41651 の悪用可能性を実証します。目的は以下の通りです:

  • インストールされている PackageKit バージョンが脆弱かどうかの検証
  • SIEM/EDR チューニングのための現実的な IOC テレメトリの生成
  • パッチ適用前後の検出カバレッジのテスト

動作

フェーズアクション
セットアップ/proc/mounts を調査して SUID/exec 可能なドロップディレクトリを選択し、umask(022) を設定、すべてのビルド成果物に明示的な chmod を適用し、/tmp にダミーとペイロードのパッケージをビルド
悪用システム D-Bus 接続を開き、PackageKit トランザクションを作成し、2回呼び出しの競合を発火
ペイロードパッケージの post-install スクリプトが /bin/bash をモード 04755、所有者 root で <drop_dir>/.suid_bash にコピー。ドロップディレクトリは実行時に解決される (強化環境への対応 を参照)
権限昇格SUID バイナリをポーリング (90 秒タイムアウト) し、-p 付きで execl して root シェルを取得
クリーンアップ終了時 (成功または失敗) に一時的な .deb/.rpm ファイルを削除

強化環境への対応

デフォルトで強化されたシステムでは、2つの独立したポイントで悪用をブロックできます。スクリプトは両方を自動的に処理します。

1. 制限的な umask (027 / 077)

プロセスが継承した umask が 027 または 077 の場合、mkdir() は 750 または 700 のディレクトリを生成します。dpkg-deb と rpmbuild の両方がビルドツリー全体を走査する必要があります — いずれかのディレクトリが読み取り不可の場合、ビルドは静かに失敗します。

適用される修正: os.umask(0o022) が、ファイルやディレクトリが作成される前に起動時に呼び出されます。さらに、ビルドツリー内のすべてのディレクトリとファイルは、作成直後に明示的な chmod を受け取ります (ディレクトリとスクリプトは 0o755、データファイルは 0o644)。これにより、継承された umask に関係なく正しいパーミッションが保証されます。

2. /tmp の nosuid / noexec マウントフラグ

フラグ悪用への影響
nosuidカーネルはそのファイルシステムに保存されたファイルから SUID ビットを静かに削除する — コピーされた bash は root にならない
noexecSUID バイナリをまったく実行できない

適用される修正: 起動時に、_find_suid_dir() が /proc/mounts を読み取り、どちらのフラグも設定されていないファイルシステムが見つかるまで、優先順位に従って候補ディレクトリをテストします。解決されたパスはペイロードの post-install スクリプトに組み込まれ、ポーリングと実行に使用されます。

優先度候補一般的な強化
1/var/tmpnosuid/noexec が設定されることは稀; 再起動後も存続
2/dev/shmtmpfs、通常は寛容; 再起動でクリア
3/tmpCIS/STIG システムではしばしば強化される
4$HOME最後の手段; ユーザーが常に書き込み可能

すべての候補がブロックされている場合、スクリプトは静かに失敗するのではなく、明確なエラーで終了します。

互換性

ディストリビューションファミリーパッケージツールテスト済み
Debian / Ubuntudpkg-deb✓
RHEL / Fedorarpmbuild✓
SUSE / openSUSErpmbuild✓

侵害の指標

IOC は、汎用/インフラストラクチャレベルからスクリプト固有のアーティファクトまでリストされています。汎用の指標に基づく検出は、使用される PoC のバリアントに関係なく、この CVE を捕捉します。

ファイルシステム

IOCパス / パターン備考
ワールドライタブルディレクトリ内の SUID バイナリ<drop_dir>/.suid_bash — ドロップディレクトリはマウントフラグに応じて /var/tmp、/dev/shm、/tmp、または $HOMEスクリプトは nosuid/noexec のない最初のディレクトリを選択; 検出を4つの候補すべてをカバーするように拡張
/tmp 内の一時パッケージファイル/tmp/*.deb、/tmp/*.rpm非特権ユーザーによってビルド; 正当なパッケージ操作は /var/cache またはダウンロードパスを使用
dpkg ビルドツリー/tmp/pkbuild_*、/tmp/build_*dpkg-deb -b のステージングディレクトリ
/tmp 内の rpmbuild ツリー/tmp/rpmbuild_*~/rpmbuild の外部で呼び出された rpmbuild のステージングディレクトリ
/tmp 内の postinst / %post スクリプト/tmp/*/DEBIAN/postinst、/tmp/*/SPECS/*.specシステムバイナリをコピーまたは chmod するスクリプトは高信頼度

プロセスと実行

IOC詳細
root 以外の apt 以外のプロセスによって生成された dpkg-deb親はユーザーの Python/シェルプロセスであり、apt、dpkg、unattended-upgrades ではない
非特権ユーザーによって生成された rpmbuildパッケージ関連の親 (mock、koji、CI ランナー) がない場合、これは異常
/tmp パスから /bin/sh または /bin/bash を生成する packagekitdpackagekitd は postinst スクリプトを実行; /tmp 内のソースパスが異常
UID ≠ EUID の bash プロセスSUID 実行; EUID=0、UID=<攻撃者>
bash -p の呼び出し-p フラグは SUID が設定されている場合に特権モードを有効にする — 正当な使用は稀
短命な .suid_bash プロセスの祖先祖父母は packagekitd、親は攻撃者のシェル

D-Bus アクティビティ

IOC詳細
同じオブジェクトパスで org.freedesktop.PackageKit.Transaction.InstallFiles が2回呼び出される両方の呼び出しがミリ秒以内に到着; 正当なクライアントはトランザクションごとに1回呼び出す
同じ tid で FLAG_SIMULATE (4) の直後に FLAG_NONE (0)このシーケンスに正当なユースケースはない
CreateTransaction → 急速な二重 InstallFiles パターンD-Bus モニター (dbus-monitor --system) または監査 dbus ルールで検出可能
/tmp 下のファイルパスを持つ InstallFiles正当な GUI パッケージインストーラー (GNOME Software、Discover) は $HOME または /var/cache のパスを使用

監査ログパターン

有効化: auditctl -a always,exit -F arch=b64 -S all -F path=/usr/bin/packagekitd
または、以下のルールを /etc/audit/rules.d/ で使用:

ツールをダウンロード