DF-3313 / verdict.json
{ "finding_id": "DF-3313", "status": "untested", "reproduced": 0, "impact": "none", "confidence": "likely", "verdict": "ieee80211_recv_bar (ieee80211_ht.c:977-1050) reads wh->i_ctl/wh->i_seq through byte offset 19 with no own length check; every vap ctl dispatch path guarantees only sizeof(ieee80211_frame_min)=10 bytes before calling it (contrast: ACTION frames are length-verified per subtype in ieee80211_parse_action before dispatch). A short BAR delivered by a driver/injection is an OOB read of up to 10 bytes past valid mbuf data. Sinks are bit-masked (TID 4 bits, seq 12 bits) so there is no corruption/leak; worst case a boundary page-fault panic. Not executed: Low severity, Phase V conditional rule not met. The absent check is certain from source; manifestation depends on the radio driver delivering short ctl frames.", "exploit_chain": "", "evidence": [ "README.md: dispatch-path analysis with path:line for every ctl entry (sta.c:926, hostap.c:2248, adhoc.c:949) vs the action-path contrast (ieee80211_input.c:754-803)" ], "kernel_refs": [ "sys/netproto/802_11/wlan/ieee80211_ht.c:994", "sys/netproto/802_11/wlan/ieee80211_ht.c:996", "sys/netproto/802_11/wlan/ieee80211_ht.c:1009", "sys/netproto/802_11/wlan/ieee80211_sta.c:926" ], "poc_changes": "", "attempts": 0, "guest_uname": "n/a (not executed)", "runtime_sec": 0, "guest_dirty": 0, "build_cmd": "", "run_cmd": "", "code_hash": "", "notes": "Low/OOB-read only; masked sinks; recommended m_pkthdr.len >= sizeof(struct ieee80211_frame_bar) guard included in README.md. Would share the DF-3282/3312 injection harness if triage wants it reproduced.", "recommended_fix": "Reject BAR frames shorter than sizeof(struct ieee80211_frame_bar) at the top of ieee80211_recv_bar (see README.md diff)." } |