🇰🇷 한글 설명
Linux 커널의 netfilter nf_conntrack_sip 모듈에서 SDP 미디어 섹션 처리 시 미초기화된 rtp_addr 변수를 사용하는 취약점입니다. 유효한 미디어 정보가 없으면 스택의 임의 값이 IP 주소로 변환되어 SDP 세션 정보를 손상시킵니다.
💡 쉬운 설명
VoIP 통신을 관리하는 Linux 커널 모듈이 특정 패킷을 받을 때 잘못된 주소로 연결을 수정하려고 시도합니다. 이로 인해 0.0.0.0이나 임의의 주소로 설정되어 통신이 실패할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
netfilter: nf_conntrack_sip: fix use of uninitialized rtp_addr in process_sdp
process_sdp() declares union nf_inet_addr rtp_addr on the stack and
passes it to the nf_nat_sip sdp_session hook after walking the SDP
media descriptions. However rtp_addr is only initialized inside the
media loop when a recognized media type with a non-zero port is found.
If the SDP body contains no m= lines, only inactive media sections
(m=audio 0 ...) or only unrecognized media types, rtp_addr is never
assigned. Despite that, the function still calls hooks->sdp_session()
with &rtp_addr, causing nf_nat_sdp_session() to format the stale stack
value as an IP address and rewrite the SDP session owner and connection
lines with it.
With CONFIG_INIT_STACK_ALL_ZERO (default on most distributions) this
results in the session-level o= and c= addresses being rewritten to
0.0.0.0 for inactive SDP sessions. Without stack auto-init the
rewritten address is whatever happened to be on the stack.
Fix this by pre-initializing rtp_addr from the session-level connection
address (caddr) when available, and tracking via a have_rtp_addr flag
whether any valid address was established. Skip the sdp_session hook
entirely when no valid address exists.
📍 영향받는 시스템
netfilter nf_conntrack_sip 모듈이 활성화된 Linux 커널 (대부분의 배포판에서 기본값)
⚔️ 공격 벡터
특별히 구성된 SDP 패킷 (미디어 섹션 없음 또는 비활성 미디어만 포함)을 전송하여 네트워크 연결 수정 오류 발생
🛡️ 대응 방법
Linux 커널을 최신 버전으로 업데이트하거나 불필요한 경우 CONFIG_NF_CONNTRACK_SIP 비활성화
🔧 검증 코드
CONFIG_NF_CONNTRACK_SIP=y가 출력되면 커널이 영향받음 (패치된 버전 확인은 uname -r로 커널 버전 확인 후 보안 공지와 비교)
grep -i 'CONFIG_NF_CONNTRACK_SIP=y' /boot/config-$(uname -r) && echo 'Vulnerable' || echo 'Not vulnerable'