
CVE-2024-55187 상세 권고문으로, phpIpam의 원격 코드 실행 취약점에 대한 개념 증명을 포함하며, 경로 중독(PATH Poisoning)과 PHAR 파일 업로드를 악용하여 서버 장악을 달성합니다.
민감한 관리 매개변수가 충분히 정화되지 않아, 공격자가 시스템 바이너리 경로를 오염시킬 수 있습니다.
그러면 공격자는 위험한 CSV 파일을 업로드할 수 있으며, 이 파일은 PHP의 exec() 호출에 의해 평가될 셸 메타문자를 포함한 PHAR 아카이브로 취급되어 원격 코드 실행(RCE)을 초래할 수 있습니다.
심각 - 9.1 - CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H
파일 functions/classes/class.Scan.php에서 다음과 같은 코드 구조를 볼 수 있습니다:

exec() 호출의 첫 번째 매개변수는 $ping_path 매개변수에 직접적으로 의존하며, 이는 관리자 설정 패널에서 자유롭게 수정할 수 있습니다:

공격자가 충족해야 할 유일한 조건은 ping_verify_path 함수가 false를 반환하지 않도록 하는 것입니다. 이 메서드의 정의는 다음과 같습니다:

이 메서드는 오직 PHP 네이티브 함수 file_exists()에만 의존합니다. 이 특정 함수는 ZIP 파일(확장자 .zip이 필요하지 않음)을 전달하고 ZIP 아카이브의 구조로 들어가는 것을 지원할 수 있습니다. 예를 들어:

따라서, 공격자가 서버에 유효한 ZIP/PHAR 아카이브를 업로드할 수 있고, 그 아카이브에 셸 메타문자를 포함한 이름의 파일이 있다면, file_exists() 검사를 우회하여 해당 메타문자가 exec() 호출에 의해 평가되게 할 수 있습니다.
인증된 공격자는 'XLS / CSV 서브넷 가져오기' 기능을 통해 파일을 업로드할 수 있습니다:

해당 파일은 유효한 CSV 파일일 필요가 없습니다. 가져오기가 실패하더라도 서버에서 파일이 삭제되지 않습니다. 또한 import-verify.php 스크립트를 통해 파일이 저장될 위치를 알 수 있습니다:

공격자는 원격 코드 실행(RCE) 공격을 실행하기 위한 모든 전제 조건을 알고 있습니다:
악성 아카이브는 다음과 같이 제작할 수 있습니다:

https://www.youtube.com/watch?v=oMvyfFrlRAs