🔍 CVE-2026-98369

7.8
CVSS Score
HIGH
2026-10-06
2026-10-19 10:18
✅ 완료

🇰🇷 한글 설명

Linux 커널의 xfrm 구성 요소에서 RCU(Read-Copy-Update) 잠금 메커니즘이 누락되어 발생하는 취약점입니다. xfrm_trans_reinject 함수가 tasklet에서 workqueue로 변경되면서 프로세스 컨텍스트에서 실행될 때 적절한 RCU 읽기 잠금과 skb 데이터 구조에 대한 참조 카운팅이 이루어지지 않아 데이터 불일치나 시스템 불안정을 초래할 수 있습니다.

💡 쉬운 설명

리눅스 운영체제의 네트워크 처리 과정에서 데이터 보호를 위한 잠금 장치가 제대로 작동하지 않는 문제입니다. 이로 인해 네트워크 패킷을 처리하는 중에 시스템이 충돌하거나 예상치 못한 오류가 발생할 수 있습니다.

🇺🇸 원문 (English)

In the Linux kernel, the following vulnerability has been resolved: xfrm: add missing rcu_read_lock(), skb_dst_force() and dev_hold() for xfrm_trans_reinject() syzbot reported a suspicious RCU usage warning in ip6_pkt_drop(): WARNING: suspicious RCU usage in ip6_pkt_drop include/net/addrconf.h:389 suspicious rcu_dereference_check() usage! Call Trace: __in6_dev_get_safely include/net/addrconf.h:389 [inline] ip6_pkt_drop+0x596/0x610 net/ipv6/route.c:4620 ip6_pkt_discard+0x1c/0x30 net/ipv6/route.c:4651 xfrm_trans_reinject+0x324/0x630 net/xfrm/xfrm_input.c:806 process_one_work kernel/workqueue.c:3322 [inline] process_scheduled_works+0xa8e/0x14e0 kernel/workqueue.c:3405 worker_thread+0xa47/0xfb0 kernel/workqueue.c:3486 When commit 4f4920669d21 ("xfrm: Reinject transport-mode packets through workqueue") converted xfrm_trans_reinject from a tasklet to a workqueue, the reinjection loop ceased running in softirq context. Workqueue workers run in process context where local_bh_disable() does not enter an RCU read-side critical section under CONFIG_PREEMPT_RCU. Because finish callbacks (such as ip6_rcv_finish) expect to run under an RCU read lock (performing route lookups, l3mdev lookups, and accessing RCU-protected data structures), invoking them in workqueue context without rcu_read_lock() triggers RCU lockdep warnings. Furthermore, packets queued to the workqueue via xfrm_trans_queue_net() may carry non-refcounted (noref) dst entries (e.g. from ip_route_input_noref). Additionally, on netdevice unregistration, dst_dev_put() replaces dst->dev with blackhole_netdev, so dst entries do not keep skb->dev alive while queued in the workqueue. Fix these issues by: 1. Calling skb_dst_force(skb) in xfrm_trans_queue_net() while still in the caller's RCU section to ensure dst is reference-counted before queuing. 2. Holding a reference on skb->dev via dev_hold()/dev_put() across workqueue deferral so skb->dev remains valid during finish() callback processing. 3. Acquiring rcu_read_lock() around the finish callback invocation loop in xfrm_trans_reinject().

📍 영향받는 시스템

Linux Kernel (xfrm 모듈을 사용하는 버전)

⚔️ 공격 벡터

특수하게 조작된 네트워크 패킷을 전송하여 커널의 xfrm 재삽입(reinject) 로직을 트리거함으로써 발생

🛡️ 대응 방법

커널 패치를 적용하여 xfrm_trans_reinject에 rcu_read_lock(), skb_dst_force(), dev_hold()를 추가한 최신 커널로 업데이트

🔧 검증 코드

현재 실행 중인 커널 버전을 확인하여 취약점이 해결된 패치 버전인지 확인합니다.

Shell / Script
uname -r

📊 CVSS Vector String

CVSS Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

💻 영향받는 소프트웨어

NVIDIA Cloud Gaming Guest Driver for Linux