🇰🇷 한글 설명
Linux 커널의 xfrm 모듈 내 xfrm_policy_bysel_ctx() 함수에서 발생하는 Use-After-Free 취약점입니다. 정책 삭제 과정에서 락(lock)을 해제한 후 빈(bin)을 정리하는 과정 중 경쟁 상태(Race Condition)가 발생하여 메모리가 해제된 후 다시 참조될 수 있습니다.
💡 쉬운 설명
컴퓨터의 메모리 관리 규칙이 꼬여서 이미 삭제된 데이터를 다시 사용하려고 할 때 발생하는 오류입니다. 해커가 이 틈을 이용하면 시스템을 중단시키거나 권한을 탈취할 위험이 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
xfrm: policy: fix use-after-free on inexact bin in xfrm_policy_bysel_ctx()
Fix the race by pruning the bin while still holding xfrm_policy_lock,
before dropping it. Use __xfrm_policy_inexact_prune_bin() directly since
the lock is already held. The wrapper xfrm_policy_inexact_prune_bin()
becomes unused and is removed.
Race:
CPU0 (XFRM_MSG_DELPOLICY) CPU1 (XFRM_MSG_NEWSPDINFO)
========================== ==========================
xfrm_policy_bysel_ctx():
spin_lock_bh(xfrm_policy_lock)
bin = xfrm_policy_inexact_lookup()
__xfrm_policy_unlink(pol)
spin_unlock_bh(xfrm_policy_lock)
xfrm_policy_kill(ret)
// wide window, lock not held
xfrm_hash_rebuild():
spin_lock_bh(xfrm_policy_lock)
__xfrm_policy_inexact_flush():
kfree_rcu(bin) // bin freed
spin_unlock_bh(xfrm_policy_lock)
xfrm_policy_inexact_prune_bin(bin)
// UAF: bin is freed
📍 영향받는 시스템
Linux Kernel (xfrm 모듈을 사용하는 버전)
⚔️ 공격 벡터
네트워크 정책 삭제(XFRM_MSG_DELPOLICY)와 생성(XFRM_MSG_NEWSPDINFO) 요청을 동시에 보내 경쟁 상태를 유도
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이후인지 확인