
CVE-2025-51495에 대한 개념 증명 익스플로잇, Mongoose WebSocket의 mg_ws_cb 함수에서 정수 오버플로우가 발생하여 경계를 벗어난 메모리 접근 및 잠재적인 원격 코드 실행으로 이어집니다.
Mongoose의 최신 릴리스(v7.17)에서 확인된 보안 취약점을 보고합니다. 이 문제는 WebSocket 모듈, 특히 들어오는 WebSocket 프레임을 처리하는 mg_ws_cb 함수에 존재합니다.
해당 함수는 정수 오버플로에 취약하며, 특정 조작된 입력 하에서 메모리 경계를 벗어난 접근으로 이어질 수 있습니다. 이 조건은 원격 공격자가 메모리 손상 또는 애플리케이션 충돌을 유발하는 데 악용될 가능성이 있습니다.
공급업체마다 WebSocket 비즈니스 로직을 다르게 구현하기 때문에, 이 취약점은 잠재적으로 원격 코드 실행으로 이어질 수 있습니다.
세부 사항:
근본적인 취약점은 mg_ws_cb 함수에 있습니다.
클라이언트가 보낸 특별히 조작된 WebSocket 패킷은 이 시점에서 ofs=0을 설정할 수 있으며, 이는 ofs-1을 계산할 때 정수 오버플로를 유발하여 recv.buf의 길이보다 훨씬 큰 값을 초래합니다.
이후의 WebSocket 처리 함수에서 이 buf가 사용될 수 있으며, 길이가 실제 길이보다 크기 때문에 경계를 벗어난 접근 또는 프로그램 충돌이 발생할 수 있습니다.
취약점 트리거:
데모를 위해 프로젝트에 있는 기존 websocket 예제인 "websocket-server"를 선택했습니다. 컴파일 시 ASAN 검사만 추가했을 뿐 코드는 전혀 변경하지 않았습니다.
프로그램을 실행하고 특정 websocket 패킷을 전송하면 직접 충돌이 발생합니다.
PoC:
클라이언트로 프로젝트에 있는 기존 "websocket-client"를 선택했으며, 요청 전송을 위해 main.c의 fn 함수에 있는 두 매개변수만 수정했습니다.
수정된 프로그램을 실행하면 서버가 충돌합니다.