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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-31431-Copy-Fail---Vulnerability-Detection-Script — CVE-2026-31431(Copy Fail)の検出スクリプト。カーネルバージョン、パッチの有無、カーネル設定、AF_ALGソケットの利用可能性、setuidバイナリ、および緩和策をチェックし、Linuxシステム上の脆弱性ステータスを判定します。 | Kitploit
ツール/GitHubGitHub/liamromanis101/cve-2026-31431-copy-fail---vulnerability-detection-script
クラウドインフラストラクチャセキュリティ脆弱性スキャナーコンテナセキュリティ脆弱性分析構成監査DevSecOps侵入検知インシデントレスポンス

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →
共有
GitHub
liamromanis101/cve-2026-31431-copy-fail---vulnerability-detection-script

CVE-2026-31431-Copy-Fail---Vulnerability-Detection-Script

CVE-2026-31431(Copy Fail)の検出スクリプト。カーネルバージョン、パッチの有無、カーネル設定、AF_ALGソケットの利用可能性、setuidバイナリ、および緩和策をチェックし、Linuxシステム上の脆弱性ステータスを判定します。

リポジトリを見る
2523ヶ月前Kitploit レビュー済み

CVE-2026-31431 — Copy Fail — 脆弱性検出スクリプト

検出のみ。動作するPoCは既に copy.fail/#exploit に存在します。 このスクリプトは、システム管理者やセキュリティチームが、自環境が脆弱なのか、あるいはパッチ適用後も依然として脆弱なのかを判断するためのものです。


これは何か?

2026年4月29日、Copy Fail(CVE-2026-31431)と呼ばれる脆弱性がXint Code Research Teamによって公開されました。これは、およそ2017年からLinuxカーネルに静かに存在していたロジックバグで、約10年にわたり、特権のないローカルユーザーなら誰でもrootを取得できるものです。

「特定の条件下で運と追い風があればrootを取得できる」という話ではありません。単に…rootを取得できます。確実に。ほぼすべての主要なLinuxディストリビューションで。

Ubuntu、Amazon Linux、RHEL、SUSE、その他過去約8年間のメインストリームカーネルを実行しているあらゆる環境に影響します。同じスクリプトで、再コンパイルも、ディストリビューションごとの調整も不要です。

ええ、聞こえている通り深刻です。

仕組みの簡単な説明

Linuxカーネルには、AF_ALGソケットを介して特権のないユーザーがアクセスできる暗号サブシステムがあります。splice()と呼ばれるメカニズムがあり、ファイルデータをコピーせずにそのサブシステムに直接送り込むことができます。つまり、ファイルのカーネルメモリ内キャッシュコピー(「ページキャッシュ」)が暗号操作の内部に入り込むことになります。

特定のアルゴリズム — IPsec拡張シーケンス番号に使用される authencesn — には、出力バッファをスクラッチ領域として使用し、本来の位置からわずかに4バイト超過して書き込むという癖があります。通常は無害です。しかし、/usr/bin/su のようなsetuidバイナリのページキャッシュページが(2017年の algif_aead.c の「最適化」により)その出力バッファに連結されると、その4バイトがカーネルのキャッシュされたバイナリコピーに直接書き込まれます。

操作はエラーで失敗します。カーネルはそのページをダーティとしてマークしません。ディスク上のファイルは変更されません。ディスク上のチェックサムを検証するファイル整合性ツールは何も問題を検出しません。

しかし、実行されるのはページキャッシュです。そして su はsetuid rootです。

完全な技術解説は xint.io にあり、一読の価値があります。


スクリプトがチェックする内容

Pythonスクリプト — 13項目のチェック

オリジナルリリースの7項目に加え、検出のギャップを埋めるための新しいチェックが6項目追加されています:

シェルスクリプト — 10項目のチェック

Bashスクリプトは同じコア検出ロジックをカバーしますが、Python固有の3項目を省略しています:

シェルスクリプトにない項目(Python版との比較):

欠落しているチェック理由
CONFIG_CRYPTO_USER_API_AEAD未実装 — 計画中
Python os.spliceの利用可能性シェルスクリプトには該当しない
rootユーザー警告未実装 — 計画中

どちらのスクリプトも何かを修正したり、エクスプロイトしたりするものではありません。システムの真実を伝え、それに基づいて行動できるようにするためのものです。


要件

  • Python 3.6+
  • 外部依存関係なし — 標準ライブラリのみ
  • root権限は不要 (意図的 — 特権のない攻撃者が見えるものをチェックします)
  • 推奨: root以外のユーザーとして実行 — 一部のチェック(AF_ALGソケット、setuid stat)はrootでは常に成功し、誤検知を報告します

使用方法

root@kitploit:~
# スクリプトをクローンまたはダウンロードしてから:
python3 cve-2026-31431-detect.py

これだけです。色分けされたレポートと最後にサマリーが表示されます。

終了コード

スクリプトは脆弱な検出結果がある場合に非ゼロのコードで終了し、パイプラインでの使用に適しています:

コード意味
0脆弱な条件が見つからない
11つ以上の脆弱な条件が見つかった
root@kitploit:~
# 例: ホストが脆弱な場合にCIステップを失敗させる
python3 cve-2026-31431-detect.py
rc=$?
if [ $rc -eq 1 ]; then
  echo "VULNERABLE — デプロイをブロック"
elif [ $rc -ne 0 ]; then
  echo "ERROR — スクリプトが完了しませんでした (exit $rc)"
fi

出力例

root@kitploit:~
CVE-2026-31431 'Copy Fail' — 脆弱性検出
authencesn ページキャッシュ破損 / ローカル権限昇格
uid=1001, euid=1001 として実行中

=== カーネルバージョン ===
  [VULNERABLE] カーネルバージョン
          理由 : カーネルが脆弱な範囲(4.10 – 6.14)に該当
          詳細 : リリース: 6.12.0-124.45.1.el10_1 — パッチ状態を確認する必要があります

=== CONFIG_CRYPTO_AUTHENC (カーネル設定) ===
  [VULNERABLE] CONFIG_CRYPTO_AUTHENC
          理由 : モジュールとしてビルド(=m): AF_ALG bind() で自動ロード。modprobeブラックリストが正しい緩和策です

=== CONFIG_CRYPTO_USER_API_AEAD (カーネル設定) ===
  [VULNERABLE] CONFIG_CRYPTO_USER_API_AEAD
          理由 : AF_ALG AEADインターフェースはロード可能なモジュール — 特権のないユーザーはAF_ALGソケットを介して暗号サブシステムにアクセスできます

...

  システムはCVE-2026-31431に対して脆弱である可能性が高いです

  推奨アクション:
    1. CVE-2026-31431に対するディストリビューションのカーネルアップデートを適用
    2. パッチ適用までの間、モジュールをブラックリスト化:
         echo 'install algif_aead /bin/false' > /etc/modprobe.d/disable-algif-aead.conf
         rmmod algif_aead 2>/dev/null
       注: これはCONFIG_CRYPTO_AUTHENC=m(モジュール)の場合にのみ有効です。
       CONFIG_CRYPTO_AUTHENC=y(組み込み)の場合、パッチ適用のみが唯一の修正方法です。

シェル版(DevSecOpsパイプライン用)

Pythonが存在しない環境や、シェルネイティブのツールが好まれる環境向けに、コンパニオンのBashスクリプト(cve-2026-31431-detect.sh)が用意されています。13項目中10項目のチェックを実行します — 相違点の詳細は上記のチェック比較表を参照してください。

root@kitploit:~
# 基本実行
bash cve-2026-31431-detect.sh

# JSON出力 — SIEM取り込み、Ansibleファクト、ログ集約に適しています
bash cve-2026-31431-detect.sh --json > scan-results.json

# クワイエットモード — サマリーのみ出力(CIログで有用)
bash cve-2026-31431-detect.sh --quiet

# ANSIカラー無効化(ログファイル用)
bash cve-2026-31431-detect.sh --no-colour

シェルスクリプトは同じ終了コード(0 = OK、1 = 脆弱)を使用し、パイプライン消費用の同等のJSON出力を生成します。システムにPython 3が利用可能な場合、シェルスクリプトはそれを使用してライブのAF_ALGソケットテストを実行します。それ以外の場合はカーネル設定の推論にフォールバックします。


修正方法

本当の修正はカーネルのパッチ適用です。 ディストリビューションのセキュリティアドバイザリを確認してください。

ディストリビューション確認先
Ubuntuubuntu.com/security/CVE-2026-31431
RHEL / Amazon Linuxdnf update kernel
SUSE

一時的な緩和策(モジュールビルドのみ)

CONFIG_CRYPTO_AUTHENC チェックが =m(組み込みではなくモジュールとしてビルド)と報告する場合、ブラックリスト化できます:

root@kitploit:~
echo 'install algif_aead /bin/false' > /etc/modprobe.d/disable-algif-aead.conf
rmmod algif_aead 2>/dev/null

重要: この緩和策は CONFIG_CRYPTO_AUTHENC=y(組み込み)の場合、効果がありません。その場合、カーネルのパッチ適用が唯一の修正方法です。スクリプトのCONFIG_CRYPTO_AUTHENCチェックで、どちらの状況にあるかがわかります。CONFIG_CRYPTO_AUTHENC が正しいカーネル設定キーであることに注意してください — 単一のオプションから authenc と authencesn の両方のモジュールがビルドされます。

IPsecを使用している場合、これに影響を受ける可能性があります — フリート全体に展開する前に確認してください。

アップストリームの修正

アップストリームの修正はこのコミットです — algif_aead.c の2017年のインプレースAEAD最適化を元に戻し、ソースと宛先のscatterlistを分離することで、ページキャッシュページが書き込み可能な宛先に入り込めないようにします。


コンテナとVM

Dockerコンテナ、Kubernetesポッド、その他のコンテナ環境内でこれを実行している場合、スクリプトは警告します:コンテナはホストカーネルを共有します。脆弱性はカーネルに存在し、コンテナイメージにはありません。ホストを評価してパッチを適用する必要があります。


DevSecOps統合の例

root@kitploit:~
# GitHub Actions
# スクリプトが1で終了すると、ステップは自然に失敗しパイプラインをブロックします。
# 追加設定は不要 — 非ゼロの終了コードはデフォルトでステップを失敗させます。
- name: CVE-2026-31431のチェック
  run: |
    python3 cve-2026-31431-detect.py
    rc=$?
    if [ $rc -eq 1 ]; then
      echo "VULNERABLE — パイプラインがブロックされました"
      exit 1
    elif [ $rc -ne 0 ]; then
      echo "ERROR — 検出スクリプトが完了しませんでした (exit $rc)"
      exit $rc
    fi
root@kitploit:~
# Ansible
# playbook_dirを使用してスクリプトパスが正しく解決されるようにします。
# failed_whenは非ゼロの終了(脆弱性またはスクリプトエラー)をチェックします。
- name: CVE-2026-31431のチェック
  script: "{{ playbook_dir }}/cve-2026-31431-detect.py"
  register: cve_check
  failed_when: cve_check.rc != 0
root@kitploit:~
# Nagios / 監視チェック(シェルスクリプト — 終了コードをネイティブにサポート)
bash cve-2026-31431-detect.sh --quiet
# exit 0 = OK、exit 1 = CRITICAL(脆弱)
root@kitploit:~
# SIEM / ログ集約用のJSON出力(シェルスクリプト)
bash cve-2026-31431-detect.sh --json --quiet > /var/log/cve-2026-31431-$(hostname)-$(date +%Y%m%d).json

開示のタイムライン

TheoriのTaeyang Lee氏による当初の研究洞察、および完全な開示レポートを提供したXint Code Research Teamに感謝します。


貢献

誤検知を見つけましたか? 見逃しているディストリビューションがありますか? チェックすべきカーネル設定がありますか? PR歓迎です。目標は正確なシグナルであり、単なる恐ろしい赤いテキストではありません。

免責事項

このツールは防御的なセキュリティ目的で現状のまま提供されます。評価を許可されたシステムに対してのみ使用してください。変な使い方はしないでください。

ツールをダウンロード
#チェック確認内容
1カーネルバージョンこのカーネルは影響範囲(4.10–6.14)に該当するか?
2パッチの有無修正コミットが実行中のカーネルに実際に含まれているか?
3algif_aeadモジュール脆弱なモジュールがロードされているか、またはロード可能か?
4CONFIG_CRYPTO_AUTHENC (新規)CONFIG_CRYPTO_AUTHENC が組み込み(=y)かモジュール(=m)か? この単一オプションで authenc と authencesn の両方がビルドされます。組み込みの場合、modprobeブラックリストによる緩和策は効果がありません。
5CONFIG_CRYPTO_USER_API_AEAD (新規)AF_ALG AEADユーザースペースインターフェースがコンパイルされているか? されていない場合、エクスプロイト経路全体がコンパイル時に閉じられています。
6AF_ALGソケット特権のないユーザーが今すぐソケットを開けるか?
7Python os.splice純Pythonのエクスプロイト経路が利用可能か?
8Setuidバイナリシステム上に存在する読み取り可能なsetuid-rootターゲットの拡張リスト。
9緩和策AppArmor、SELinux、seccomp — 何が導入されているか?
10ユーザー名前空間 (新規)特権のないユーザー名前空間が有効か?(Copy Failを直接ブロックするものではありませんが、より広範なローカル権限昇格の攻撃面に影響します。)
11Transparent hugepages (新規)THPの状態 — ページキャッシュのアライメントとエクスプロイトの信頼性に影響する可能性があります。
12環境検出 (新規)Docker/コンテナ/VMコンテキスト — コンテナはホストカーネルを共有します。パッチが必要なのはホストです。
13rootユーザー警告 (新規)rootとして実行している場合に警告します。特権のない制限に関係なく、いくつかのチェックはrootに対して誤検知を報告するためです。
#チェック備考
1カーネルバージョン
2パッチの有無
3algif_aeadモジュール
4AF_ALGソケット利用可能な場合はPythonをヘルパーとして使用。それ以外はカーネル設定の推論にフォールバック
5SetuidバイナリPython版と同じ拡張リスト
6緩和策AppArmor、SELinux、seccomp
7CONFIG_CRYPTO_AUTHENC
8ユーザー名前空間
9Transparent hugepages
10環境検出
zypper update kernel-default
Debianapt update && apt upgrade
日付イベント
2026-03-23Linuxカーネルセキュリティチームに報告
2026-03-24受理
2026-03-25パッチが提案されレビュー
2026-04-01メインラインカーネルに修正がコミット
2026-04-22CVE-2026-31431が割り当て
2026-04-29公開開示