🇰🇷 한글 설명
Linux 커널의 SUNRPC 서브시스템에서 sunrpc 트레이싱 기능이 활성화된 상태로 svc_rqst가 지연될 때 NULL 역참조로 인한 시스템 충돌(Crash)이 발생할 수 있는 취약점입니다. svc_revisit() 함수가 dr->xprt를 NULL로 설정하기 때문에 트레이스포인트에서 원격 주소를 참조할 때 문제가 발생합니다.
💡 쉬운 설명
리눅스 운영체제의 네트워크 통신 기록을 남기는 기능이 켜져 있을 때, 특정 상황에서 시스템이 갑자기 멈추거나 꺼질 수 있는 오류입니다. 이는 공격자가 시스템을 강제로 중단시키는 서비스 거부(DoS) 공격에 이용될 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
SUNRPC: Fix the svc_deferred_event trace class
Fix a NULL deref crash that occurs when an svc_rqst is deferred
while the sunrpc tracing subsystem is enabled. svc_revisit() sets
dr->xprt to NULL, so it can't be relied upon in the tracepoint to
provide the remote's address.
Unfortunately we can't revert the "svc_deferred_class" hunk in
commit ece200ddd54b ("sunrpc: Save remote presentation address in
svc_xprt for trace events") because there is now a specific check
of event format specifiers for unsafe dereferences. The warning
that check emits is:
event svc_defer_recv has unsafe dereference of argument 1
A "%pISpc" format specifier with a "struct sockaddr *" is indeed
flagged by this check.
Instead, take the brute-force approach used by the svcrdma_qp_error
tracepoint. Convert the dr::addr field into a presentation address
in the TP_fast_assign() arm of the trace event, and store that as
a string. This fix can be backported to -stable kernels.
In the meantime, commit c6ced22997ad ("tracing: Update print fmt
check to handle new __get_sockaddr() macro") is now in v5.18, so
this wonky fix can be replaced with __sockaddr() and friends
properly during the v5.19 merge window.
📍 영향받는 시스템
SUNRPC 트레이싱 기능이 활성화된 Linux 커널 (v5.18 미만 버전 영향 가능성)
⚔️ 공격 벡터
트레이싱 기능이 활성화된 상태에서 특수하게 조작된 RPC 요청을 보내 시스템 충돌 유도
🛡️ 대응 방법
커널 패치를 적용하거나, 사용하지 않는 경우 sunrpc 트레이싱 기능을 비활성화합니다.
🔧 검증 코드
출력된 커널 버전을 확인하여 취약점이 해결된 최신 안정화 버전인지 확인합니다.