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

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

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 ローカル権限昇格に対する概念実証エクスプロイト。技術分析、検出ロジック、および修復ガイダンスを含みます。

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

人気

すべて見る →

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

すべてのツールを探索

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

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

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

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


悪用の証明

Proof of exploitation


目次

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

脆弱性の概要

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 (または他のアクションメソッド) を複数回呼び出すことができました。

攻撃チェーン

root@kitploit:~
攻撃者 (非特権)
  │
  ├─① 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 テレメトリの生成
  • パッチ適用前後の検出カバレッジのテスト

動作

強化環境への対応

デフォルトで強化されたシステムでは、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 スクリプトに組み込まれ、ポーリングと実行に使用されます。

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

互換性

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

侵害の指標

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

ファイルシステム

プロセスと実行

D-Bus アクティビティ

監査ログパターン

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

root@kitploit:~
# すべての候補ドロップディレクトリでの SUID ファイル作成を検出
-a always,exit -F arch=b64 -S chmod,fchmod,fchmodat -F a2&04000 -F dir=/tmp -k suid_drop
-a always,exit -F arch=b64 -S chmod,fchmod,fchmodat -F a2&04000 -F dir=/var/tmp -k suid_drop
-a always,exit -F arch=b64 -S chmod,fchmod,fchmodat -F a2&04000 -F dir=/dev/shm -k suid_drop

# root 以外による dpkg-deb / rpmbuild を検出
-w /usr/bin/dpkg-deb -p x -k pkg_build_nonroot
-w /usr/bin/rpmbuild -p x -k pkg_build_nonroot

# 任意の候補ドロップディレクトリからの SUID bash 実行を検出
-a always,exit -F arch=b64 -S execve -F dir=/tmp -F uid!=0 -F euid=0 -k priv_esc_drop
-a always,exit -F arch=b64 -S execve -F dir=/var/tmp -F uid!=0 -F euid=0 -k priv_esc_drop
-a always,exit -F arch=b64 -S execve -F dir=/dev/shm -F uid!=0 -F euid=0 -k priv_esc_drop

パッケージマネージャの痕跡

権限昇格の痕跡


検出ロジック

SIEM 疑似ルール (汎用 — すべての CVE-2026-41651 バリアントをカバー)

root@kitploit:~
(
  event.category == "process"
  AND process.name IN ("dpkg-deb", "rpmbuild")
  AND process.user.id != "0"
  AND NOT process.parent.name IN ("apt", "apt-get", "dpkg", "rpm", "dnf", "yum", "zypper", "mock", "koji")
)
OR
(
  event.category == "file"
  AND file.path LIKE "/tmp/%" OR file.path LIKE "/var/tmp/%" OR file.path LIKE "/dev/shm/%"
  AND file.owner == "root"
  AND (file.mode LIKE "04%")
)
OR
(
  event.category == "process"
  AND process.name == "bash"
  AND process.real_user.id != "0"
  AND process.effective_user.id == "0"
  AND NOT process.parent.name IN ("sudo", "su", "sshd", "login", "pam")
)

EDR ビヘイビアチェーン

root@kitploit:~
packagekitd
  └─ sh / bash  (cwd または引数が /tmp、/var/tmp、/dev/shm、または $HOME に一致)
       └─ install / cp / chmod  (ターゲットが SUID + 所有者 root)

完全なチェーンにフラグを立てます。個々のステップだけでは良性の場合がありますが、packagekitd から SUID 設定コマンドへの親子関係は、選択されたドロップディレクトリに関係なく高信頼度です。パスベースのルールを4つの候補すべてをカバーするように拡張します。


影響を受けるシステムとバージョン

インストール済みバージョンの確認: pkcon backend-details または packagekit --version
報告されたバージョンが ≤ 1.3.4 の場合、脆弱です。


修復

主な対策: PackageKit を 1.3.5 にアップグレードするか、ベンダー固有のバックポートを適用します。

root@kitploit:~
# Debian / Ubuntu
apt update && apt install --only-upgrade packagekit

# Fedora / RHEL
dnf upgrade packagekit

# SUSE
zypper update packagekit

緩和策 (パッチ適用が直ちに不可能な場合):


参考情報


生成日: 2026-04-24 | 更新日: 2026-04-25 | パープルチーム評価 | 内部使用のみ

ツールをダウンロード
フィールド値
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
フェーズアクション
セットアップ/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 ファイルを削除
優先度候補一般的な強化
1/var/tmpnosuid/noexec が設定されることは稀; 再起動後も存続
2/dev/shmtmpfs、通常は寛容; 再起動でクリア
3/tmpCIS/STIG システムではしばしば強化される
4$HOME最後の手段; ユーザーが常に書き込み可能
rpmbuild
✓
SUSE / openSUSErpmbuild✓
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、親は攻撃者のシェル
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 のパスを使用
IOC詳細
dpkg/rpm 履歴に pk-dummy-* または pk-payload-* という名前のパッケージスクリプト固有だが、バリアントは異なる名前を使用する
ローカルファイル (/tmp/*.deb または /tmp/*.rpm) からインストールされたパッケージdpkg -l または rpm -qa --last — リポジトリ由来のないパッケージを探す
チェンジログ/空の説明がないパッケージ細工されたパッケージは最小限のメタデータを使用; dpkg -s <pkg> または rpm -qi <pkg>
インストール直後に削除された、またはパッケージ DB に表示されないパッケージ失敗した悪用試行は部分的な状態を残す可能性がある
ローカルファイルインストールの packagekit トランザクションログエントリ/var/log/PackageKit/transactions.db または journald の packagekitd エントリ
IOC詳細
任意の候補ドロップディレクトリ内の .suid_bashドロップパスはマウントフラグに基づいて /var/tmp、/dev/shm、/tmp、$HOME から実行時に選択される — 4つすべてを確認: find /var/tmp /dev/shm /tmp $HOME -uid 0 -perm -4000 2>/dev/null
ユーザー書き込み可能ディレクトリ内の SUID ビットが設定された root 所有のファイルクリーンなシステムでは常に空であるべき
euid=0 で PAM / sudo / su の祖先がない bash プロセスツリー正当な権限遷移ではなく SUID 実行パスを示す
非管理者ユーザーへの org.freedesktop.packagekit.package-install の polkit 付与ユーザーが sudo / wheel グループにいない場合、予期しない
ディストリビューションデフォルトの PackageKit脆弱修正バージョンが利用可能
Ubuntu 24.04 LTS1.3.xはいapt upgrade 経由
Ubuntu 22.04 LTS1.2.xはいバックポート進行中
Debian 12 (Bookworm)1.2.xはいセキュリティトラッカー保留中
Fedora 411.3.xはいdnf upgrade packagekit
RHEL 9 / CentOS Stream 91.2.xはいRHSA 保留中
SUSE Linux Enterprise 151.1.x可能性ありSUSE アドバイザリ保留中
Arch Linux1.3.xはいAUR / pacman 更新済み
緩和策コマンド / 設定注意点
PackageKit サービスの無効化systemctl disable --now packagekitdGNOME Software / Discover の GUI 更新が壊れる
D-Bus アクセスの制限/etc/dbus-1/system.d/org.freedesktop.PackageKit.conf に非特権ユーザー向けの deny ルールを追加正当なユーザー向けパッケージツールが壊れる可能性がある
polkit の強化org.freedesktop.packagekit.package-install を auth_admin に設定 (常に管理者パスワードを要求)利便性は低下するが攻撃面は狭まる
監査モニタリング監査ログパターン セクションの監査ルールを展開検出のみ、予防ではない
リソースリンク
OSS-Security 開示https://www.openwall.com/lists/oss-security/2026/04/22/6
GitHub セキュリティアドバイザリGHSA-f55j-vvr9-69xv
修正コミットhttps://github.com/PackageKit/PackageKit/commit/76cfb675fb31acc3ad5595d4380bfff56d2a8697
PackageKit 1.3.5 リリースhttps://github.com/PackageKit/PackageKit/releases/tag/v1.3.5
公開 PoC リファレンスhttps://github.com/CipherCloak/CVE-2026-41651
CWE-367https://cwe.mitre.org/data/definitions/367.html
polkit ドキュメントhttps://www.freedesktop.org/software/polkit/docs/latest/