🇰🇷 한글 설명
Linux 커널의 ip6_gre 모듈에서 ip6gre_header() 함수가 헤더 공간을 충분히 확보하지 못해 발생하는 취약점입니다. team 또는 bonding 드라이버가 동적으로 헤더 길이를 변경할 때 skb(socket buffer)의 여유 공간이 부족해지면서 커널 패닉(crash)을 유발할 수 있습니다.
💡 쉬운 설명
네트워크 데이터를 처리하는 과정에서 데이터가 들어갈 공간을 잘못 계산하여 컴퓨터의 핵심 시스템(커널)이 갑자기 멈추거나 꺼질 수 있는 문제입니다. 특정 네트워크 설정이 변경될 때 데이터 공간이 모자라 발생하는 오류입니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
ip6_gre: make ip6gre_header() robust
Over the years, syzbot found many ways to crash the kernel
in ip6gre_header() [1].
This involves team or bonding drivers ability to dynamically
change their dev->needed_headroom and/or dev->hard_header_len
In this particular crash mld_newpack() allocated an skb
with a too small reserve/headroom, and by the time mld_sendpack()
was called, syzbot managed to attach an ip6gre device.
[1]
skbuff: skb_under_panic: text:ffffffff8a1d69a8 len:136 put:40 head:ffff888059bc7000 data:ffff888059bc6fe8 tail:0x70 end:0x6c0 dev:team0
------------[ cut here ]------------
kernel BUG at net/core/skbuff.c:213 !
<TASK>
skb_under_panic net/core/skbuff.c:223 [inline]
skb_push+0xc3/0xe0 net/core/skbuff.c:2641
ip6gre_header+0xc8/0x790 net/ipv6/ip6_gre.c:1371
dev_hard_header include/linux/netdevice.h:3436 [inline]
neigh_connected_output+0x286/0x460 net/core/neighbour.c:1618
neigh_output include/net/neighbour.h:556 [inline]
ip6_finish_output2+0xfb3/0x1480 net/ipv6/ip6_output.c:136
__ip6_finish_output net/ipv6/ip6_output.c:-1 [inline]
ip6_finish_output+0x234/0x7d0 net/ipv6/ip6_output.c:220
NF_HOOK_COND include/linux/netfilter.h:307 [inline]
ip6_output+0x340/0x550 net/ipv6/ip6_output.c:247
NF_HOOK+0x9e/0x380 include/linux/netfilter.h:318
mld_sendpack+0x8d4/0xe60 net/ipv6/mcast.c:1855
mld_send_cr net/ipv6/mcast.c:2154 [inline]
mld_ifc_work+0x83e/0xd60 net/ipv6/mcast.c:2693
📍 영향받는 시스템
Linux kernel (ip6_gre 모듈 및 team/bonding 드라이버 사용 환경)
⚔️ 공격 벡터
특수하게 조작된 네트워크 패킷을 전송하거나 네트워크 인터페이스 설정을 동적으로 변경하여 커널 패닉 유도
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하십시오.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 최신 패치 버전인지 확인하십시오.