
이 리포지토리에는 CVE-2024-48208에 대한 PoC 개발과 관련된 모든 작업이 포함되어 있으며, 단순한 OOB(Out-of-bound) 읽기가 jail 탈출 및 손상된 접근 제어로 이어질 수 있는 방식을 보여줍니다.
이 저장소에는 단순한 OOB(Out-of-bound) 읽기가 어떻게 jail 탈출과 손상된 접근 제어로 이어질 수 있는지에 대한 PoC 개발과 관련된 모든 작업이 포함되어 있습니다.
원래 CVE 설명은 다음과 같습니다:

공식 저장소의 Github PR은 ls.c 파일의 domlsd() 함수가 OOB 읽기 취약점에 노출되는 방식을 자세히 설명합니다. base 포인터의 검증되지 않은 증가로 인해 포인터가 cmd 버퍼 외부의 버퍼를 가리킬 수 있으며, 이는 1053 및 1054 라인에서 확인할 수 있습니다.

GDB에서 버퍼를 디버깅하는 동안, OOB 읽기로 인해 사용자가 replybuf라고 하는 영역에 도달하게 된다는 것을 발견했습니다.
추가 분석을 통해 replybuf는 서버가 클라이언트에 제공한 응답으로 채워지는 버퍼임을 확인했습니다. replybuf는 ftpd.c 파일에 정의되어 있으며, 아래와 같습니다:

요약하면 다음과 같습니다:
base가 replybuf의 일부를 가리키게 됩니다.replybuf에는 클라이언트에 제공된 응답이 포함됩니다.그런데 원래 Github PR에서 CVE 작성자는 ls.c:1055의 다음 조건이 true를 반환하면 어떻게 되는지 고려하거나 시연하지 않았습니다.

우리는 이에 대해 고민하기 시작했고, 공격자가 chdir(base)가 true를 반환하도록 만들 수 있다면 domlsd() 함수가 파일 목록을 계속해서 나열한다는 사실을 확인했습니다.
팀은 시스템 관리자가 제한된 환경을 설정하는 상황에 대해 VMsetup.txt에 제공된 시나리오를 고려했으며, 다음과 같이 동작하는 익스플로잇을 구축하기로 결정했습니다:
제한된 사용자는 취약한 FTP 서버에 연결하고 자신의 자격 증명으로 로그인합니다.
nc <server-ip> <ftp-port>
USER <username>
PASS <password>
그런 다음 사용자는 EPSV 모드로 전환합니다.
EPSV
사용자는 반환된 포트 번호를 기록해 둡니다. 목록 결과를 읽으려면 해당 포트에 연결해야 하기 때문입니다.
이제 사용자는 파일 목록을 가져오려는 디렉터리를 가리키는 링크 파일을 생성할 수 있습니다(버퍼 오프셋에 따라 달라지며, 마지막으로 수신된 응답에 따라 쉽게 자동화할 수 있습니다).
사용자는 악성 명령을 전송합니다(선택한 오프셋에 따라 다름).
MLSD -........<more than 4096 to overflow the cmd buffer>
그런 다음 사용자는 앞서 기록한 포트 번호로 또 다른 연결을 설정하여 목록을 읽을 수 있습니다.
우리는 동일한 단계를 수행하는 자동화된 익스플로잇 스크립트 pure.py를 개발했습니다. 이 스크립트는 테스트를 위해 개발 과정에서 만든 다른 스크립트(dev_files 디렉터리에서 확인 가능)를 기반으로 합니다.
취약점을 재현하려면 VMsetup.txt에 있는 가상 머신 설정을 위한 단계별 가이드를 따를 수 있습니다.
취약한 인스턴스의 docker 컨테이너를 생성하려면 Dockersetup.txt를 참조하세요.