🇰🇷 한글 설명
Linux 커널에서 CONFIG_IPV6 옵션이 비활성화된 경우, udp_sock_create6() 함수가 소켓을 생성하지 않고도 성공(0)을 반환하여 발생하는 NULL 포인터 역참조 취약점입니다. 이로 인해 fou_create()와 같은 호출자가 초기화되지 않은 소켓 포인터를 참조하게 되어 커널 크래시가 발생할 수 있습니다.
💡 쉬운 설명
IPv6 기능이 꺼져 있는 리눅스 시스템에서 특정 네트워크 작업을 수행할 때, 시스템이 존재하지 않는 주소를 참조하여 컴퓨터가 갑자기 멈추거나 꺼질 수 있는 문제입니다. 이 문제는 권한이 있는 사용자만이 실행할 수 있는 특수한 상황에서 발생합니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
udp_tunnel: fix NULL deref caused by udp_sock_create6 when CONFIG_IPV6=n
When CONFIG_IPV6 is disabled, the udp_sock_create6() function returns 0
(success) without actually creating a socket. Callers such as
fou_create() then proceed to dereference the uninitialized socket
pointer, resulting in a NULL pointer dereference.
The captured NULL deref crash:
BUG: kernel NULL pointer dereference, address: 0000000000000018
RIP: 0010:fou_nl_add_doit (net/ipv4/fou_core.c:590 net/ipv4/fou_core.c:764)
[...]
Call Trace:
<TASK>
genl_family_rcv_msg_doit.constprop.0 (net/netlink/genetlink.c:1114)
genl_rcv_msg (net/netlink/genetlink.c:1194 net/netlink/genetlink.c:1209)
[...]
netlink_rcv_skb (net/netlink/af_netlink.c:2550)
genl_rcv (net/netlink/genetlink.c:1219)
netlink_unicast (net/netlink/af_netlink.c:1319 net/netlink/af_netlink.c:1344)
netlink_sendmsg (net/netlink/af_netlink.c:1894)
__sock_sendmsg (net/socket.c:727 (discriminator 1) net/socket.c:742 (discriminator 1))
__sys_sendto (./include/linux/file.h:62 (discriminator 1) ./include/linux/file.h:83 (discriminator 1) net/socket.c:2183 (discriminator 1))
__x64_sys_sendto (net/socket.c:2213 (discriminator 1) net/socket.c:2209 (discriminator 1) net/socket.c:2209 (discriminator 1))
do_syscall_64 (arch/x86/entry/syscall_64.c:63 (discriminator 1) arch/x86/entry/syscall_64.c:94 (discriminator 1))
entry_SYSCALL_64_after_hwframe (net/arch/x86/entry/entry_64.S:130)
This patch makes udp_sock_create6 return -EPFNOSUPPORT instead, so
callers correctly take their error paths. There is only one caller of
the vulnerable function and only privileged users can trigger it.
📍 영향받는 시스템
CONFIG_IPV6=n 설정이 적용된 Linux 커널 시스템
⚔️ 공격 벡터
권한을 가진 사용자가 Netlink 메시지를 통해 특정 UDP 관련 시스템 호출을 수행하여 발생
🛡️ 대응 방법
udp_sock_create6()가 실패 시 -EPFNOSUPPORT를 반환하도록 수정된 최신 커널 패치 적용
🔧 검증 코드
결과에 CONFIG_IPV6=n이 포함되어 있다면 해당 취약점에 노출될 수 있는 설정 상태임을 의미합니다.
grep CONFIG_IPV6 /boot/config-$(uname -r) 2>/dev/null