
Linuxカーネル CVE-2026-98432(tcp_v4_syn_recv_sock における IPv4 オプションの UAF)に対する暫定的な nftables 緩和策を、再現可能なエージェントスキルとして提供
Linux カーネル CVE-2026-98432(CVSS 9.8)に対する暫定的なホスト緩和策を適用し、検証し、永続化し、後で削除するエージェントスキル:IPv4 オプションを含む TCP パケットをドロップする単一の nftables ルール — これは tcp_v4_syn_recv_sock() における inet_opt/ireq_opt の use-after-free に到達する唯一の入力である。
知っておくべき背景:Anthropic の Frontier Red Team は、MPTCP リスナーを公開しているサーバーに対する、認証不要で root 権限を取得できる実証済みの PoC を公表した(2026年10月)。実際の悪用は報告されていない。カーネル CNA は 9.8 と採点し、アップストリームと Red Hat は 8.1(攻撃複雑度:高)と採点している。ベンダーの修正は Ubuntu カーネル 6.8.0-149 クラスのバックポートである — 実行中のカーネルが修正を搭載するまでの間、このルールが暫定措置となる。これは 1 プロトコルの 1 ヘッダーの 1 フィールドに限定されているため、通常のトラフィックには影響しない。
このルールは目新しいものではない — パッケージ化された先行技術として扱うこと。 下記の「先行技術」を参照。このリポジトリの貢献は、再現可能なエージェントスキルの形と、本番環境での落とし穴である。
| パス | 内容 |
|---|---|
SKILL.md | スキル本体 — frontmatter トリガー、ルールセット、チェック、永続化、落とし穴、削除 |
files/cve98432.nft | コピー可能な nftables ルールセット(prerouting、優先度 −300) |
files/nft-cve98432.service | コピー可能な systemd ユニット(永続化) |
cp -R cve-2026-98432-nft-mitigation ~/.claude/skills/ # Claude Code
cp -R cve-2026-98432-nft-mitigation ~/.agents/skills/ # agents-style runtimes
description フロントマターは発見のための表面です。エージェントは、CVE-2026-98432、いわゆる「TCP/IP 修正」、カーネルの IPv4 オプション UAF の緩和を求められたとき、またはベンダーカーネルの出荷後に緩和策を削除するよう求められたときに、このスキルを選択します。
zgrep -c CVE-2026-98432 /usr/share/doc/linux-modules-$(uname -r)/changelog.Debian.gz # Debian/Ubuntu
rpm -q --changelog kernel-core-$(uname -r) | grep -c CVE-2026-98432 # RHEL/Rocky/Alma
> 0 = 修正済み、緩和策をスキップします。(ベンダーのトラッカーも確認してください。また、
インストール済みだが起動していない新しいカーネルについては
apt-cache policy linux-image-generic を確認してください。)ss -lnMp):公開された PoC はこれらを標的にしており、Go ≥ 1.24 は
それを許可するカーネル上でデフォルトで MPTCP を用いてリッスンします。sysctl net.mptcp.enabled=0 は
新規 ソケットにのみ影響します — すでに開いているリスナーは、そのサービスが再起動するまで
MPTCP を使い続けます(Go チームによれば GODEBUG=multipathtcp=0)。cat /sys/kernel/security/lsm が SELinux または Smack を
リストしており、かつ NetLabel CIPSOV4 マッピングを使用している場合、そこでは IPv4 オプションは
正当なものです — このルールはその経路を壊してしまいます。CIPSO ラベル付きネットワークには
適用しないでください(RFC 7126 はこのトレードオフについて論じています)。files/cve98432.nft と files/nft-cve98432.service をインストールします。nft -c -f /usr/local/sbin/cve98432.nft — パースチェック。root 権限が必要です(非 root では
netlink で失敗します:cache initialization failed)。systemctl daemon-reload && systemctl enable --now nft-cve98432.servicedestroy table … の行はファイルの
最初の 行でなければなりません:末尾に追加すると、テーブルを作成してから破棄するため、
サービスが 0 で終了するにもかかわらず空のルールセットが残ります。nft list table inet cve98432 は、priority -300 のチェーン上で
meta l4proto tcp ip hdrlength > 5 counter drop を表示しなければなりません
(conntrack より前、公開されたルールと一致)。table inet … は iptables が所有していないため、iptables-restore /
ufw / firewalld のツールはそれをそのまま残します(restore を一度実行し、再度リストして確認してください)。修正済みカーネルをインストールして再起動した後の削除:SKILL.md のセクション 7。
nftables の状態は ネットワーク名前空間ごと です。ホストのルールは、コンテナのトラフィックが
ホストを通過する 場所(例:コンテナ → 外部)でのみそれを認識します。コンテナ自身の
名前空間内にとどまるトラフィック(コンテナ → 自身のループバック/IP)は、ホストの prerouting を
決して通過しません — しかしカーネルは共有されているため、コンテナ内のコードは依然として
ローカルで UAF に到達できます。同じルールセットを実行中のすべてのコンテナに注入してください:
# Docker (host-side nsenter keeps the needed capabilities)
for c in $(docker ps -q); do
pid=$(docker inspect -f '{{.State.Pid}}' "$c")
nsenter -t "$pid" -n /usr/sbin/nft -f /usr/local/sbin/cve98432.nft
done
# LXC (privileged CLI as root)
for c in $(lxc-ls -1 2>/dev/null); do lxc-attach -n "$c" -- nft -f /usr/local/sbin/cve98432.nft; done
コンテナのネットワーク名前空間では nft ルールは永続化されません — コンテナが再起動するたびに再実行してください(オーケストレーターの起動後ステップにフックしてください)。この正確なギャップに関する先行事例とスクリプト:typhoon1217/cve-2026-98432-mitigation(inject-netns.sh)。
標準ソケットで十分です — サーバー側でのパケット生成は不要です:クライアントが setsockopt(IP_OPTIONS) 経由で IPv4 Record Route オプションを設定して接続します。通常の接続は成功し、オプション付き接続はルールのカウンターが増加しながらタイムアウトする必要があります。既製のクライアント:typhoon1217/cve-2026-98432-mitigation の check-blocked.py / verify-synack.sh。そのプロジェクトからの注意点:自身が緩和策を実行しているクライアントは、ターゲットの SYN-ACK エコーもドロップします — クリーンな判定を得るには、緩和策を適用していないクライアントからテストしてください。
prerouting を priority -300 で:conntrack より前なので、ドロップされたパケットが conntrack ステートを作成することはありません — また、input と異なり、ホストを通過してコンテナ/VM に転送されるトラフィックもカバーします。@nh,4,4 > 5 を ip hdrlength > 5 に正規化します — これは IHL フィールドであり、ツール自体によって確認されています。typhoon1217/cve-2026-98432-mitigation — 同じドロップルール + コンテナ netns インジェクション、CIPSO の注意点、検証クライアント(EN/KO)本番デプロイから抽出したもので、そこで発生した失敗も含みます:非 root での nft -c、末尾での destroy の順序バグ、クォートされていないヒアドキュメントが \$ を黙って消費する問題、二重適用のセマンティクス。ドキュメントのみのリポジトリ — ランタイム依存:nft ≥ 1.0 + systemd、テストスイートなし(n/a)。