🇰🇷 한글 설명
SIPSorcery(C#/.NET WebRTC·SIP·VoIP 라이브러리)의 10.0.14 이전 버전에서 SctpSackChunk.ParseChunk가 SCTP SACK 청크의 numGapAckBlocks 및 numDuplicateTSNs 필드를 청크 길이와 대조하지 않고 읽습니다. 협상된 WebRTC 피어가 잘못된 SACK 청크를 보내면 IndexOutOfRangeException이 발생해 SCTP 연결과 모든 데이터 채널이 영구적으로 종료될 수 있습니다.
💡 쉬운 설명
인터넷 전화나 화상 통신에 쓰이는 소프트웨어 부품의 결함으로, 상대방이 조작된 데이터를 보내면 통신 연결이 강제로 끊어집니다. 버전을 10.0.14 이상으로 올리면 문제가 해결됩니다.
🇺🇸 원문 (English)
SIPSorcery is a WebRTC, SIP, and VoIP library for C# and .NET. Prior to 10.0.14, SctpSackChunk.ParseChunk reads the numGapAckBlocks and numDuplicateTSNs fields from an attacker-controlled SCTP SACK chunk without checking that the corresponding entries fit the declared chunk length. A negotiated WebRTC peer can send a checksum-valid malformed SACK chunk that drives the parser beyond the 262144-byte receive buffer. The resulting IndexOutOfRangeException bypasses the recoverable ApplicationException handler in RTCSctpTransport.DoReceive, causing the generic handler to exit the dedicated receive loop and permanently terminate the SCTP association and all data channels. This issue is fixed in 10.0.14.
📍 영향받는 시스템
SIPSorcery 라이브러리 10.0.14 미만 버전을 사용하는 C#/.NET 기반 WebRTC·SIP·VoIP 애플리케이션
⚔️ 공격 벡터
WebRTC 통신이 협상된 상태에서 공격자가 체크섬이 유효하지만 형식이 잘못된 SCTP SACK 청크를 전송하여 수신 루프를 종료시킴
🛡️ 대응 방법
SIPSorcery 패키지를 10.0.14 이상으로 업데이트
🔧 검증 코드
출력된 SIPSorcery 버전이 10.0.14 미만이면 취약하며, 해당 패키지가 설치되어 있지 않으면 영향을 받지 않습니다.
dotnet list package 2>/dev/null | grep -i sipsorcery