🇰🇷 한글 설명
Linux 커널의 IPVS 구성 중 ip_vs_add_service 함수에서 오류 발생 시 NULL 포인터를 참조하여 커널 패닉이 발생하는 취약점입니다. 스케줄러 바인딩은 성공했으나 에스티메이터 시작 단계에서 실패할 경우, 초기화되지 않은 NULL 변수를 참조하여 시스템이 중단됩니다.
💡 쉬운 설명
네트워크 서비스를 설정하는 과정에서 예상치 못한 오류가 발생하면 컴퓨터의 핵심 시스템(커널)이 갑자기 멈춰버리는 문제입니다. 잘못된 메모리 주소를 참조하여 시스템이 스스로를 보호하기 위해 강제로 종료되는 현상입니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
ipvs: fix NULL deref in ip_vs_add_service error path
When ip_vs_bind_scheduler() succeeds in ip_vs_add_service(), the local
variable sched is set to NULL. If ip_vs_start_estimator() subsequently
fails, the out_err cleanup calls ip_vs_unbind_scheduler(svc, sched)
with sched == NULL. ip_vs_unbind_scheduler() passes the cur_sched NULL
check (because svc->scheduler was set by the successful bind) but then
dereferences the NULL sched parameter at sched->done_service, causing a
kernel panic at offset 0x30 from NULL.
Oops: general protection fault, [..] [#1] PREEMPT SMP KASAN NOPTI
KASAN: null-ptr-deref in range [0x0000000000000030-0x0000000000000037]
RIP: 0010:ip_vs_unbind_scheduler (net/netfilter/ipvs/ip_vs_sched.c:69)
Call Trace:
<TASK>
ip_vs_add_service.isra.0 (net/netfilter/ipvs/ip_vs_ctl.c:1500)
do_ip_vs_set_ctl (net/netfilter/ipvs/ip_vs_ctl.c:2809)
nf_setsockopt (net/netfilter/nf_sockopt.c:102)
[..]
Fix by simply not clearing the local sched variable after a successful
bind. ip_vs_unbind_scheduler() already detects whether a scheduler is
installed via svc->scheduler, and keeping sched non-NULL ensures the
error path passes the correct pointer to both ip_vs_unbind_scheduler()
and ip_vs_scheduler_put().
While the bug is older, the problem popups in more recent kernels (6.2),
when the new error path is taken after the ip_vs_start_estimator() call.
📍 영향받는 시스템
Linux Kernel (최소 6.2 버전 포함 IPVS 모듈 사용 시스템)
⚔️ 공격 벡터
로컬 권한을 가진 사용자가 IPVS 설정을 조작하여 특정 오류 경로를 유도함으로써 시스템 중단(DoS) 유발
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 ip_vs_add_service의 오류 처리 로직 수정
🔧 검증 코드
출력된 커널 버전이 취약점이 해결된 최신 패치 버전인지 확인