🇰🇷 한글 설명
Linux 커널의 ILA 구성 요소에서 pskb_may_pull 호출 시 IPv6 헤더 포인터가 유효하지 않게 되는 Use-After-Free 취약점이 발견되었습니다. 공격자가 특수하게 조작된 IPv6 패킷을 전송하면 해제된 메모리에 접근하여 시스템 오류를 유발하거나 권한 상승을 시도할 수 있습니다.
💡 쉬운 설명
네트워크 데이터를 처리하는 과정에서 이미 사용이 끝난 메모리 주소를 다시 참조하여 발생하는 보안 결함입니다. 해커가 조작된 패킷을 보내면 컴퓨터 시스템이 비정상적으로 작동하거나 제어권을 뺏길 위험이 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
ila: reload IPv6 header after pskb_may_pull in checksum adjust
ila_csum_adjust_transport() caches ip6h = ipv6_hdr(skb) before calling
pskb_may_pull(). On a non-linear skb whose transport header sits in a page
fragment, pskb_may_pull() can call __pskb_pull_tail() / pskb_expand_head()
and free the old skb head, leaving ip6h dangling; the following
get_csum_diff(ip6h, p) then reads freed memory. ila_update_ipv6_locator()
uses ip6h (and the iaddr derived from it) again after the csum-adjust
call and additionally writes the new locator through that pointer.
Impact: a remote IPv6 packet routed through a configured ILA
csum-adjust-transport route or receive-side mapping triggers a
slab-use-after-free in ila_update_ipv6_locator() (KASAN). The route or
mapping requires CAP_NET_ADMIN to configure, but trigger packets are
unauthenticated once it exists.
Reload ip6h after each pskb_may_pull() in ila_csum_adjust_transport()
before the csum-diff read. In ila_update_ipv6_locator() only the
ILA_CSUM_ADJUST_TRANSPORT case pulls the skb, so reload ip6h and iaddr in
that case alone before the destination-address write; the neutral-map
modes never pull and keep their cached pointers.
📍 영향받는 시스템
Linux Kernel (ILA 기능이 활성화된 환경)
⚔️ 공격 벡터
CAP_NET_ADMIN 권한으로 설정된 ILA 경로를 통해 조작된 IPv6 패킷을 전송하는 원격 공격
🛡️ 대응 방법
pskb_may_pull 호출 후 IPv6 헤더 포인터를 다시 로드하도록 커널 패치를 적용하십시오.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 최신 보안 패치 버전인지 확인하십시오.