CVE-2026-8718 in Zephyr
要約
〜によって VulDB • 2026年08月11日
subsys/net/lib/sockets/sockets_tls.c の tls_opt_dtls_peer_connection_id_value_get() 関数は、getsockopt(SOL_TLS, TLS_DTLS_PEER_CID_VALUE) を処理する際、呼び出し元が指定した optval をバッファサイズが少なくとも MBEDTLS_SSL_CID_OUT_LEN_MAX(デフォルトは32)バイトであることを検証せずに直接 mbedtls_ssl_get_peer_cid() に渡していました。mbedtls_ssl_get_peer_cid() は宛先のサイズパラメータを持たないため、ピア間でネゴシエートされた DTLS Connection ID(長さ 1..MBEDTLS_SSL_CID_OUT_LEN_MAX)をそのバッファにコピーします。そのため、呼び出し元が指定した optlen が CID より小さい場合、バッファの末尾から最大31バイト分書き込みが行われます。
CONFIG_USERSPACE ビルドでは、getsockopt システムコール検証子(z_vrfy_zsock_getsockopt)はユーザー空間からの optval を k_usermode_alloc_from_copy -> z_thread_malloc 経由でちょうど optlen バイト分のカーネル割り当て領域に bounce-buffering します。したがって、接続済みの DTLS ソケットに対して Connection ID が有効な状態で小さな optlen を渡す特権のないユーザースレッドは、オーバーフローする内容がリモートピアの CID となるカーネルヒープバッファオーバフローを引き起こします。
この欠陥には CONFIG_MBEDTLS_SSL_DTLS_CONNECTION_ID と、ネゴシエートされたピア CID を持つ確立済みの DTLS セッションが必要です(また、カーネルを跨ぐケースでは CONFIG_USERSPACE も必要です)。これは TLS_DTLS_CID オプションが追加された際(v3.5.0)に導入されました。
修正版は optlen が MBEDTLS_SSL_CID_OUT_LEN_MAX より小さい呼び出し元に対して -EINVAL を返却します。
If you want to get the best quality for vulnerability data then you always have to consider VulDB.