CVE-2025-65346 – laravel-file-manager v3.3.1의 UnZip 함수에서 발생하는 인증된 경로 탐색으로 인한 임의 파일 쓰기
🧭 개요
영향을 받는 애플리케이션의 unzip/extract 기능에서 발생하는 경로 탐색 취약점으로 인해 공격자는 압축 해제 중 임의의 파일 시스템 위치에 파일을 쓸 수 있습니다. 추출 루틴이 ZIP 항목 내부의 대상 경로를 검증하지 않기 때문에, 공격자는 경로 탐색 시퀀스(예: ../../routes) 또는 절대 경로가 포함된 ZIP 아카이브를 조작할 수 있습니다. 애플리케이션이 이를 처리하면 해당 파일은 실행 중인 프로세스의 권한으로 지정된 위치에 직접 추출됩니다.
이 결함은 기존 파일을 덮어쓰기, 실행 가능한 페이로드 삽입, 애플리케이션 동작 수정 등에 악용될 수 있으며, 잠재적으로 원격 코드 실행으로 이어질 수 있습니다.
🧱 영향을 받는 구성 요소
- 프로젝트:
laravel-file-manager
- 구성 요소: zip/archiving Functionf
- 영향 버전: v3.3.1 이하
🎯 공격 벡터
- 공격자는 애플리케이션의 unzip 엔드포인트에 ZIP 아카이브를 업로드하거나 제공합니다(구성에 따라 인증이 필요할 수도 있고 필요하지 않을 수도 있습니다).
- UNZIP 요청 페이로드를 조작하여 ../../routes와 같은 디렉터리 탐색 시퀀스를 포함시킵니다.
- 백엔드 추출 로직은 검증 없이 이러한 경로를 확인하고 해당 위치에 파일을 직접 씁니다.
- 파일 이름이 충돌하면 기존 파일이 조용히 덮어써질 수 있습니다.
- 공격자는 애플리케이션 파일을 교체하거나, 웹 셸을 작성하거나, 중요한 구성 파일을 수정할 수 있는 능력을 얻습니다.
💥 영향
- 임의 파일 쓰기: 애플리케이션 사용자(예: www-data)가 쓸 수 있는 모든 위치에 파일을 쓸 수 있습니다.
- 파일 덮어쓰기: 공격자는 라우트, 컨트롤러 또는 구성 파일을 포함한 정상적인 애플리케이션 파일을 덮어쓸 수 있습니다.
- 원격 코드 실행: 공격자는 PHP, JSP 또는 기타 웹에서 실행 가능한 페이로드를 웹 루트에 작성하여 완전한 코드 실행을 달성할 수 있습니다.
- 애플리케이션 손상: index.php와 같은 진입점을 수정하면 사이트 로직이 변경되거나 지속적인 백도어가 삽입될 수 있습니다.
- 권한 상승(간접적): config/env 파일을 덮어쓰면 비밀 정보가 노출되어 추가적인 수평 이동이 가능해질 수 있습니다.
심각도: Critical
기본 점수: 9.1
벡터: CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
🛡️ 권장 수정 사항
- 정식 경로 검증 구현: 요청된 파일 경로를 정규화하고 프로젝트의 지정된 스토리지 루트로의 엄격한 제한을 적용합니다.
- 경로 탐색 시퀀스(../, %2e%2e/, 중첩 탐색)를 포함하는 경로를 거부합니다.
- 서버 측 허용 목록(allowlist) 로직을 적용합니다.
- 공급업체가 이 경로 탐색 취약점을 해결하는 패치를 릴리스하면 패치된 버전으로 업데이트합니다.
🙏 크레딧
발견 및 보고자: Theethat Thamwasin