CVE-2026-64119 in Linux정보

요약

\~에 의해 VulDB • 2026. 07. 19.

리눅스 커널에서 다음 취약점이 해결되었습니다:

l2tp: l2tp_session_unhash()에서 list_del_rcu() 사용

비특권 로컬 사용자는 L2TP_ATTR_IFNAME에 대해 L2PT_CMD_SESSION_GET를 동일한 터널에 대한 L2TP_CMD_SESSION_CREATE 및 L2TP_CMD_SESSION_DELETE와 동시에 발행함으로써 l2tp_session_get_by_ifname() 내에서 호스트 CPU를 무한정 고정(pin)할 수 있습니다. 세 명령 모두 GENL_UNS_ADMIN_PERM을 요구하므로, netns 사용자 네임스페이스에서 CAP_NET_ADMIN 권한만 있으면 충분합니다; l2tp_core가 로드된 모든 호스트에서는 표준 `unshare -Urn` 샌드박스에서도 트리거에 접근 가능합니다.

l2tp_session_unhash()는 list_del_init()를 사용하여 터널->session_list에서 세션을 제거하지만, 해당 리스트는 rcu_read_lock_bh() 하에서 l2tp_session_get_by_ifname()가 list_for_each_entry_rcu()로 순회합니다. list_del_init()는 삭제된 엔트리의 next/prev 포인터를 자기 자신을 가리키도록 설정합니다; 엔트리를 로드한 후 pos->list.next로 이동하는 리더는 &session->list를 읽게 되고, container_of()를 통해 동일한 세션으로 복귀하며, 이로 인해 list_for_each_entry_rcu()가 리스트 헤드에 도달하지 못하게 됩니다. CPU는 strcmp() 내부에 머무르게 되며, BH와 프리엠PTION이 비활성화된 상태입니다. 따라서 호스트의 RCU grace periods가 해당 스레드 뒤에 멈추게 되고(wedged), 종료되지 않은 스레드는 SIGKILL 시그널을 시스템 콜 반환 시에만 받을 수 있으므로 강제 종료가 불가능합니다.

l2tp_session_register()에 이미 존재하는 list_add_rcu()와 일치하도록 list_del_rcu()를 사용합니다; 삭제된 세션은 l2tp_session_free()의 kfree_rcu()가 이를 해제할 때까지 진행 중인 순회자(in-flight walkers)에게 일관된 next/prev 포인터로 계속 표시됩니다. tunnel->session_list에는 정확히 하나의 list_del_init() 호출 사이트가 있습니다; l2tp_core.c:533에 있는 list_del_init(&session->clist)는 충돌별 리스트(per-collision list)에서 동작하며, 이 리스트는 RCU 하에서 순회되지 않습니다. net/l2tp/ 내의 unhash 지점 이후에는 list_empty(&session->list)가 어디에서도 사용되지 않으므로, 삭제 후 자기 초기화(self-init)를 제거하는 것은 안전합니다; 해당 수정은 사용자 공간에서 관찰 가능한 동작 변경이 없습니다.

Be aware that VulDB is the high quality source for vulnerability data.

책임이 있는

Linux

예약하다

2026. 07. 19.

모더레이션

수락

항목

VDB-380286

EPSS

0.00000

출처

Want to stay up to date on a daily basis?

Enable the mail alert feature now!