🇰🇷 한글 설명
Linux 커널의 xfrm 구성 요소에서 state_cache 및 state_cache_input 리스트를 삭제할 때 부적절한 함수를 사용하여 발생하는 취약점입니다. 이로 인해 이미 삭제된 객체에 대한 중복 삭제 시 메모리 오염이 발생하며, 결과적으로 Write Use-After-Free 및 Read Use-After-Free 취약점으로 이어질 수 있습니다.
💡 쉬운 설명
컴퓨터의 메모리 관리 과정에서 이미 지워진 데이터를 다시 지우려고 시도할 때 발생하는 오류입니다. 이 오류를 이용하면 시스템의 메모리가 망가져 보안 사고가 발생할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
xfrm: use hlist_del_init_rcu for state_cache and state_cache_input
Commit 14acf9652e56 ("xfrm: defensively unhash xfrm_state lists in
__xfrm_state_delete") converted bydst/bysrc/byseq/byspi from
hlist_del_rcu() to hlist_del_init_rcu() so that a second
__xfrm_state_delete() on the same object becomes a no-op rather than a
write through LIST_POISON pprev. It missed state_cache and
state_cache_input, which kept hlist_del_rcu():
- hlist_del_rcu() leaves pprev = LIST_POISON2 (non-NULL), so
hlist_unhashed() returns false.
- hlist_del_init_rcu() leaves pprev = NULL, so hlist_unhashed()
returns true.
A second __xfrm_state_delete() therefore enters __hlist_del() on the
already-deleted state_cache/state_cache_input nodes and does
WRITE_ONCE(*pprev, next) through LIST_POISON2 — a write use-after-free
once the slab is reused. The corruption can in turn cause a subsequent
hlist_for_each_entry_rcu traversal to follow a dangling next pointer,
producing the read use-after-free reported in xfrm_input_state_lookup().
Switch state_cache and state_cache_input to hlist_del_init_rcu() to
match the other four lists, closing the write use-after-free and, with
it, the read use-after-free it spawns.
📍 영향받는 시스템
Linux Kernel (xfrm 구성 요소가 포함된 버전)
⚔️ 공격 벡터
xfrm 상태 삭제 프로세스를 조작하여 메모리 해제 후 사용(Use-After-Free) 유도
🛡️ 대응 방법
커널 패치(Commit 14acf9652e56 관련 수정 사항 포함)를 적용하여 hlist_del_rcu를 hlist_del_init_rcu로 교체
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 패치 버전 이후인지 확인하십시오.
📊 CVSS Vector String
CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H
💻 영향받는 소프트웨어
NVIDIA Cloud Gaming Guest Driver for Linux