🇰🇷 한글 설명
Linux 커널의 xfrm espintcp 모듈에서 소켓 종료 시 발생하는 Use-After-Free(UAF) 취약점입니다. espintcp_close() 함수가 소켓 잠금을 확보하지 않은 상태에서 skb를 해제하여, 동시에 실행되는 작업 큐가 해제된 메모리에 접근할 수 있는 레이스 컨디션이 발생합니다.
💡 쉬운 설명
컴퓨터가 통신을 종료하는 과정에서 메모리를 너무 빨리 지워버려, 다른 작업이 이미 지워진 데이터를 사용하려고 시도할 때 발생하는 오류입니다. 이로 인해 시스템이 충돌하거나 보안 문제가 생길 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
xfrm: espintcp: fix UAF during close
ZDI reported and analyzed a race condition during close for espintcp
sockets:
espintcp_close() frees emsg->skb via kfree_skb() without holding
any socket lock. Concurrently, the xfrm_trans_reinject work queue
invokes esp_output_tcp_finish() -> espintcp_push_skb() ->
espintcp_push_msgs() -> skb_send_sock_locked(), which reads the
same skb as a data source.
Fix this by adding a synchronize_rcu() call after resetting sk_prot,
since esp_output_tcp_finish() runs under RCU and won't use a socket
with sk_prot == &tcp_prot. Simply taking the socket lock in
espintcp_close() could lead to leaks, if esp_output_tcp_finish()
re-adds an skb in the slot we just freed. After this, the existing
barrier() is no longer needed.
📍 영향받는 시스템
Linux kernel (xfrm espintcp 모듈을 사용하는 시스템)
⚔️ 공격 벡터
특정 네트워크 패킷 처리 과정에서 레이스 컨디션을 유발하여 메모리 오류를 일으키는 방식
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하십시오.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이후인지 확인하십시오.