著者/貢献者: Patrick Doyle (著者/メンテナー)、Effie Renard (共著者)、Kimberly-Lee Banks (共著者)、Chris F. (サポート/コードレビュー)
AI 開示: テストファイルの作成、テストデータの作成、およびコードのセキュリティレビューに Claude Code を使用。すべての編集は貢献者の 1 人によって手動で監査されました。
Linux ホストの CVE-2026-31431 への曝露を分類する、単一の静的にリンクされた Go バイナリ。
このツールは受動的です。バグを悪用しません。メカニズムプローブ(下記の安全性ステートメントを参照)は正確に 2 つのシステムコールを発行し、脆弱なコードパスには一切触れません。
| シグナル | ソース | フラグ |
|---|
| カーネルバージョンと上流の修正の比較 | uname(2) | --kernel-version |
| ディストリビューションのチェンジログが CVE に言及 | apt/rpm/apk またはディスク上の changelog.Debian.gz | --changelog |
algif_aead モジュールの状態 | /proc/modules、modprobe.d、/lib/modules | --module |
| 脆弱なサーフェスに到達可能 | socket(AF_ALG) + bind(authencesn(...)) | --mechanism |
| vmlinux に組み込み済み | /boot/config-$(uname -r) または /proc/config.gz | (--module の一部) |
チェックフラグが指定されていない場合、4 つすべてが実行されます。
| モード | トリガー | ユースケース |
|---|---|---|
| スタイル付き出力 (デフォルト) | TTY 標準出力、--format オーバーライドなし、NO_COLOR 環境変数なし | 対話型シェルでの実行 |
| プレーンテキスト | 非 TTY 標準出力、または --format=text、または NO_COLOR=1、または --no-color | シェルスクリプト、パイプ |
| JSON | --format=json | Syslog/SIEM 取り込み、シェルスクリプト |
| クワイエット | --quiet | 終了コードのみ(自動化/スクリプト) |
パイプ時にスタイル付き出力を強制: cvecheck --pretty | tee report.txt。
TTY でプレーンテキストを強制: cvecheck --no-color または NO_COLOR=1 cvecheck。
プローブは正確に 2 つのシステムコール socket(AF_ALG, SOCK_SEQPACKET, 0) と bind(fd, &SockaddrALG{Type:"aead", Name:"authencesn(hmac(sha256), cbc(aes))"}) を発行します。その後 close(fd) が続きます。キー用の setsockopt、accept、sendmsg、splice、パイプ作成は一切実行しません。脆弱なコードパスには、ページキャッシュバックアップされたファイル記述子からの splice と組み合わせた暗号データの sendmsg が必要ですが、これらの操作は発生しないため、バグはトリガーされません。
プローブが成功した場合、サーフェスに到達可能であることを意味します。カーネルにバグがまだ存在するかどうかは、カーネルバージョン + チェンジログのシグナルによって判断されます。
副作用: bind が成功すると、カーネルモジュールオートローダーを介して algif_aead が自動ロードされます。モジュールチェックはメカニズムプローブの前に実行されるため、ロード状態のレポートはプローブ前の状態です。自動ロードを完全に抑制するには、最初に algif_aead をブラックリストに登録します。
| コード | 意味 |
|---|---|
0 | PATCHED / NOT_VULNERABLE / MITIGATED / LIKELY_NOT_EXPLOITABLE |
2 | VULNERABLE または MECHANISM_REACHABLE (部分スキャン、カーネルバージョン未チェック) |
3 | INCONCLUSIVE (シグナル不足) |
| ディストリビューション | 検出 | カーネルパッケージ | 備考 |
|---|---|---|---|
| Ubuntu / Debian / Mint / Pop!_OS | apt | linux-image-$(uname -r) | ディスク優先のチェンジログ読み取りにより、署名済みカーネルでの apt changelog のネットワーク不安定性を回避 |
| RHEL / CentOS / Rocky / Alma / Fedora / Amazon Linux | rpm | kernel | algif_aead を組み込みで出荷 (CONFIG_..._AEAD=y); ブラックリストによる緩和は効果なし |
| Oracle Linux | rpm | kernel または kernel-uek | UEK は uname -r の uek サブストリングで検出 |
| openSUSE / SLES | rpm | kernel-default | |
| Alpine | apk | linux-lts / linux-virt など | フレーバーはリリースサフィックスから選択 |
| Arch / CachyOS / Manjaro / Endeavour / Gentoo | なし | n/a | ローリング/ソース: カーネルバージョンチェックに依存 |
アーキテクチャを自動検出し、適切なバイナリを $(pwd) にダウンロードして、公開されている SHA256SUMS に対して SHA-256 を検証します:
curl -fsSL https://copyfail.pcdoyle.dev/install.sh | sh
このスクリプトはチェックサム不一致時に非ゼロで終了し、不正なファイルを削除します。
ホストアーキテクチャに適したバイナリを選択してください:
| アーキテクチャ | バイナリ |
|---|---|
Intel/AMD 64 ビット (x86_64) | cvecheck-linux-x86_64 |
ARM 64 ビット (aarch64) | cvecheck-linux-arm64 |
Intel/AMD 32 ビット (i?86) | cvecheck-linux-x86 |
実行前に検証:
curl -LO https://github.com/pcdoyle/copy-fail-cve-2026-31431/releases/latest/download/cvecheck-linux-x86_64
curl -LO https://github.com/pcdoyle/copy-fail-cve-2026-31431/releases/latest/download/SHA256SUMS
sha256sum --ignore-missing -c SHA256SUMS
chmod +x cvecheck-linux-x86_64
make build # bin/cvecheck-linux-{x86_64,arm64,x86}
# SCP(SFTP) to Server:
scp ./bin/cvecheck-linux-x86_64 host:/tmp/ # Less than 4 MB, static, no glibc dep
# SSH:
ssh <host>
# Run Binary:
/tmp/cvecheck-linux-x86_64 # Human friendly pretty output.
/tmp/cvecheck-linux-x86_64 --format=json # Script, Syslog, and SIEM friendly
/tmp/cvecheck-linux-x86_64 --format=text # Script, and Pipe friendly
ssh <host> /tmp/cvecheck-linux-x86_64 # If run directly defaults to --format=text
ssh <host> /tmp/cvecheck-linux-x86_64 --format=json # Syslog/SIEM-friendly
ホストのルートを読み取り可能な場所にマウントし、--root を渡します:
docker run --rm -v /:/host:ro alpine /tmp/cvecheck --root /<host-path>
--root はすべてのディスク上のルックアップ(/etc/os-release、modprobe.d、/lib/modules、/boot/config-*、チェンジログファイル)を制御します。カーネルバージョンとメカニズムのプローブは、uname(2) と socket(AF_ALG, ...) を介して実行中のカーネルに引き続き触れます。
この順序で解決されます(最初に一致したものが優先):
PATCHED: ディストリビューションのチェンジログが CVE ID に言及。NOT_VULNERABLE: 実行中のカーネルが上流の修正バージョン以上。MITIGATED: algif_aead がブラックリストに登録されかつロードされておらずかつ vmlinux に組み込まれていない。LIKELY_NOT_EXPLOITABLE: AF_ALG が利用不可で、モジュールがディスク上にない。MECHANISM_REACHABLE: サーフェスに到達可能だが、カーネルバージョンがチェックされていない。VULNERABLE: カーネルが脆弱な範囲にあり、メカニズムに到達可能。INCONCLUSIVE: 上記のいずれにも一致しない。--mechanism が --kernel-version と一緒に実行され、両方が問題を示す場合、結果は修復ヒント付きの VULNERABLE になります。
algif_aead をブラックリストに登録します。
echo 'blacklist algif_aead' | sudo tee /etc/modprobe.d/cve-2026-31431.conf
sudo rmmod algif_aead 2>/dev/null
CONFIG_CRYPTO_USER_API_AEAD=y によりシンボルが vmlinux 内にあるため、ブラックリストファイルは無効です。カーネルのアップグレード(または kpatch スタイルのライブパッチ)のみが曝露を解決します。ツールはこれを検出します。| 症状 | 原因 | 修正 |
|---|---|---|
changelog: error="apt: exit status 100 ... Changelog unavailable for linux-signed-amd64" | Debian/Ubuntu の署名済みカーネル; apt ミラーがソースパッケージのチェンジログを提供していない | このエラーは、ミラーにアクセスできないことに加えてディスク上のファイルも存在しない場合にのみ表示されます。apt-doc をインストールするか、ミラーを待ちます。 |
module: ... config_src="" | カーネル設定が読み取れない(/boot/config-* なし、/proc/config.gz なし、/boot が root のみ) | root として実行するか、BuiltIn を決定できないことを受け入れます。判定は他のシグナルで解決される場合があります。 |
mechanism: error="EAFNOSUPPORT" | カーネルが CONFIG_CRYPTO_USER_API なしでビルドされているため、ホストは AF_ALG 経由で脆弱ではない | 判定は LIKELY_NOT_EXPLOITABLE になります。 |