🇰🇷 한글 설명
Linux 커널의 Qualcomm RMnet 드라이버에서 MAP 프레임의 길이를 검증하지 않아 발생하는 취약점입니다. ingress deaggregation이 비활성화된 경우, 실제 데이터 길이(skb->len)를 확인하지 않고 네트워크 패킷의 길이를 기반으로 헤더를 참조하여 메모리 경계를 벗어나는 읽기(out-of-bounds read)가 발생할 수 있습니다.
💡 쉬운 설명
네트워크 데이터를 처리할 때 데이터의 실제 크기를 제대로 확인하지 않아, 정해진 범위를 넘어서는 잘못된 메모리 영역을 읽게 되는 문제입니다. 이로 인해 시스템이 불안정해지거나 보안 공격에 노출될 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
net: qualcomm: rmnet: validate MAP frame length before ingress parsing
When ingress deaggregation is disabled, rmnet_map_ingress_handler() passes
the skb straight to __rmnet_map_ingress_handler(), skipping the length
validation that rmnet_map_deaggregate() performs on the aggregated path.
The parser then dereferences the MAP header and csum header/trailer based on
the on-wire pkt_len without checking skb->len, so a short frame is read out
of bounds:
BUG: KASAN: slab-out-of-bounds in rmnet_map_checksum_downlink_packet
Read of size 1 at addr ffff88801118ed00 by task exploit/147
Call Trace:
...
rmnet_map_checksum_downlink_packet (drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c:413)
__rmnet_map_ingress_handler (drivers/net/ethernet/qualcomm/rmnet/rmnet_handlers.c:96)
rmnet_rx_handler (drivers/net/ethernet/qualcomm/rmnet/rmnet_handlers.c:129)
__netif_receive_skb_core.constprop.0 (net/core/dev.c:6089)
netif_receive_skb (net/core/dev.c:6460)
tun_get_user (drivers/net/tun.c:1955)
tun_chr_write_iter (drivers/net/tun.c:2001)
vfs_write (fs/read_write.c:688)
ksys_write (fs/read_write.c:740)
do_syscall_64 (arch/x86/entry/syscall_64.c:94)
...
Factor that validation out of rmnet_map_deaggregate() into
rmnet_map_validate_packet_len() and run it on the no-aggregation path too.
The MAP header is bounds-checked first, since this path can receive a frame
shorter than the header.
📍 영향받는 시스템
Qualcomm RMnet 드라이버를 사용하는 Linux 커널 시스템
⚔️ 공격 벡터
조작된 짧은 길이의 MAP 프레임을 네트워크를 통해 전송하여 메모리 경계 외 영역을 참조 유도
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 프레임 길이 검증 로직을 적용해야 함
🔧 검증 코드
현재 실행 중인 커널 버전을 확인하여 해당 취약점이 해결된 패치 버전 이상인지 확인합니다.