🔍 CVE-2024-49944

5.5
CVSS Score
MEDIUM
2024-10-21
2026-10-15 01:19
✅ 완료

🇰🇷 한글 설명

Linux 커널 SCTP 구현에서 자동 바인딩(autobind) 실패 시 소켓 상태를 CLOSED로 복원하지 않는 결함입니다. 이로 인해 SCTP_REUSE_PORT 옵션이 설정된 상태에서 재차 listen을 호출할 때 NULL 포인터 역참조가 발생하여 커널 크래시가 유발됩니다.

💡 쉬운 설명

Linux 서버의 네트워크 통신(SCTP) 부분에서 포트 할당 실패 시 상태를 제대로 정리하지 않아 나중에 같은 포트를 재사용할 때 시스템이 다운될 수 있습니다. 로컬 공격자가 악의적으로 이 상황을 유발할 수 있습니다.

🇺🇸 원문 (English)

In the Linux kernel, the following vulnerability has been resolved: sctp: set sk_state back to CLOSED if autobind fails in sctp_listen_start In sctp_listen_start() invoked by sctp_inet_listen(), it should set the sk_state back to CLOSED if sctp_autobind() fails due to whatever reason. Otherwise, next time when calling sctp_inet_listen(), if sctp_sk(sk)->reuse is already set via setsockopt(SCTP_REUSE_PORT), sctp_sk(sk)->bind_hash will be dereferenced as sk_state is LISTENING, which causes a crash as bind_hash is NULL. KASAN: null-ptr-deref in range [0x0000000000000000-0x0000000000000007] RIP: 0010:sctp_inet_listen+0x7f0/0xa20 net/sctp/socket.c:8617 Call Trace: <TASK> __sys_listen_socket net/socket.c:1883 [inline] __sys_listen+0x1b7/0x230 net/socket.c:1894 __do_sys_listen net/socket.c:1902 [inline]

📍 영향받는 시스템

Linux kernel의 모든 버전 (fix 이전까지), 특히 SCTP 프로토콜을 활성화한 커널

⚔️ 공격 벡터

로컬 공격자가 SCTP 소켓을 통해 자동 바인딩을 실패하게 한 후 SCTP_REUSE_PORT 옵션을 설정하고 재차 listen()을 호출하여 NULL 포인터 역참조 유발

🛡️ 대응 방법

Linux 커널을 2024년 11월 이후 패치 버전으로 업데이트하거나, SCTP 모듈 언로드 시 커널 크래시 위험 제거

🔧 검증 코드

커널 버전과 sctp_listen_start 함수의 sk_state 복원 코드 확인; CLOSED로 설정되는 부분이 없으면 취약 버전

Shell / Script
cat /proc/version | grep -oE 'version [0-9.]+' && cat /usr/src/linux/net/sctp/socket.c 2>/dev/null | grep -A5 'sctp_listen_start' | head -3

📊 CVSS Vector String

CVSS Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H

💻 영향받는 소프트웨어

Linux Kernel