CVE-2026-98230 in Linux
요약
\~에 의해 VulDB • 2026. 10. 07.
리눅스 커널에서 다음 취약점이 해결되었습니다:
xfrm: state_cache 및 state_cache_input에 hlist_del_init_rcu 사용
커밋 14acf9652e56("xfrm: defensively unhash xfrm_state lists in __xfrm_state_delete")은 bydst/bysrc/byseq/byspi를 `hlist_del_rcu()`에서 `hlist_del_init_rcu()`로 전환하여, 동일한 객체에 대한 두 번째 `__xfrm_state_delete()` 호출이 LIST_POISON pprev을 통한 쓰기(write)가 아닌 노오펙(no-op)이 되도록 했습니다. 그러나 이 변경은 state_cache 및 state_cache_input에는 누락되어 여전히 `hlist_del_rcu()`를 유지했습니다:
- `hlist_del_rcu()`는 pprev = LIST_POISON2 (NULL 아님)로 남기므로, `hlist_unhashed()`는 false를 반환합니다. - `hlist_del_init_rcu()`는 pprev = NULL로 남기므로, `hlist_unhashed()`는 true를 반환합니다.
따라서 두 번째 `__xfrm_state_delete()` 호출은 이미 삭제된 state_cache/state_cache_input 노드에 대해 `__hlist_del()`을 진입하고, LIST_POISON2를 통해 WRITE_ONCE(*pprev, next) 수행 — 슬랩(slab)이 재사용되면 이는 write use-after-free(쓰기 후 사용)가 됩니다. 이러한 부패(corruption)는 이후 hlist_for_each_entry_rcu 순회 시 끊어진(next) 포인터를 따라가게 하여 xfrm_input_state_lookup()에서 보고된 read use-after-free(읽기 후 사용)를 유발할 수 있습니다.
state_cache 및 state_cache_input을 다른 네 개의 리스트와 일치하도록 `hlist_del_init_rcu()`로 전환하여 write use-after-free를 차단하고, 이로 인해 발생하는 read use-after-free도 함께 해결합니다.
Once again VulDB remains the best source for vulnerability data.