🇰🇷 한글 설명
PJSIP 2.17 및 이전 버전의 OpenSSL 및 GnuTLS 백엔드에서 DNS SubjectAltName 값을 처리할 때 NUL 바이트를 잘못 처리하여 발생하는 취약점입니다. 공격자가 신뢰할 수 있는 인증서를 사용하여 대상 서버를 사칭할 수 있으며, 이를 통해 SIP 세션을 가로채고 REGISTER 자격 증명을 탈취할 수 있습니다.
💡 쉬운 설명
인증서의 이름을 확인하는 과정에서 글자 수를 잘못 계산하는 오류가 있어, 가짜 인증서로 진짜 서버인 척 속일 수 있는 문제입니다. 이를 통해 해커가 사용자의 로그인 정보를 훔쳐갈 위험이 있습니다.
🇺🇸 원문 (English)
PJSIP is a free and open source multimedia communication library written in C. In 2.17 and earlier, the OpenSSL and GnuTLS backends in pjlib/src/pj/ssl_sock_ossl.c and pjlib/src/pj/ssl_sock_gtls.c copy DNS SubjectAltName values with string functions that recalculate their length and truncate an embedded NUL byte. With server verification enabled through --tls-verify-server for the PJSIP TLS/SIPS transport, a certificate containing a DNS SubjectAltName formed from the target hostname prefix followed by an embedded NUL and an attacker-controlled suffix can therefore be accepted for the prefix hostname. An attacker who possesses such a certificate from a trusted issuer and can intercept the connection can impersonate the target server, complete the SIP session, and receive REGISTER credentials. The mbedTLS backend is not affected because it preserves the explicit string length. No fixed version is available as of this review.
📍 영향받는 시스템
PJSIP 2.17 및 이전 버전 (OpenSSL 및 GnuTLS 백엔드 사용 시)
⚔️ 공격 벡터
신뢰할 수 있는 기관에서 발급받은 특수하게 조작된 인증서를 사용하여 중간자 공격(MITM) 수행
🛡️ 대응 방법
현재 수정 버전이 없으므로 mbedTLS 백엔드를 사용하거나, 보안 패치가 나올 때까지 TLS 서버 검증 설정을 주의 깊게 관리해야 함
🔧 검증 코드
출력된 PJSIP 버전이 2.17 이하인지 확인하여 취약 여부를 판단합니다.
pkg-config --modversion libpjproject 2>/dev/null || echo 'PJSIP not found'