🔍 CVE-2026-15461

5.3
CVSS Score
MEDIUM
2026-09-10
2026-09-10 17:17
✅ 완료

🇰🇷 한글 설명

Sierra Wireless HL78xx 모뎀의 GNSS 드라이버에서 구조체 멤버 배치 오류로 인한 타입 혼동(Type Confusion) 취약점이 발견되었습니다. GNSS 신호를 조작하는 공격자가 NMEA 데이터를 통해 커널 메모리의 잘못된 위치에 데이터를 쓰게 함으로써 시스템 충돌이나 메모리 오염을 유발할 수 있습니다.

💡 쉬운 설명

GPS 신호를 가짜로 만들어 보내는 공격을 통해 기기의 핵심 운영체제(커널)를 고장 내거나 멈추게 할 수 있는 결함입니다. GPS 신호가 조작될 경우 시스템이 잘못된 메모리 주소에 데이터를 기록하려다 오류가 발생합니다.

🇺🇸 원문 (English)

The Sierra Wireless HL78xx modem GNSS driver (drivers/modem/hl78xx/, later drivers/modem/vendor_standalone/hl78xx/) embeds a generic struct gnss_nmea0183_match_data match_data inside struct hl78xx_gnss_data. The generic NMEA0183 match helper (drivers/gnss/gnss_nmea0183_match.c) requires that context to be the first member because its callbacks cast user_data directly to struct gnss_nmea0183_match_data . In the affected releases match_data was the second member (after const struct device dev), so it sat at a non-zero offset while gnss_nmea0183_match_init() initialized it at the correct address. The registered NMEA handlers instead pass the whole device data object (data->devices.gnss->data, offset 0), producing an offset-shifted type confusion between where state is initialized and where the parse callbacks read and write it. When NMEA sentences from the GNSS receiver are parsed, the GGA/RMC callbacks write parsed fix data into the wrong location within the struct, and the GSV callback (gnss_nmea0183_match_gsv_callback, active under CONFIG_GNSS_SATELLITES) reads its satellites pointer and bound from the wrong offsets — non-pointer bytes of struct hl78xx_gnss_data — and then writes parsed struct gnss_satellite entries through that bogus pointer. This is a write through an uninitialized/wild pointer with a garbage bound. The NMEA handlers are registered by default (CONFIG_HL78XX_GNSS_SOURCE_NMEA is the default GNSS source) on devices using the HL78xx GNSS. The driver runs in kernel context and the NMEA data originates from the GNSS radio front-end, so a party able to influence the GNSS signal (for example GNSS/GPS spoofing at radio proximity) can drive the kernel-side parser into the faulty write. The most likely impact is a crash (denial of service) because the bogus pointer resolves to a fixed near-NULL value, with adjacent-memory corruption possible on MMU-less targets. Confidentiality is not affected. Exploitation requires the satellites feature to be enabled and active, so attack complexity is high.

📍 영향받는 시스템

Sierra Wireless HL78xx GNSS 드라이버를 사용하는 시스템 (CONFIG_GNSS_SATELLITES 활성화 시)

⚔️ 공격 벡터

근거리에서 GNSS/GPS 스푸핑(Spoofing)을 통해 조작된 NMEA 데이터를 전송

🛡️ 대응 방법

드라이버 소스 코드 내 hl78xx_gnss_data 구조체의 match_data 멤버를 첫 번째 위치로 수정하여 오프셋 불일치 해결

🔧 검증 코드

해당 드라이버 소스 내 구조체 정의에서 match_data가 첫 번째 멤버가 아닌 다른 위치에 있는지 확인

Shell / Script
grep -r "drivers/modem/hl78xx/" /path/to/kernel/source && grep -r "struct hl78xx_gnss_data" /path/to/kernel/source/drivers/modem/hl78xx/

📊 CVSS Vector String

CVSS Vector
CVSS:3.1/AV:A/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H

💻 영향받는 소프트웨어

Windows iSCSI Target Service