
CVE-2026-43284 用テスター
XCP-ng dom0 ホストが CVE-2026-43284(「Dirty Frag」)に曝露されているかどうかを判定するコミュニティ製診断ツールです。これは、Linux カーネルの xfrm-ESP サブシステムにおけるローカル権限昇格の脆弱性です。
TL;DR(要約) — 標準の 4.19 dom0 カーネルを実行している現在の XCP-ng リリース(8.1、8.2、8.3)はすべて、脆弱なコード範囲に該当します。2026年5月現在、公式の XCP-ng パッチは公開されていません。このツールは、お使いのホストが曝露されているかどうかを明確に判定し、安全な暫定緩和策を提供します。
「Dirty Frag」は、研究者の Hyunwoo Kim(@v4bel)によって2026年5月に公開されたローカル権限昇格の脆弱性です。2017年1月(カーネル 4.14 以降)に導入された、Linux カーネルの IPsec ESP サブシステムにおけるインプレース復号の高速パスを悪用します。動作する公開実証コード(PoC)は、カーネルエクスプロイトを一切必要とせず、標準のシステムコール経由で root シェルを取得します。
公開された CVE は次の2件です:
| CVE | サブシステム | 導入時期 | XCP-ng 4.19 に適用? |
|---|---|---|---|
| CVE-2026-43284 | xfrm-ESP(esp4/esp6) | カーネル 4.14、2017年1月 | はい |
| CVE-2026-43500 | RxRPC(rxkad) | カーネル 6.4、2023年6月 | いいえ — rxrpc.ko は同梱されていません |
XCP-ng では CVE-2026-43500 が悪用可能である必要はありません。 XCP-ng dom0 には AppArmor ポリシーがなく、非特権ユーザー名前空間の作成が許可されているため、esp4 パス(CVE-2026-43284)だけで十分です。これは esp4 エクスプロイトパスが要求する唯一の前提条件です。完全な分析については TECHNICAL.md を参照してください。
診断スクリプトは、XCP-ng 上の CVE-2026-43284 に対する必要十分条件をテストします。すなわち、非特権プロセスがユーザー名前空間内で XFRM netlink インターフェースを介して esp4 インプレース復号エンジンを作動させることができるかどうかです。
このツールは以下のことは行いません:
本番 dom0 上で実行しても安全です。
# Clone the repository
git clone https://github.com/grabesec/XCP_ng_CVE-2026-43284_tester.git
cd XCP_ng_CVE-2026-43284_tester
# Run the diagnostic (as non-root for the strongest proof)
python3 XCP_ng_CVE_2026_43284_tester.py
注意: 可能な場合は非 root ユーザーとして実行してください。これにより、侵害されたサービスアカウントや dom0 に到達するゲストエスケープといった現実の脅威モデルをシミュレートします。root で実行しても有効な結果は得られますが、実証性は低くなります。
=================================================================
XCP-ng Dirty Frag Diagnostic -- CVE-2026-43284
xfrm-ESP Page-Cache Write / Local Privilege Escalation
=================================================================
Kernel : 4.19.0+1
Host : xcpng-prod-01
PID : 52306 | UID: 1000
=================================================================
[Phase 0] Pre-flight environment checks
---------------------------------------------
[*] Unprivileged user namespaces : ALLOWED
[*] esp4 blacklist in modprobe.d : NOT FOUND
[*] CVE-2026-43284 patch in kernel RPM : NOT FOUND
[Phase 1] Baseline esp4 module state
---------------------------------------------
[*] esp4 is DORMANT -- not currently loaded in the kernel.
The autoload mechanism may fetch it on demand via XFRM.
[Phase 2] Attempting esp4 engagement from unprivileged namespace
---------------------------------------------
[*] Spawning child in isolated user+network namespace
(unshare -U -n -r) -- simulating a non-root local attacker
[*] Child signal : XFRM SA accepted by kernel
[*] esp4 refcount : 0 (before) -> 1 (now)
[*] /proc/modules : esp4 16384 1 - Live 0xffffffffc0a12000
[Phase 3] Engineering verdict
=================================================================
[!!!] PROOF OF EXPOSURE -- CVE-2026-43284 [!!!]
esp4 refcount increased: 0 -> 1
An unprivileged process inside a user+network namespace
successfully registered an XFRM Security Association and
engaged the esp4 in-place decryption engine in the host
kernel. This is the gate condition for CVE-2026-43284.
XCP-ng-specific analysis:
[FAIL] Kernel 4.19 carries the vulnerable code (since 4.14)
[FAIL] User namespaces are open -- esp4 path is reachable
[OK] rxrpc.ko absent -- CVE-2026-43500 does not apply
[FAIL] esp4 path alone is sufficient on this configuration
[Phase 0] Pre-flight environment checks
---------------------------------------------
[+] esp4 blacklist found in /etc/modprobe.d/
Module-load mitigation appears to be in place.
...
[Phase 2] Attempting esp4 engagement from unprivileged namespace
---------------------------------------------
[+] XFRM state add was REJECTED by the kernel.
The esp4 engine was not engaged from the namespace.
[RESULT] The namespace loophole did NOT grant esp4 access.
同梱の mitigate.sh スクリプトは、トンネルを壊さないように IPsec 検出機能を内蔵し、緩和策を安全に適用します:
# Check current status only (no changes)
sudo ./mitigate.sh --check
# Apply mitigation (aborts if IPsec is detected)
sudo ./mitigate.sh
# Remove mitigation (after applying official kernel patch)
sudo ./mitigate.sh --undo
オプション A — IPsec を使用していないホスト(ほとんどの dom0):
echo 'install esp4 /bin/false' > /etc/modprobe.d/dirtyfrag-cve-2026-43284.conf
rmmod esp4 2>/dev/null || true
echo 3 > /proc/sys/vm/drop_caches
オプション B — IPsec を使用しているホスト(strongSwan / Libreswan):
esp4 をブラックリスト化しないでください。すべてのトンネルが即座に壊れます。代わりに以下の対応を行ってください:
⚠️ これはローカル権限昇格です。 攻撃者はすでに dom0 上でシェルまたはコード実行権限を持っている必要があります。第一の防御策は、そもそも dom0 にローカルアクセスできる人物を制限することです。dom0 の root = ハイパーバイザーの root = すべてのゲスト VM の侵害。
| 必要条件 | 備考 |
|---|---|
| Python 3.6+ |
外部 Python ライブラリは不要です。pip install も必要ありません。
XCP_ng_CVE-2026-43284_tester/
├── XCP_ng_CVE_2026_43284_tester.py # Diagnostic script — run this first
├── mitigate.sh # Mitigation script with IPsec detection
├── README.md # This file — quick start and overview
├── TECHNICAL.md # Deep technical analysis — attack chain,
│ # why rxrpc is not needed on XCP-ng,
│ # script internals explained
├── CHANGELOG.md # Version history
└── LICENSE # MIT
以下についての完全な説明は:
TECHNICAL.md を参照してください。
監視先:https://xcp-ng.org/forum/topic/365/updates-announcements
本ツールは、悪用の前提条件(名前空間 + esp4 アクセス)のみをテストします。エクスプロイトコードは含んでおらず、再現も参照もしていません。基盤となる脆弱性は公知であり、元の研究者による実証コード(PoC)が公開され、CVE が割り当てられています。本ツールの目的は、XCP-ng 管理者が自身の曝露状況を把握し、Vates による公式カーネルパッチを待つ間に暫定緩和策を適用できるようにすることです。
Rodrigo Gracia — コミュニティセキュリティへの貢献
XCP-ng / Xen Orchestra 実践者
https://github.com/grabesec
2026年5月
| XCP-ng 8.x dom0 に同梱済み |
iproute2(ip コマンド) | XCP-ng 8.x dom0 に同梱済み |
unshare | util-linux の一部。XCP-ng 8.x dom0 に同梱済み |
| Linux カーネル | XCP-ng dom0 上の任意のカーネル 4.14–6.x |
| XCP-ng バージョン | カーネル | 脆弱? | 公式パッチ? |
|---|
| 8.3 LTS | 4.19 + Vates patches | はい | 2026年5月現在未公開 |
| 8.2 | 4.19 + Vates patches | はい | 2026年5月現在未公開 |
| 8.1(EOL) | 4.19 + Vates patches | はい | 予定なし |