Copy Fail Detection and Remediation
CVE-2026-31431(コピーフェイル)を検出および修復するためのAnsibleロールおよびプレイブックスイートです。これは、Linuxカーネルのalgif_aeadモジュールにおける重大なローカル権限昇格の脆弱性です。
🔗 GitHub: https://github.com/parmstro/cfDr
cfDrという名前は「コピーフェイルドクター」をもじったもので、CVE-2026-31431に対する信頼できる治療薬です。
CVE-2026-31431(CVSS 7.8)は、2026年に発見されたLinuxカーネルのAEADソケットインターフェース(AF_ALG)における論理的な欠陥です。この脆弱性により、権限のないローカルユーザーが数秒でrootに権限を昇格できます。
algif_aeadカーネルモジュール(AF_ALG暗号インターフェース)カーネルバージョン: Linuxカーネル 4.10以上(2017年リリース)
影響を受けるディストリビューション:
注記: カーネル4.10以降を搭載したLinuxディストリビューションはすべて潜在的に脆弱です。
この脆弱性は、以下の理由から特に危険です:
攻撃者が何らかの形でローカルアクセス(SSH、Webシェル、コンテナエスケープなど)を獲得すると、以下のことが可能になります:
ベンダー提供のカーネルパッチを待つ間、いくつかの緩和策が利用可能です。cfDrはこれらすべてを実装し、システム構成に基づいてインテリジェントな推奨を行います。
すべての修復策が同等ではありません。知っておくべきことは以下のとおりです:
| 方法 | rootによる回避は可能か? | 適用範囲 | Enterprise Linuxサポート |
|---|---|---|---|
| モジュールブラックリスト | ✅ はい(insmod経由) | modprobeのロードを防止 | すべてのバージョン |
| SELinuxポリシー | ❌ いいえ(LSMレイヤー) | 設定されたドメインのみ | すべてのバージョン(デフォルト) |
| systemd seccomp | ❌ いいえ(システムコールフィルター) | 設定されたサービスのみ | すべてのバージョン |
| eBPF LSM | ❌ いいえ(LSMレイヤー) | システム全体(設定されている場合) | RHEL 9+、Fedora 34+ |
cfDrのデフォルト推奨:フラグ3(モジュールブラックリスト + SELinux)
これにより、2つの独立した保護レイヤーが提供されます:``` ┌─────────────────────────────────────────────────┐ │ Layer 1: Module Blacklist │ │ • Prevents modprobe algif_aead │ │ • Persists across reboots │ │ • CAN be bypassed by malicious root (insmod) │ ├─────────────────────────────────────────────────┤ │ Layer 2: SELinux Policy │ │ • Blocks AF_ALG socket() at syscall level │ │ • Works even if module is loaded │ │ • CANNOT be bypassed from userspace │ │ • Covers user_t, unconfined_t (majority cases) │ └─────────────────────────────────────────────────┘
Result: If either layer fails, the other still protects
### モジュールブラックリストだけでは不十分な理由
ルートアクセス権を持つ執念深い攻撃者は、モジュールのブラックリストを回避できます。```bash
# Module blacklist DOES NOT prevent:
insmod /lib/modules/$(uname -r)/kernel/crypto/algif_aead.ko.xz
ただし、これは許容されます。その理由は以下の通りです:
完全かつ迂回不可能な防御には、以下が必要です:
モジュールブラックリスト + 以下の少なくとも1つ:
cfDrはビット単位のフラグを使用して複数の緩和策を有効にします:
| フラグ値 | 有効化される緩和策 | ユースケース |
|---|---|---|
| 1 | モジュールブラックリストのみ | 最小限の防御、SELinux非搭載システム |
| 2 | SELinuxのみ | SELinux専用環境 |
| 3 | モジュールブラックリスト + SELinux | 推奨デフォルト |
| 5 | モジュールブラックリスト + seccomp | SELinux非搭載かつサービス強化あり |
| 7 | モジュールブラックリスト + SELinux + seccomp | 強化された防御 |
| 15 | すべての緩和策 | 最大限の防御(RHEL 9+のみ) |
フラグの計算方法:1(ブラックリスト)+ 2(SELinux)+ 4(seccomp)+ 8(eBPF)= 合計
SELinuxの防御:
user_t、unconfined_t、httpd_t、postgresql_t、mysqld_tuser_tとunconfined_tが攻撃シナリオの大部分をカバーしますsystemd seccompの防御:
httpd、nginx、postgresql、mariadb、redis、memcachedeBPF LSMの防御:
cfDrは複数の次元にわたって包括的な評価を実行します:
uname -r
- カーネルバージョンが4.10以上かどうかを判定(脆弱な範囲)
- カーネルリリースとディストリビューションを特定
#### 2. モジュールの利用可能性チェック```bash
modinfo algif_aead
algif_aead モジュールが存在するか検証しますlsmod | grep algif_aead
- モジュールが現在ロードされているかを判定
- **重要**: ロード済みモジュール = 積極的に悪用可能
#### 4. アクティブソケット検出```bash
lsof -U | grep AF_ALG
モジュールブラックリスト:```bash grep -E "blacklist algif_aead|install algif_aead" /etc/modprobe.d/*.conf
**SELinux ポリシー**:```bash
semodule -l | grep cve_2026_31431_af_alg_deny
systemd seccomp:```bash systemctl show | grep RestrictAddressFamilies
#### 6. カテゴリ別ステータス判定
cfDrは各ホストを以下のいずれかの状態に分類します:
| ステータス | 条件 | 必要な対応 |
|--------|-----------|-----------------|
| **脆弱 - モジュール読み込み済み** | カーネル >= 4.10、モジュールが存在し読み込み済み | **即時対応** - 積極的に悪用可能 |
| **脆弱 - モジュール存在** | カーネル >= 4.10、モジュールが存在するが未読み込み | **高優先** - 読み込み・悪用が可能 |
| **緩和済み - モジュールがブラックリスト登録** | ブラックリスト検出 | **低優先** - 監視し、追加の防御層を適用 |
| **保護済み - 多層防御** | ブラックリスト + SELinux/seccomp/eBPF | **不要** - 完全に保護されている |
| **非脆弱 - 旧カーネル** | カーネル < 4.10 | **不要** - 脆弱性の影響範囲外 |
| **非脆弱 - モジュールなし** | algif_aeadモジュールがカーネルに存在しない | **不要** - モジュールが利用不可 |
### 評価出力
各ホストには以下が提供されます:
1. **コンソール出力**: 1行の簡潔なステータス
2. **詳細ファイル**: `/root/cve-2026-31431-assessment-<hostname>.txt`
3. **JSONレポート**: `/tmp/cve-2026-31431-<hostname>.json`
簡潔な出力例:```
webserver1.example.com: VULNERABLE - Module exists and can be loaded
dbserver2.example.com: PROTECTED - Defense-in-depth (Module Blacklist + SELinux)
appserver3.example.com: NOT VULNERABLE - Module not available
cfDrは、複数のプレイブックエントリポイントを持つ最新のAnsibleロールとして構築されています。``` cfDr/ ├── roles/ │ └── cve_2026_31431/ # Main role │ ├── tasks/ │ │ ├── main.yml # Role orchestration │ │ ├── assessment.yml # Vulnerability detection │ │ ├── remediation_module_blacklist.yml │ │ ├── remediation_selinux.yml │ │ ├── remediation_seccomp.yml │ │ ├── remediation_ebpf.yml │ │ ├── reporting.yml # Status reporting │ │ └── inventory_update.yml # Inventory generation │ ├── templates/ # Config file templates │ ├── defaults/ # Default variables │ └── handlers/ # Service restarts, etc. ├── quickstart.yml # Simplest usage ├── sample_playbook.yml # Multiple examples └── cve_2026_31431_playbook.yml # Full-featured playbook
### 実行フロー