
PJSIP cve-2026-25994 버퍼 오버플로 POC
CVE-2026-25994는 pjsip ≤ 2.16의 ICE(Interactive Connectivity Establishment) 구현, 특히 PJNATH 구성 요소에 영향을 미치는 스택 기반 버퍼 오버플로 취약점입니다.
취약점은 다음 함수에 존재합니다:
pj_ice_sess_create_check_list()
다음 위치에 있습니다:
pjnath/src/pjnath/ice_session.c
이 문제는 ICE 사용자 이름을 구성할 때 안전하지 않은 문자열 처리로 인해 발생합니다:
char buf[128]; // Fixed-size stack buffer
username.ptr = buf;
pj_strcpy(&username, rem_ufrag); // No bounds checking
pj_strcat2(&username, ":");
pj_strcat(&username, &ice->rx_ufrag);
rem_ufrag는 SDP 속성에서 직접 가져옵니다:
a=ice-ufrag:
128바이트 스택 버퍼로 복사하기 전에 길이 검증이 수행되지 않습니다.
이로 인해 공격자가 스택을 오버플로하고 잠재적으로 다음을 덮어쓸 수 있습니다:
반환 주소
스택 프레임
카나리/정렬 데이터
긴 ice-ufrag를 포함한 악의적인 SIP INVITE는 오버플로를 트리거합니다.
안정적인 악용은 약 130바이트 이상의 페이로드에서 발생합니다.
실제로는 약 500바이트 이상(예: 520)이 일관된 크래시 동작을 제공합니다.
✅ 취약: pjsip ≤ 2.16
❌ 수정됨: pjsip ≥ 2.17
이 수정은 적절한 경계 검사를 도입합니다:
if (rem_ufrag->slen >= MAX_USERNAME_LEN ||
(rem_ufrag->slen + ice->rx_ufrag.slen + 1) >= 512)
{
return PJ_ETOOBIG;
}
세그멘테이션 오류를 통한 서비스 거부(DoS)
다음에 따라 원격 코드 실행(RCE) 가능성:
스택 보호(ASLR, NX, 카나리)
메모리 레이아웃
악용 난이도
1.200.000대의 시스템이 영향받음
Shodan link : https://www.shodan.io/search?query=pjmedia
제공된 PoC는 과도하게 큰 ice-ufrag를 포함하는 조작된 SIP INVITE를 전송하여 오버플로를 트리거합니다.
완전 동기식(asyncio 없음)
명령줄에서 구성 가능
자동 재시도
현실적인 SDP 페이로드
시간 초과를 통한 크래시 감지
ICE를 활성화한 상태로 pjsua를 시작합니다:
pjsua-x86_64-unknown-linux-gnu --use-ice --local-port=5060 --log-level=5 --no-tcp --auto-answer=200
python3 pjsip.py -i <target_ip> -p 5060 -a 3
Arguments
Option Description Default
-i, --ip Target IP address 127.0.0.1
-p, --port SIP port 5060
-a, --attempts Number of attempts 3
Expected Behavior
Vulnerable Target
No response from server
pjsip ≥ 2.17로 업그레이드
SDP 속성에 대한 입력 검증 적용
스택 보호 사용:
스택 카나리 ASLR NX(비실행 스택)
이 개념 증명(PoC)은 교육 및 보안 연구 목적으로만 제공됩니다.
소유하지 않았거나 테스트에 대한 명시적 허가가 없는 시스템에 이 코드를 사용하지 마십시오.
V.Nos