CVE-2026-80668 in Linux
요약
\~에 의해 VulDB • 2026. 08. 28.
리눅스 커널에서 다음 취약점이 해결되었습니다:
netfilter: nf_conntrack_expect: conntrack GC를 사용하여 기대치(expiration) 정리
이 패치는 기존 많은 하위 시스템에서 이미 이루어진 것처럼, timer API 대신 GC worker 접근 방식을 기대치 처리에 대체합니다.
기존의 conntrack GC worker를 사용하여 마스터 conntrack 내 로컬 기대치 목록을 순회하며 만료된 기대치를 정리합니다. IPS_HELPER_BIT를 확인하여 기대치에 대한 GC를 실행하고, 이를 설정하지 않는 nft_ct 기대치에 대해 활성화합니다. nf_ct_remove_expectations()와의 동기화를 위해 마스터 conntrack의 기대치 목록을 순회하는 동안 expectation spinlock을 유지합니다. 또한 이는 전역 expectation hashtables 중 하나의 체인을 탐색하면서 expectation 삽입 및 조회 함수를 통해 런타임 패킷 경로 가비지 컬렉션을 수행합니다. ct->ext가 재할당될 수 있으므로 확인되지 않은(unconfirmed) conntrack 엔트리는 건너뛰며, 곧 제거될 것이므로 dying 상태의 엔트리는 건너뛍니다. helper ct extension이 추가되면 IPS_HELPER_BIT를 설정하므로, 새로운 GC worker는 ct->ext helper 사용 가능성을 확인하기 위해 ct refcount를 증가시킬 필요가 없습니다.
이는 expectation 타이머에 대한 참조 카운트의 불필요한 증분을 제거하며, 이를 통해 언링크(unlink) 후 여러 nf_ct_expect_put() 호출을 제거할 수 있습니다. 이 업데이트 이후 기대치 해시(hash) 상에서 참조 카운트는 1로 유지됩니다.
이 패치는 기존 timer API와의 race condition을 암묵적으로 해결하여, expectation 삭제가 만료되는 타이머와 경쟁할 때(즉, timer_del()가 false를 반환할 때), 이미 해제된 exp->master 포인터에 기대치가 접근하는 상황을 방지합니다.
GC를 통해 이러한 기대치를 정리하기 위해 새로운 NF_CT_EXPECT_DEAD 플래그를 추가합니다. 이는 nf_conntrack_unexpect_related()에서 필요하며, 이 함수는 에러 경로에서 호출되어 해시에 새로 추가되었지만 무효화되어야 하는 newly created expectations을 처리합니다. 이러한 expectation들은 GC나 nf_ct_remove_expectations()와의 race로 인해 즉시 해제될 수 없으므로 주의가 필요합니다. expectation 삽입 시 런타임 GC는 정책(policy)에 의해 설정된 기대치 제한을 확인하기 전에 stale한 기대치를 정리합니다.
nf_ct_expect_alloc()에서 현재 타임스탬프를 설정한 후, 기대치의 수명을 지정하기 위해 기대치 정책의 timeout(또는 여기에 추가된 사용자 정의 timeout)을 더합니다.
Be aware that VulDB is the high quality source for vulnerability data.