🇰🇷 한글 설명
Linux 커널의 ath12k Wi-Fi 드라이버에서 mac_phy_caps_parse() 함수 호출 시 메모리 할당 크기와 실제 복사되는 데이터 간의 불일치가 발생합니다. 펌웨어가 짧은 TLV 데이터를 보낼 경우, 메모리 할당 범위를 벗어난 영역에 데이터가 쓰여지는 힙 오버플로우 취약점이 존재합니다.
💡 쉬운 설명
Wi-Fi 장치와 통신할 때 데이터를 담을 그릇을 실제 필요한 크기보다 작게 만드는 오류가 있습니다. 이로 인해 넘치는 데이터가 다른 메모리 영역을 침범하여 시스템 오류나 보안 문제를 일으킬 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
wifi: ath12k: fix stride mismatch in mac_phy_caps_parse()
Currently, in ath12k_wmi_mac_phy_caps_parse(), kzalloc() sizes the
mac_phy_caps buffer as tot_phy_id * len, where len is clamped to
min(firmware_len, sizeof(struct ath12k_wmi_mac_phy_caps_params)). The
subsequent memcpy() destination advances by sizeof(full struct) per slot
via C pointer arithmetic, not by the clamped len. When firmware sends
short TLVs, the second and later slots are written past the end of the
allocation.
The reader in ath12k_pull_mac_phy_cap_svc_ready_ext() also indexes the
buffer with full-struct pointer arithmetic, so the allocation must match
that stride.
Fix by using kzalloc_objs(), which derives the element size from the
pointer type, making allocation size and pointer stride provably
consistent regardless of what len the firmware provides.
Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.1.c7-00108-QCAHMTSWPL_V1.0_V2.0_SILICONZ_UPSTREAM-3
📍 영향받는 시스템
Linux kernel (ath12k Wi-Fi driver 사용 시스템)
⚔️ 공격 벡터
조작된(짧은 길이의) WMI 메시지를 전송하는 악성 펌웨어를 통한 힙 오버플로우 공격
🛡️ 대응 방법
kzalloc() 대신 요소 크기를 자동으로 계산하는 kzalloc_objs()를 사용하도록 커널 패치 적용
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 패치 버전인지 배포판 보안 공지를 통해 확인하십시오.