🇰🇷 한글 설명
Linux 커널의 IPVS 구성 요소에서 IPv6 확장 헤더를 사용하는 SCTP 패킷 처리 시 오프셋 계산 오류가 발생합니다. 이로 인해 SCTP 상태 머신이 잘못된 위치에서 데이터를 읽어 핸드셰이크가 완료되지 않았음에도 연결 상태를 잘못 업데이트할 수 있습니다.
💡 쉬운 설명
네트워크 패킷의 위치를 잘못 계산하여, 연결이 아직 안 되었는데도 연결된 것처럼 착각하게 만드는 보안 결함입니다. 이로 인해 시스템의 연결 관리 기능이 오작동할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
ipvs: use parsed transport offset in SCTP state lookup
set_sctp_state() reads the SCTP chunk header again in order to drive the
IPVS SCTP state table. For IPv6 it computes the offset with
sizeof(struct ipv6hdr), while the surrounding IPVS code uses iph.len from
ip_vs_fill_iph_skb(), where ipv6_find_hdr() has already skipped
extension headers and found the real transport header.
This makes the state machine read from the wrong offset for IPv6 SCTP
packets that carry extension headers. For example, an INIT packet with an
8-byte destination options header can be scheduled correctly by
sctp_conn_schedule(), but set_sctp_state() reads the first byte of the
SCTP verification tag as a DATA chunk type. The connection then moves
from NONE to ESTABLISHED instead of INIT1, gets the longer established
timeout, and updates the active/inactive destination counters
incorrectly. This happens even though the SCTP handshake has not
completed.
Use the parsed transport offset passed down from ip_vs_set_state() for
the SCTP chunk-header lookup. For IPv4 and IPv6 packets without
extension headers this preserves the existing offset.
📍 영향받는 시스템
Linux kernel (IPVS module using SCTP over IPv6 with extension headers)
⚔️ 공격 벡터
IPv6 확장 헤더를 포함한 특수하게 조작된 SCTP 패킷 전송
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이후인지 확인