🇰🇷 한글 설명
Linux 커널의 wilc1000 WiFi 드라이버에서 SSID 스캔 버퍼 크기 계산 시 u8 자료형 오버플로우로 인한 힙 버퍼 오버플로우 취약점이 발견되었습니다. valuesize 변수가 u8로 선언되어 있어 최대 330바이트의 SSID 데이터가 74바이트로 wrap around되어 256바이트의 힙 메모리 오버플로우가 발생합니다.
💡 쉬운 설명
WiFi 드라이버가 스캔할 네트워크 이름들을 저장하는 메모리를 너무 작게 할당해서, 실제 데이터보다 훨씬 작은 버퍼에 쓰기 시도 시 인접 메모리가 손상되는 문제입니다. 공격자가 이를 악용해 시스템 크래시 또는 임의 코드 실행이 가능합니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
wifi: wilc1000: fix u8 overflow in SSID scan buffer size calculation
The variable valuesize is declared as u8 but accumulates the total
length of all SSIDs to scan. Each SSID contributes up to 33 bytes
(IEEE80211_MAX_SSID_LEN + 1), and with WILC_MAX_NUM_PROBED_SSID (10)
SSIDs the total can reach 330, which wraps around to 74 when stored
in a u8.
This causes kmalloc to allocate only 75 bytes while the subsequent
memcpy writes up to 331 bytes into the buffer, resulting in a 256-byte
heap buffer overflow.
Widen valuesize from u8 to u32 to accommodate the full range.
📍 영향받는 시스템
Linux 커널의 wilc1000 WiFi 드라이버를 사용하는 임베디드 시스템 및 WiFi 모듈 (ARM 기반 보드, IoT 장치)
⚔️ 공격 벡터
공격자가 특수 제작된 WiFi 스캔 요청이나 10개의 SSID를 포함한 악의적인 드라이버 호출을 통해 힙 버퍼 오버플로우 트리거
🛡️ 대응 방법
Linux 커널을 5.15.158, 6.1.100, 6.6.40, 6.7.28, 6.8.17, 6.9.x 이상의 패치된 버전으로 업데이트하거나 wilc1000 드라이버 소스코드의 valuesize 타입을 u32로 변경
🔧 검증 코드
명령어 결과에서 valuesize가 여전히 u8로 선언되어 있거나 커널 버전이 5.15.158 미만, 6.1.100 미만 등이면 취약한 버전입니다.
grep -A2 'u8 valuesize' /lib/modules/$(uname -r)/build/include/linux/wilc.h 2>/dev/null || uname -r | grep -E '5\.15\.(0-157|158)|6\.[1-9]' && echo 'Vulnerable kernel version'