🔍 CVE-2026-89784

0.0
CVSS Score
UNKNOWN
2026-09-16
2026-10-19 09:18
✅ 완료

🇰🇷 한글 설명

Linux 커널의 SUNRPC 구성 요소에서 rpc_sockaddr2uaddr()의 반환값이 NULL인지 확인하지 않아 발생하는 취약점입니다. 메모리 부족 상황에서 NULL 포인터가 전달되어 strlen() 함수를 호출할 때 커널 패닉(Oops)이 발생할 수 있습니다.

💡 쉬운 설명

컴퓨터의 메모리가 부족할 때 특정 네트워크 서비스가 등록을 시도하면 시스템이 예상치 못한 오류로 인해 갑자기 멈추거나 꺼질 수 있는 문제입니다. 이는 프로그램이 비어있는 주소를 참조하려고 시도할 때 발생하는 전형적인 오류입니다.

🇺🇸 원문 (English)

In the Linux kernel, the following vulnerability has been resolved: SUNRPC: check rpc_sockaddr2uaddr() return value in rpcb_register_inet4/6 rpcb_register_inet4() and rpcb_register_inet6() store the result of rpc_sockaddr2uaddr() into map->r_addr without checking it for NULL. rpc_sockaddr2uaddr() returns NULL when its final kstrdup() fails, and the unchecked NULL is then carried into the synchronous RPCBPROC_SET encode path: rpcb_register_call() -> rpc_call_sync() -> rpcb_enc_getaddr() -> encode_rpcb_string(), whose first statement is strlen(string), dereferencing NULL and oopsing the kernel. The crash reproduces under failslab on v6.12; with KASAN the NULL dereference surfaces as a fault on the shadow of address zero: Oops: general protection fault, probably for non-canonical address 0xdffffc0000000000 [#1] PREEMPT SMP KASAN RIP: 0010:strlen (lib/string.c:409) Call Trace: encode_rpcb_string (net/sunrpc/rpcb_clnt.c:890) rpcb_enc_getaddr (net/sunrpc/rpcb_clnt.c:910) rpcauth_wrap_req_encode (net/sunrpc/auth.c:745) call_encode (net/sunrpc/clnt.c:1966) __rpc_execute (net/sunrpc/sched.c:952) rpc_run_task (net/sunrpc/clnt.c:1243) rpc_call_sync (net/sunrpc/clnt.c:1272) rpcb_v4_register (net/sunrpc/rpcb_clnt.c:500) svc_generic_rpcbind_set nfsd_rpcbind_set svc_register svc_setup_socket svc_addsock write_ports nfsctl_transaction_write vfs_write The crash is reachable when an in-kernel RPC service (nfsd, lockd, nfs-callback) registers with the local rpcbind under enough memory pressure for the small GFP_KERNEL kstrdup() in rpc_sockaddr2uaddr() to fail. The asynchronous getport path already handles this exact failure mode by returning -ENOMEM; only the two register helpers omit the check. Mirror that handling: bail out with -ENOMEM when rpc_sockaddr2uaddr() returns NULL, before the address is fed into the encoder.

📍 영향받는 시스템

Linux kernel v6.12 및 rpcbind를 사용하는 시스템

⚔️ 공격 벡터

시스템 메모리 압박(Memory Pressure)을 유도하여 커널의 메모리 할당 실패를 유발함으로써 발생

🛡️ 대응 방법

Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 rpcb_register_inet4/6 함수 내 NULL 체크 로직을 적용해야 함

🔧 검증 코드

출력된 커널 버전이 취약점이 해결된 패치 버전인지 확인

Shell / Script
uname -r

💻 영향받는 소프트웨어

Linux Kernel