
MitraStar GPT-2741GNAC 라우터의 OS 명령 주입(CVE-2023-33381)에 대한 개념 증명 익스플로잇입니다. 진단 ping/traceroute 기능을 통한 제한된 셸 우회를 시연하며, 취약한 CGI 바이너리에 대한 리버스 엔지니어링 분석을 포함합니다.
SSH로 로그인하자마자 사용 가능한 명령어와 옵션이 제한되어 있음을 알게 되었습니다. 확실히 제한된 셸 환경에 갇혀 있다는 것이 분명해졌습니다.

몇 가지 알려진 취약점을 탐색한 후, 새로운 취약점을 찾기 위해 깊이 파고들기로 결정했습니다. 먼저 관리 포털에 로그인하여 OS 명령어 주입으로 이어질 수 있는 다양한 기능들을 테스트하기 시작했습니다. 진단 메뉴에서 ping 및 traceroute 명령어를 사용하여 연결을 테스트할 수 있는 특정 기능을 발견했습니다.


그래서 명령어에 ";" 문자를 추가하는 교활한 방법을 시도해보기로 했습니다. "cat /etc/passwd"를 실행했는데, 그 결과는? 명령어가 성공적으로 실행되었습니다.

한 걸음 더 나아가 "sed" 명령어를 실행하여 "/etc/passwd" 파일의 제한된 셸 항목을 완전한 대화형 셸로 대체했습니다.

아래 이미지에서 명확히 볼 수 있듯이, 제가 수행한 수정 덕분에 로그인하여 "uname" 및 "cat"과 같은 명령어를 자유롭게 실행할 수 있게 되었습니다.

완전한 관리자 권한을 가지고 있었기 때문에 취약한 구성 요소를 밝혀내기 위해 더 깊이 파고들지 않을 수 없었습니다. 브라우저 요청을 검사하는 동안 흥미로운 점을 발견했습니다. "ping.cgi"와 "DiagGeneral.cgi"라는 두 개의 CGI 파일이 요청에 의해 대상이 되고 있었습니다.

파일을 확보한 후 Ghidra를 사용한 리버스 엔지니어링을 재미있게 해봤습니다. 흥미로운 부분은 "ping.cgi" 파일에서 PingIPAddr 매개변수가 사용자 입력에서 적절한 검증 없이 직접 가져와지고 있다는 점입니다. 사용자 입력에서 가져온 PingIPAddr 매개변수는 tcapi_set 함수를 사용하여 나중에 사용하기 위해 저장되었습니다.

마지막으로, DiagGeneral.cgi 파일에서 PingIPAddr 매개변수가 tcapi_get 함수를 사용하여 검색된 후, 검증 없이 system 함수에 직접 사용되었습니다. 이 결함은 명령어 주입 취약점을 만들어 시스템에서 무단으로 임의의 명령어를 실행할 수 있게 합니다.
