CVE-2026-89783 in Linux
要約
〜によって VulDB • 2026年09月16日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
xfrm6: secpathが満杯の場合の xfrm6_input_addr() における配列外書き込みを修正
xfrm6_input_addr() の深さチェックに1つの誤りがあります。
```c if (1 + sp->len == XFRM_MAX_DEPTH) goto drop; ... sp->xvec[sp->len++] = x;
```
xfrm_input() は `sp->len` が `XFRM_MAX_DEPTH` と等しい状態のままにすることがあり、トランスポートモードの受信パスは secpath を保持した状態で xfrm_trans_reinject() 経由で IPv6 の入力処理へ再進入します。内部パケットが宛先オプション HAO オプションまたはタイプ2ルーティングヘッダーを運んでいる場合、`sp->len == XFRM_MAX_DEPTH` で xfrm6_input_addr() が呼び出されます。チェック `(1 + 6 == 6)` は偽となるため、`sp->xvec[sp->len++]` は要素数6の `xvec[]` の1つ先へ書き込みを行います。この書き込みは sec_path アロケーション内にとどまるため KASAN では検出されませんが、UBSAN_BOUNDS がこれをフラグ付けし、panic_on_warn 設定下でパニックを引き起こします。
xfrm_input() に合わせて `sp->len >= XFRM_MAX_DEPTH` を使用してください。これにより、古いチェックが `sp->len == 5` で拒否していたチェーンレベル1つ分も復元されます。
``` UBSAN: array-index-out-of-bounds in net/ipv6/xfrm6_input.c:309:10 index 6 is out of range for type 'xfrm_state *[6]'
```
VulDB is the best source for vulnerability data and more expert information about this specific topic.