
CVE-2026-31431 Copy Failに対する高速で監査可能なLinux緩和策: algif_aeadブロック、検証、およびAF_ALG seccomp強化。
______ ______ _ __ ______ __
/ ____/___ ____ __ _/ ____/___ _(_) / / ____/_ ______ __________/ /
/ / / __ \/ __ \/ / / / /_ / __ `/ / / / / __/ / / / __ `/ ___/ __ /
/___/ /_/ / /_/ / /_/ / / __/ / /_/ / / / / /_/ / /_/ / /_/ / / / /_/ /
\____/\____/ .___/\__, /_/ \__,_/_/_/ \____/\__,_/\__,_/_/ \__,_/
/_/ /____/
高速で監査可能なLinuxエクスポージャー評価と緩和ツール – カーネルパッチ適用までの間、CVE-2026-31431 “Copy Fail” に対応します。
CopyFail Guard は、Linux システム管理者、DevSecOps エンジニア、プラットフォームチーム、インシデント対応担当者向けの防御運用ツールです。Linux の algif_aead / AF_ALG 問題に対するエクスポージャーを低減します。
algif_aead が利用可能か、ロードされているか、組み込まれているか、すでにブロックされているかを確認modprobe.d ブロックをインストールし、安全な場合にモジュールをアンロード最終的な修正: ベンダーのパッチ済みカーネルをインストールし、再起動してください。
このツールは、開示からフリート全体へのパッチ適用完了までの運用上のギャップを埋めるものです。
splice、setuid の変更、権限昇格、破壊的なプローブを行わずにエクスポージャーと AF_ALG の到達可能性を確認します。/etc/modprobe.d/99-copyfail-guard.conf を1つ書き込むだけです。ロールバックではそのファイルのみを削除します。seccomp-patch は、既存の Docker/Podman/Kubernetes seccomp プロファイルに AF_ALG 拒否を追加し、ランタイムのセキュリティ強化を置き換えません。assess --json と文書化された終了コードにより、フリートスキャン、SIEM キャプチャ、変更管理の証跡に対応します。Linux ホストで簡単な回答が必要な場合:
git clone --depth 1 https://github.com/juliosuas/copyfail-guard.git
cd copyfail-guard
sudo ./bin/copyfail-guard.sh doctor
sudo ./bin/copyfail-guard.sh assess
判定が「露出」かつ algif_aead がモジュール形式の場合:
sudo ./bin/copyfail-guard.sh mitigate --yes
sudo ./bin/copyfail-guard.sh verify
再現性のあるインストールには、リリースタグを固定します:
git clone --branch v0.3.0 --depth 1 https://github.com/juliosuas/copyfail-guard.git
新しいリリースが利用可能になったら、v0.3.0 を最新のタグに置き換えてください。
まず安全な露出チェックを実行:
sudo ./bin/copyfail-guard.sh assess
結果の読み方:
| 判定ファミリー | 意味 | 次にすべきこと |
|---|---|---|
EXPOSED_* | algif_aead / AF_ALG が到達可能またはロード可能と思われる | 今すぐ緩和し、その後パッチ適用と再起動 |
PARTIALLY_MITIGATED_* | ブロックは存在するが、ロード済みモジュールまたは再起動状態が依然として重要 | 再起動または安全にアンロードし、確認 |
INTERIM_MITIGATED_* | ローカル緩和がアクティブ | 維持するが、それでもパッチ適用と再起動が必要 |
LOW_OBVIOUS_EXPOSURE_* | ローカルチェックでは明らかな algif_aead 露出を検出せず | とにかくベンダーのパッチ状況を確認 |
信頼できないコンテナ、CI ジョブ、サンドボックス、またはマルチユーザーワークロードを実行している場合は、そのランタイム内で AF_ALG ソケット作成がブロックされているかもテスト:
python3 tools/afalg-socket-test.py
PERMITTED は悪用の成功を証明するものではありませんが、関連するユーザー空間暗号化 API に到達可能であることを示します。防御運用においては、パッチ適用カーネルのロールアウトを確認している間に緩和を適用する理由として十分です。
破壊的な PoC は含まれていません。これは特徴であり、欠落ではありません。
実際の Copy Fail エクスプロイトの証明には、カーネルメモリ/ページキャッシュへの影響や権限昇格の検証が必要です。それを公開緩和リポジトリに同梱すると、プロジェクトの安全性と本番環境への展開性が低下します。
CopyFail Guard は、オペレーターが安全に行動できることを証明します:
最終的な脆弱性状況については、このツールをベンダーアドバイザリ/パッケージインベントリおよび再起動の証拠と組み合わせて使用してください。
CopyFail Guard は 緩和策であり、根本治療ではありません。露出を減らし、暫定管理策を検証します。恒久的な修正は、ベンダーパッチ済みカーネルと再起動です。
このツールは、インシデント対応のために意図的に clone-and-run 可能に設計されています。コアホストワークフローにコンパイラ、カーネルヘッダ、エクスプロイトコード、サードパーティパッケージマネージャは不要です。python3 は --json 出力、seccomp-patch、および非エクスプロイト AF_ALG ソケットテストに必要です。
Clone-and-run:
git clone https://github.com/juliosuas/copyfail-guard.git
cd copyfail-guard
chmod +x bin/copyfail-guard.sh
sudo ./bin/copyfail-guard.sh doctor
sudo ./bin/copyfail-guard.sh assess
sudo ./bin/copyfail-guard.sh mitigate --yes
sudo ./bin/copyfail-guard.sh verify
オプションのシステムインストール:
git clone https://github.com/juliosuas/copyfail-guard.git
cd copyfail-guard
sudo ./scripts/install.sh
sudo copyfail-guard status
インストーラは、管理されたロールアウトのためにソースとターゲットを固定できます:
sudo env COPYFAIL_GUARD_REF=v0.3.0 ./scripts/install.sh
新しいリリースが利用可能になったら、COPYFAIL_GUARD_REF に最新のタグを使用してください。
コンテナ / CI 強化:
./bin/copyfail-guard.sh seccomp-patch docker-default.json copyfail-seccomp.json
docker run --security-opt seccomp=./copyfail-seccomp.json IMAGE
保護されたコンテナ内で AF_ALG がブロックされていることを検証:
docker run --rm \
--security-opt seccomp=./copyfail-seccomp.json \
-v "$PWD/tools:/tools:ro" \
python:3.12-alpine \
python /tools/afalg-socket-test.py
期待される保護結果:
BLOCKED: socket(AF_ALG) denied by policy (...)
期待される判定、JSON 構造、コンテナ検証結果については、サンプル出力 を参照してください。
Copy Fail は、AF_ALG ユーザー空間暗号化 API の algif_aead コンポーネントにおける Linux カーネルのローカル権限昇格脆弱性です。公開アドバイザリでは、非特権ローカルユーザーが到達可能なページキャッシュ書き込みプリミティブについて説明しており、共有カーネルシステム(Kubernetes ノード、CI/CD ランナー、マルチテナントホスト、エージェントサンドボックス、開発者マシン)で特に危険です。
正しい修正は、上流のリバート/修正を含むベンダーカーネルアップデートと、パッチ適用カーネルへの再起動です。CopyFail Guard は、その再起動がフリート全体で完了するまでの期間の防御運用ヘルパーです。
| 領域 | コマンド | 目的 |
|---|---|---|
| 安全な評価 | assess | 非エクスプロイトの露出判定、次のアクション、自動化対応の終了コードを提供 |
| 依存関係チェック | doctor | 必須/オプションツールを確認し、ランタイムの制限を説明 |
| ホスト検査 | status | OS/カーネル、モジュールの利用可能性、ロード状態、組み込み警告、modprobe ブロック、明らかな AF_ALG コンシューマを表示 |
| ホスト緩和 | mitigate | /etc/modprobe.d/99-copyfail-guard.conf を書き込み、可能なら algif_aead をアンロード |
| 検証 | verify | モジュールがロード済み、組み込み、またはブロックされていない場合に明確に失敗 |
| ロールバック | rollback | CopyFail Guard が管理する modprobe ファイルのみを削除 |
| コンテナ | seccomp-patch | 既存の seccomp プロファイルをパッチし、通常のソケット使用を維持しながら socket(AF_ALG, ...) を拒否 |
| 緊急プロファイル | seccomp-docker | 緊急用のターゲット AF_ALG 拒否プロファイルを生成 |
| Kubernetes | k8s-example | Localhost seccomp Pod の例を表示 |
コアホストコマンド:
bashmodinfo、modprobe、lsmod、rmmod(利用可能な場合)grep、awk、mktemp、installオプションの可視化ツール:
lsof または ssSeccomp プロファイルパッチ:
python3 は --json、seccomp-patch、tools/afalg-socket-test.py に必要エクスプロイトコード、コンパイラ、カーネルヘッダ、サードパーティパッケージは不要です。
CopyFail Guard には エクスプロイトの概念実証は含まれていません。これは意図的です。これで脆弱性が証明されますか? を参照してください。
代わりに、assess は安全な運用チェックを実行します:
algif_aead が利用可能、ロード済み、組み込み、またはブロックされているかを検出自動化 JSON:
sudo ./bin/copyfail-guard.sh assess --json
./bin/copyfail-guard.sh doctor --json
終了コード:
| コード | 意味 |
|---|---|
0 | ローカルチェックで明らかな露出が低い |
1 | 暫定緩和がアクティブ、パッチ/再起動がまだ必要 |
10 | 露出あり/緩和可能 |
11 | 部分的に緩和済み、再起動またはアンロードが必要 |
12 | 組み込みモジュールパス、パッチ/再起動が必要 |
20 | 評価状態不明 |
mitigate は以下を書き込みます:
/etc/modprobe.d/99-copyfail-guard.conf
内容:
# Managed by CopyFail Guard for CVE-2026-31431
install algif_aead /bin/false
blacklist algif_aead
その後、以下を試行:
sudo rmmod algif_aead
モジュールが現在使用中の場合、rmmod は失敗する可能性があります。その場合、永続的なブロックはインストールされたままになります。AF_ALG コンシューマを停止するか、緩和適用後に再起動してください。
スクリプトは、管理対象の modprobe パスにシンボリックリンクがある場合に上書きせず、安全な権限でアトミックにファイルを書き込みます。
信頼できないワークロードに対しては、ホストパッチ中でも seccomp で AF_ALG ソケット作成をブロックします。
推奨パス: 既存のランタイム seccomp ベースラインを置き換えるのではなく、パッチを適用:
./bin/copyfail-guard.sh seccomp-patch docker-default.json copyfail-seccomp.json
Docker での使用:
docker run --security-opt seccomp=./copyfail-seccomp.json IMAGE
Podman での使用:
podman run --security-opt seccomp=./copyfail-seccomp.json IMAGE
ベースラインプロファイルがない場合の緊急専用パス: