
CVE-2024-34832에 대한 개념 증명 익스플로잇: CubeCart 관리자 패널의 디렉토리 트래버설로, 조작된 `_g` 매개변수와 업로드된 `.inc.php` 파일을 통해 원격 코드 실행으로 이어집니다.
관리자 패널에서 _g 및 node와 같은 매개변수를 사용하여 .inc.php 파일을 포함하고 PHP 코드를 실행하는 경로를 구성합니다. 서버 어디든 .inc.php 파일을 업로드할 수 있는 악의적인 사용자는 경로 트래버셜 취약점을 악용하여 해당 파일을 포함시키고 악성 코드를 실행할 수 있습니다.
.inc.php 확장자를 포함한 파일을 업로드할 수 있는 능력 (예: FTP 접근, 동일 서버의 다른 애플리케이션에서 파일 업로드 가능, CubeCart 업로드 기능의 새로운 취약점 등).CubeCart가 설치된 동일한 서버에서 FTP 서버가 실행 중이고 사용자가 특정 위치에 파일을 업로드할 수 있다고 가정해 봅시다. 우리의 경우, FTP를 통해 업로드된 모든 파일은 /opt/FTP_Example에 저장된다고 가정합니다.
또한 이 사용자가 FTP를 통해 path_traversal.inc.php라는 파일을 업로드했으며, 그 내용은 다음과 같은 PHP 코드라고 가정합니다: <?php system('whoami;id;hostname;ls') ?>.

처음에는 이러한 파일을 업로드해도 위험이 없습니다. 실행되지 않을 뿐만 아니라 Apache와 같은 웹 서버의 디렉터리에 있지 않아 실행될 수 없기 때문입니다.
이 동일한 사용자는 CubeCart 관리자 패널에서 매우 제한된 권한을 가지고 있거나 전혀 권한이 없을 수도 있지만, 여전히 로그인할 수 있습니다. 예를 들어, 우리는 julio라는 사용자를 만들었는데, 이 사용자는 어떤 권한도 없습니다.

julio로 애플리케이션에 로그인한 후, _g 및 node 매개변수를 테스트하기 시작했습니다. 이 매개변수들이 경로 끝에 자동으로 .inc.php를 추가하고, 해당 파일에 대해 include()를 사용하여 PHP 코드를 실행하는 것으로 보였습니다.
아래와 같이 파일을 찾을 수 없을 때 다음 오류 메시지가 반환됩니다.

경로를 이동하여 서버의 다른 디렉터리(예: FTP 폴더)에 있는 .inc.php 파일에 도달할 수 있을지 궁금해지기 시작했습니다.
/opt/FTP_Example 폴더에 path_traversal.inc.php 파일이 있었기 때문에, 루트 디렉터리에 도달할 때까지 많은 /../../../를 추가해 보았고, 그런 다음 /opt/FTP_Example/path_traversal을 추가하자 애플리케이션이 자동으로 경로 끝에 .inc.php를 추가했습니다.
아래와 같이 코드가 성공적으로 실행되었습니다.

node 매개변수는 실제로 슬래시(/)를 이스케이프 처리하지만 _g는 그렇지 않음을 확인했습니다. 경로를 구성하는 데 사용되는 모든 매개변수는 경로 트래버셜 취약점을 방지하기 위해 슬래시를 이스케이프 처리해야 합니다.
이 취약점을 성공적으로 악용하기 위한 사전 조건이 있어 위험을 상당히 줄여주지만, 여전히 패치를 적용하는 것이 좋습니다. 참고 자료에서 CubeCart 제작자가 이 취약점을 어떻게 수정했는지 확인하고, 공식 릴리스에서 이미 패치될 때까지 자신의 CubeCart 인스턴스에 수정 사항을 적용할 수 있습니다.