🇰🇷 한글 설명
리눅스 커널의 IPv6 멀티캐스트 소스 필터링 과정에서 데이터 업데이트 방식의 결함이 발견되었습니다. 기존의 인플레이스(in-place) 수정 방식은 RCU 읽기 작업과 동기화되지 않아, 동시 접근 시 IPv6 주소가 깨지거나 필터 목록이 손상될 수 있는 레이스 컨디션 취약점을 포함하고 있습니다.
💡 쉬운 설명
네트워크 데이터를 처리할 때 목록을 수정하는 방식이 안전하지 않아, 데이터가 읽히는 도중에 값이 바뀌면 잘못된 주소 정보가 읽힐 수 있는 문제입니다. 이로 인해 네트워크 통신 오류나 예기치 않은 동작이 발생할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
ipv6: mcast: use copy-on-write RCU updates in ip6_mc_source()
pmc->sflist is read locklessly under rcu_read_lock() by
inet6_mc_check() during packet reception in the UDP and RAW
multicast receive paths.
ip6_mc_source() mutated psl->sl_addr and psl->sl_count in-place
when adding or removing a source filter. Additionally, when expanding
the filter buffer, newpsl was published via rcu_assign_pointer()
before writing the new source into the array.
Because 16-byte struct in6_addr writes are not atomic and array
shifting is not synchronized with RCU readers, concurrent readers in
inet6_mc_check() could read torn IPv6 addresses or observe
duplicated/missed source entries.
Fix this by switching ip6_mc_source() to copy-on-write RCU updates:
allocate and fully populate newpsl before publishing it via
rcu_assign_pointer(), and reclaim the old filter via kfree_rcu(),
matching ip6_mc_msfilter().
Also remove the now unused IP6_SFBLOCK macro.
📍 영향받는 시스템
Linux Kernel (IPv6 multicast source filtering 기능 사용 시)
⚔️ 공격 벡터
특수하게 조작된 IPv6 멀티캐스트 패킷을 전송하여 커널 내의 소스 필터 목록 업데이트와 읽기 동작 간의 충돌 유도
🛡️ 대응 방법
리눅스 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 Copy-on-Write RCU 업데이트 방식이 적용되도록 조치
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이후인지 확인