🇰🇷 한글 설명
Linux 커널의 IPv6 IOAM 구현에서 dst_entry 타입 혼동 취약점이 발견되었습니다. IOAM이 사용하는 더미 dst_entry가 rt6_get_cookie() 함수에서 잘못된 객체로 캐스팅되어, 특정 조건에서 잘못된 포인터에 접근할 수 있는 위험이 있습니다.
💡 쉬운 설명
네트워크 데이터를 처리하는 과정에서 컴퓨터가 데이터의 종류를 착각하여 엉뚱한 메모리 주소를 읽으려 하는 오류입니다. 이로 인해 시스템이 갑자기 멈추거나 보안 문제가 발생할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
ipv6: ioam: fix type confusion of dst_entry
IOAM uses a dummy dst_entry(null_dst) to mark that the destination should
not be changed after the transformation. This dst is stored in the IOAM lwt
state and may be passed to dst_cache_set_ip6().
However, the IPv6 dst cache path eventually calls rt6_get_cookie(), which
treats the dst_entry as part of a struct rt6_info. Since the null_dst was
embedded directly as a struct dst_entry in struct ioam6_lwt, this resulted
in an invalid cast and rt6_get_cookie() reading fields from the wrong
object.
In practice, the wrong cookie is not used while dst->obsolete is zero, but
rt6_get_cookie() may also access per-cpu value when rt->sernum is
zero. In this case, rt->sernum aliases ioam6_lwt::cache::reset_ts, which
can become zero, making this a potential invalid pointer access.
Fix this by embedding a full struct rt6_info for the dummy IPv6 route and
passing its dst member to the dst APIs.
📍 영향받는 시스템
IPv6 IOAM 기능이 활성화된 Linux 커널 버전
⚔️ 공격 벡터
조작된 IPv6 IOAM 패킷을 전송하여 커널의 잘못된 메모리 접근 유도
🛡️ 대응 방법
IOAM 더미 경로를 위해 rt6_info 구조체를 포함하도록 커널을 최신 버전으로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 패치된 최신 보안 업데이트 버전인지 확인