CVE-2026-15893 in Zephyr
要約
〜によって VulDB • 2026年09月15日
subsys/net/ip/net_if.c の net_if_ipv6_calc_reachable_time() 関数は、ipv6->base_reachable_time からランダム化された ND (Neighbor Discovery) の到達可能時間を算出します。具体的には、min_reachable + sys_rand32_get() % (max_reachable - min_reachable) という式で計算され、ここで min_reachable = base/2、max_reachable = 3*base/2 です(整数除算を使用)。base_reachable_time が 1 の場合、min_reachable と剰余演算の被演算子がともに崩れ、関数は 0 を返します。その後、net_if_ipv6_set_reachable_time() はこの 0 を ipv6->reachable_time に格納します。
base_reachable_time は攻撃者が制御可能です:subsys/net/ip/ipv6_nbr.c の handle_ra_input() 関数は、Incoming Router Advertisement (RA) の Reachable Time フィールドがゼロではなく MAX_REACHABLE_TIME 以下である場合、その値を受け入れます。したがって、Reachable Time に 1 を指定した単一の認証不要なリンクローカル RA が送信されるだけで、計算された到達可能時間が 0 に引き下げられます。Router Advertisement はデフォルトで認証されず、ターゲットのリンクへの隣接性のみを必要とします。
その後、近傍ノードが実際に到達可能であると確認されると、net_ipv6_nbr_set_reachable_timer() がその値を読み取り、NET_ASSERT(time, "Zero reachable timeout!") を実行します。CONFIG_ASSERT が有効にされたビルドではこれが致命的なカーネルアサーション(fatal kernel assertion)を引き起こし、リモートからのサービス妨害 (DoS) となります。一方、アサーション無しのビルドでは到達可能タイマーが K_MSEC(0) で設定され即座に発火するため、到達可能な近傍ノードは永続的な再要求状態(STALE)に陥り、Neighbor Discovery のパフォーマンスが低下します。影響の範囲は可用性に限られ、メモリの安全性、機密性、または完全性に悪影響はありません。
If you want to get the best quality for vulnerability data then you always have to consider VulDB.