
Go版のCopy Fail PoC(CVE-2026-31431向け)です。Linuxカーネルのauthencesn脆弱性を利用し、AF_ALGとspliceを介してページキャッシュへの4バイト書き込みを可能にします。マルチアーキテクチャ対応のビルドパイプラインと詳細な技術ドキュメントを含みます。
このリポジトリは、公開されているCopy Fail PoCのGo移植版と、マルチアーキテクチャ対応Linuxバイナリの再現可能なビルドパイプラインを提供します。
Copy Fail(CVE-2026-31431)は、authencesnにおけるLinuxカーネルのロジック欠陥であり、AF_ALGとsplice()を介して参照されるページキャッシュデータへの決定的な4バイト書き込みを可能にします。
このプロジェクトは、明示的にテストを許可された環境でのみ使用してください。所有していないシステムや、書面による評価許可を得ていないシステムに対してこのPoCを実行しないでください。
ソースからビルドせずにすぐにテストしたい場合は、リリースバイナリをダウンロードして実行してください:
wget https://github.com/ErdemOzgen/copy-fail-cve-2026-31431/releases/download/v1.0.1/copy-fail-cve-2026-31431_linux_amd64
chmod +x copy-fail-cve-2026-31431_linux_amd64
./copy-fail-cve-2026-31431_linux_amd64
他のアーキテクチャの場合は、GitHub Releasesページから対応するアセットをダウンロードしてください:
https://github.com/ErdemOzgen/copy-fail-cve-2026-31431/releases
すべてのLinuxターゲットをビルド:
make clean build-linux
ビルドとチェックサムの生成:
make clean checksums
dist/内の出力バイナリ:
copy-fail-cve-2026-31431_linux_amd64copy-fail-cve-2026-31431_linux_arm64copy-fail-cve-2026-31431_linux_386copy-fail-cve-2026-31431_linux_armv7SHA256SUMSデフォルト実行:
./copy-fail-cve-2026-31431_linux_amd64
カスタムターゲットパスを使用:
./copy-fail-cve-2026-31431_linux_amd64 -target /path/to/binary
実行後のsu実行を無効化:
./copy-fail-cve-2026-31431_linux_amd64 -spawn-su=false
ビルドメタデータを表示:
./copy-fail-cve-2026-31431_linux_amd64 -version
オフセット0で以下のようなエラーが発生して実行が失敗する場合:
error: copy chunk at offset 0: splice(pipe->AF_ALG): software caused connection abort
カーネルが脆弱なAEADインプレースパスを拒否している可能性が高いです(例えば、ホストがCVE-2026-31431に対してパッチ適用済みであるか、algif_aeadが緩和・無効化されている場合)。
クイックチェック:
uname -r
grep -E "algif_aead|authencesn" /proc/modules
是正済みのシステムでは、このPoCは失敗することが想定されます。
公開された開示情報によると、脆弱なパスにより、権限のないローカルユーザーが特定の条件下で、読み取り可能なファイルのページキャッシュコンテンツに対して4バイト書き込みプリミティブに影響を与えることができます。
重要な運用上の特性として、実行中にメモリ内のページキャッシュコピーがディスク上のバイトと乖離する可能性があり、ディスクレベルの整合性チェックのみに依存するチームにとって影響分析が容易ではない場合があります。
Copy Failが注目に値するのは、以下のように報告されたためです:
高レベルでは、この問題は3つのメカニズムの交差点に位置します:
AF_ALG AEADリクエスト処理。splice()ページキャッシュバックアップデータ移動。authencesn復号スクラッチ動作。脆弱な設計では、ページキャッシュバックアップセグメントが、アルゴリズム処理中に後で書き込みを受けるリクエスト形状にリンクされる可能性があり、意図された宛先領域のみが変更されるという重要な前提に違反します。
文書化されたパスでは、authencesnはESNレイアウト処理の周辺で宛先側スクラッチ操作を使用し、期待される復号出力契約を超えたオフセットで書き込みを実行します。
インプレースAEADセットアップとチェーンされたscatterlist参照と組み合わせると、この書き込みは攻撃者が選択した領域のページキャッシュバックアップメモリに到達する可能性があります。
開示情報は複数コミットにわたる進化を説明しています:
authencesnの動作は初期の統合履歴に由来します。AF_ALG AEADサポートにより、splice()との相互作用を伴うユーザースペースからの到達可能性が導入されました。algif_aeadのインプレース最適化により、ソースと宛先のフローがこの交差点を悪用可能にする方法で結合されました。重要な教訓は構成上のリスクです:個々には合理的な変更でも、組み合わせると安全でなくなる可能性があります。
公開された解説とPoCは以下のシーケンスを説明しています:
authencesn(hmac(sha256),cbc(aes))用のAF_ALG AEADソケットを開いて設定します。splice()を使用して、ページキャッシュバックアップのファイルデータをリクエストパスにルーティングします。このリポジトリのGo実装は、許可された環境での研究と検証のために、その公開PoCロジックをミラーリングしています。
報告された修正は、algif_aeadの脆弱なインプレースAEAD操作をアウトオブプレース動作に戻します。
概念的には:
AF_ALG使用に関するポリシー制限)。公開された解説に基づく:
| 日付 | イベント |
|---|---|
| 2026-03-23 | Linuxカーネルセキュリティチームに報告 |
| 2026-03-24 | 初期の受領確認 |
| 2026-03-25 | パッチの議論・レビュー |
| 2026-04-01 | メインラインに修正がコミット |
| 2026-04-22 | CVE-2026-31431が割り当て |
| 2026-04-29 | 公開開示 |
公開された研究は、splice()下のユーザースペースから到達可能な暗号コードパスとscatterlist/ページの来歴に焦点を当てた、人間がガイドしAIが支援するサブシステム分析によるものとしています。
main.go:Go PoC移植版。Makefile:決定的なマルチアーキテクチャLinuxビルドターゲット。.github/workflows/build.yml:CIビルドおよびリリースアーティファクトワークフロー。ワークフローファイル:.github/workflows/build.yml
トリガー:
mainへのプッシュv*に一致するタグのプッシュworkflow_dispatch動作:
make clean checksumsで全Linuxバイナリをチェックサム付きでビルドします。v*に一致するタグに対してリリースアセットを自動的に公開します。推奨されるリリースフロー:
git tag v1.0.0
git push origin v1.0.0
| ディストリビューション | カーネルバージョン |
|---|---|
| Ubuntu 24.04 LTS | 6.17.0-1007-aws |
| Amazon Linux 2023 | 6.18.8-9.213.amzn2023 |
| RHEL 10.1 | 6.12.0-124.45.1.el10_1 |
| SUSE 16 | 6.12.0-160000.9-default |