🇰🇷 한글 설명
Linux 커널의 rxrpc 서브시스템에서 채널이 아직 할당되지 않은 호출(call)의 타임아웃 설정 문제가 수정되었습니다. afs_make_call()이 연결 대기 중인 호출에 타임아웃을 설정하면서 호출 타이머가 조기에 만료되어 NULL 포인터 역참조로 커널 오프가 발생할 수 있었습니다. 패치는 호출 생성 시점에 타임아웃 값을 struct rxrpc_call에 저장하고 첫 패킷 전송 시 타이머를 시작하도록 변경합니다.
💡 쉬운 설명
네트워크 파일 시스템 통신 중 연결을 기다리던 작업이 너무 일찍 시간 초과되면서 시스템이 충돌할 수 있는 문제입니다. 이 문제는 커널 업데이트로 해결됩니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
rxrpc: Fix timeout of a call that hasn't yet been granted a channel
afs_make_call() calls rxrpc_kernel_begin_call() to begin a call (which may
get stalled in the background waiting for a connection to become
available); it then calls rxrpc_kernel_set_max_life() to set the timeouts -
but that starts the call timer so the call timer might then expire before
we get a connection assigned - leading to the following oops if the call
stalled:
BUG: kernel NULL pointer dereference, address: 0000000000000000
...
CPU: 1 PID: 5111 Comm: krxrpcio/0 Not tainted 6.3.0-rc7-build3+ #701
RIP: 0010:rxrpc_alloc_txbuf+0xc0/0x157
...
Call Trace:
<TASK>
rxrpc_send_ACK+0x50/0x13b
rxrpc_input_call_event+0x16a/0x67d
rxrpc_io_thread+0x1b6/0x45f
? _raw_spin_unlock_irqrestore+0x1f/0x35
? rxrpc_input_packet+0x519/0x519
kthread+0xe7/0xef
? kthread_complete_and_exit+0x1b/0x1b
ret_from_fork+0x22/0x30
Fix this by noting the timeouts in struct rxrpc_call when the call is
created. The timer will be started when the first packet is transmitted.
It shouldn't be possible to trigger this directly from userspace through
AF_RXRPC as sendmsg() will return EBUSY if the call is in the
waiting-for-conn state if it dropped out of the wait due to a signal.
📍 영향받는 시스템
패치 이전의 Linux 커널 (rxrpc/AFS 기능을 사용하는 시스템)
⚔️ 공격 벡터
AF_RXRPC 소켓을 통한 직접 원격 공격은 어려우며, 시그널로 대기가 중단된 호출 상황에서 발생하는 안정성(DoS) 문제로 보입니다.
🛡️ 대응 방법
배포판에서 제공하는 최신 보안 커널 업데이트를 설치하고 재부팅합니다.
🔧 검증 코드
출력된 커널 버전을 배포판 보안 공지와 대조하여 수정 패치가 포함된 버전인지 확인하며, rxrpc/AFS 모듈 사용 여부는 lsmod | grep -E 'rxrpc|af_rxrpc'로 추가 확인할 수 있습니다.