{"id":24706,"date":"2026-09-16T20:32:40","date_gmt":"2026-09-16T12:32:40","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-90018"},"modified":"2026-09-16T20:32:40","modified_gmt":"2026-09-16T12:32:40","slug":"cve-2026-90018","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-90018","title":{"rendered":"CVE-2026-90018 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nstaging: rtl8723bs: f"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>staging: rtl8723bs: fix OOB read \/ stack overflow in rtw_get_wps_attr()<\/p>\n<p>rtw_get_wps_attr() walks WPS attributes inside a WPS IE taken from<br \/>\na wireless management frame. For each candidate attribute it only<br \/>\nchecks that the fixed 4-byte attribute header (2-byte ID + 2-byte<br \/>\nlength) fits inside the IE:<\/p>\n<p>\tif (attr_ptr + 4 &gt; wps_ie + wps_ielen)<br \/>\n\t\tbreak;<br \/>\n\tu16 attr_id = get_unaligned_be16(attr_ptr);<br \/>\n\tu16 attr_data_len = get_unaligned_be16(attr_ptr + 2);<br \/>\n\tu16 attr_len = attr_data_len + 4;<\/p>\n<p>attr_data_len (and therefore attr_len) is read directly from the<br \/>\nwire and is never checked against the remaining bytes in the IE<br \/>\nbefore being used as the size of:<\/p>\n<p>\tmemcpy(buf_attr, attr_ptr, attr_len);<\/p>\n<p>Since attr_len is fully attacker controlled (0 to 65535+4), this is<br \/>\nboth a heap OOB read of wps_ie, and, more seriously, a stack buffer<br \/>\noverflow at several call sites where buf_attr is a single-byte<br \/>\nstack variable, e.g. rtw_get_wps_attr_content()&#8217;s callers passing<br \/>\nWPS_ATTR_SELECTED_REGISTRAR into a stack &#8220;u8 sr&#8221;\/&#8221;u8<br \/>\nselected_registrar&#8221; (drivers\/staging\/rtl8723bs\/os_dep\/ioctl_cfg80211.c,<br \/>\ndrivers\/staging\/rtl8723bs\/core\/rtw_mlme_ext.c). A crafted WPS IE in a<br \/>\nbeacon or probe response processed during scanning can therefore<br \/>\nsmash the stack of the parsing thread.<\/p>\n<p>rtw_get_wps_attr_content() itself has no independent length check<br \/>\nand simply trusts the attr_len it gets back from rtw_get_wps_attr(),<br \/>\nso fixing the bound here also fixes that caller.<\/p>\n<p>The &#8220;attr_ptr + 4 &gt; wps_ie + wps_ielen&#8221; header check above was added<br \/>\nby commit 1463ca3ec6601 (&#8220;staging: rtl8723bs: fix OOB reads in<br \/>\nrtw_get_sec_ie(), rtw_get_wapi_ie(), and rtw_get_wps_attr()&#8221;), which<br \/>\nbounded the fixed header but never extended the check to cover the<br \/>\nvariable-length attribute data that follows it. Add that missing<br \/>\ncheck before attr_len is used as a memcpy() length or accepted as a<br \/>\nmatch.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>staging: rtl8723bs: fix OOB read \/ stack overflow in rtw_get_wps_attr()<\/p>\n<p>rtw_get_wps_attr() walks WPS attributes inside a WPS IE ta<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-24706","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/24706","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=24706"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=24706"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=24706"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}