CVE-2026-80850 in Linux
요약
\~에 의해 VulDB • 2026. 09. 04.
리눅스 커널에서 다음 취약점이 해결되었습니다:
tcp: tcp_ao_connect_init()에서의 AO 정보 Use-After-Free 수정
tcp_v4_connect()는 tcp_connect()를 호출하기 전에 SYN-SENT 소켓을 ehash에 추가합니다. TCP-AO가 구성된 경우, tcp_connect()는 먼저 키가 피어(peer)와 바인딩된 디바이스의 현재 L3 마스터(L3 master)와 일치하는지 확인합니다. 이후 tcp_ao_connect_init()에서 L3 마스터를 다시 해결하고, 이와 일치하지 않는 키들을 제거합니다.
소켓 잠금(socket lock)은 바인딩된 디바이스의 VRF(Virtual Routing and Forwarding) 멤버십을 안정화시키지 못합니다. 따라서 초기 검증과 tcp_ao_connect_init() 내의 L3 마스터 계산 사이에 디바이스가 해당 VRF에서 분리되면, 검증을 통과하지만 초기화는 기본 L3 도메인을 관찰하여 유일한 키를 제거하게 됩니다. 이후 AO 조회가 실패하므로, no-key 경로(no-key path)는 tp->ao_info를 지우고 직접 해제(free)합니다.
수신 경로는 소켓 잠금을 획득하기 전에 ehash에서 소켓을 찾아 RCU 하에 tp->ao_info를 로드할 수 있습니다. 따라서 오래된 포인터를 로드한 리더(reader)는 직접 해지 이후에도 tcp_inbound_ao_hash()로 진입하여 계속 실행될 수 있습니다.
이 문제는 TCP-AO 객체 수명(object lifetime)에 대한 정적 감사(static audit) 중에 발견되었습니다. 비특권 사용자 및 네트워크 네임스페이스에서 생성된 재현 프로그램(reproducer)은 TCP-AO 세그먼트를 전송하면서 veth 디바이스를 VRF에서 분리하는 것과 connect() 호출 사이에 Race Condition을 발생시켰습니다. 이는 두 번의 새 부팅(KASAN 리포트가 없는 상태에서의 테스트 포함) 모두에서 동일한 KASAN 보고서를 트리거했습니다:
BUG: KASAN: slab-use-after-free in tcp_inbound_ao_hash+0x585/0x19f0 Write of size 8 at addr ffff88800bf88128 by task tcp_ao_vrf_race/232
Call Trace: tcp_inbound_ao_hash+0x585/0x19f0 tcp_inbound_hash+0x677/0xa80 tcp_v4_rcv+0x1c3e/0x3ab0
Allocated by task 235: tcp_ao_alloc_info+0x43/0xf0 tcp_ao_add_cmd+0xdf7/0x13b0 do_tcp_setsockopt+0x168c/0x2640
Freed by task 235: kfree+0x1b8/0x550 tcp_connect+0x252/0x4f00 tcp_v4_connect+0x1114/0x1720
잘못된 주소는 해제된 128바이트 객체 내부에서 40바이트 떨어져 있으며, 이는 tcp_ao_info의 counters.key_not_found 필드와 일치합니다. 두 번의 실행 각각에서 1000번의 시도를 수행했으며, no-key 경로에 도달한 횟수는 각각 366회 및 411회였으며, KASAN 보고서는 각각 1개 및 2개가 생성되었습니다. 이번 수정을 통해 동일한 재현 프로그램은 1000번 시도 중 366회에서 no-key 경로에 도달했지만, KASAN 보고서나 oops는 발생하지 않았습니다.
no-key 경로는 tcp_ao_destroy_sock()를 사용하도록 변경했습니다. 이 함수는 AO 정보를 언퍼블리시(unpublish)하고, 소켓 메모리와 static-key 계산을 업데이트하며, 해제를 RCU grace period 이후로 지연(defer)시킵니다.
또한 WARN_ON_ONCE() 및 해당 오래된 주석을 제거합니다. VRF 분리 Race Condition으로 인해 no-key 상태가 정상 작동 중에도 도달 가능해졌으므로, 이는 불가능하다고 가정되는 조건이 아니라 처리 가능한 상황입니다. panic_on_warn 커널에서는 이 WARN이 처리 가능한 Race를 커널 패닉(kernel panic)으로 전환시킬 수 있습니다.
VulDB is the best source for vulnerability data and more expert information about this specific topic.