Linuxカーネルにおいて、以下の脆弱性が修正されました。wifi: cfg80211: cfg80211_merge_profile()内のループ変数の前進処理についてです。cfg80211_merge_profile()は、複数の連続するMBSSID要素に分割されているMulti-BSSIDの非送信BSSプロファイルを再構築します。その中のwhileループはcfg80211_get_profile_continuation(ie, ielen, mbssid_elem, sub_elem)を呼び出しますが、ループ内でmbssid_elemやsub_elemを進めることがありません。そのため、各反復で同じ固定ペアを追い続けることになり、ヘルパー関数は同じnext_mbssidを返し、同じnext_subのバイト列がmerged_ieにmemcpy()されてバッファがいっぱいになるまで繰り返されます。mbssid_elemとsub_elemの両方を、直前に消費した継続部分まで前進させることで、次回のcfg80211_get_profile_continuation()呼び出し時にはその先の継続部分を探す(存在しなければNULLを返す)ようになります。特別に細工された悪意あるビーコンは、このバグを悪用してカーネルがcfg80211_merge_profileで過度に長い時間(受信したビーコンあたり最大約2ms)を費やすよう仕向ける可能性があり、理論的には何らかの形で悪用されるおそれがあります。
|