🇰🇷 한글 설명
리눅스 커널의 net/handshake 구성 요소에서 핸드셰이크 취소 요청이 중복될 경우 소켓 참조 횟수가 감소하는 취약점이 발견되었습니다. 이로 인해 참조 횟수 언더플로우(refcount underflow)가 발생하여 시스템 안정성에 영향을 줄 수 있습니다.
💡 쉬운 설명
네트워크 연결을 취소하는 과정에서 똑같은 취소 명령이 두 번 내려지면, 컴퓨터가 관리하는 숫자가 잘못 계산되어 시스템 오류가 발생할 수 있습니다. 이는 주로 네트워크 연결이 끊어지는 특수한 상황에서 발생합니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
net/handshake: duplicate handshake cancellations leak socket
When a handshake request is cancelled it is removed from the
handshake_net->hn_requests list, but it is still present in the
handshake_rhashtbl until it is destroyed.
If a second cancellation request arrives for the same handshake request,
then remove_pending() will return false... and assuming
HANDSHAKE_F_REQ_COMPLETED isn't set in req->hr_flags, we'll continue
processing through the out_true label, where we put another reference on
the sock and a refcount underflow occurs.
This can happen for example if a handshake times out - particularly if
the SUNRPC client sends the AUTH_TLS probe to the server but doesn't
follow it up with the ClientHello due to a problem with tlshd. When the
timeout is hit on the server, the server will send a FIN, which triggers
a cancellation request via xs_reset_transport(). When the timeout is
hit on the client, another cancellation request happens via
xs_tls_handshake_sync().
Add a test_and_set_bit(HANDSHAKE_F_REQ_COMPLETED) in the pending cancel
path so duplicate cancels can be detected.
📍 영향받는 시스템
Linux Kernel (net/handshake 관련 모듈 사용 시스템)
⚔️ 공격 벡터
SUNRPC 클라이언트와 서버 간의 TLS 핸드셰이크 과정에서 타임아웃을 유도하여 중복 취소 요청을 발생시킴
🛡️ 대응 방법
리눅스 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 HANDSHAKE_F_REQ_COMPLETED 플래그 검증 로직을 적용해야 함
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이후인지 확인하십시오.