[하루한줄] CVE-2024-47051: Mautic의 임의 파일 업로드로 인한 RCE
URL
Target
- Mautic < 5.2.3
Explain
Mautic은 오픈 소스 마케팅 자동화 소프트웨어입니다. 오늘은 이 Mautic에서 발생한 임의 파일 업로드로 인한 RCE 취약점에 대해 살펴보겠습니다.
업로드된 파일 처리
이 취약점은 사용자가 asset
을 추가/편집할 때 파일 업로드 기능의 보안 과정에서 발생하는 논리적 결함으로 인해 발생합니다. 파일 업로드 기능은 추가/편집 동작에 대해 각각 public function newAction
및 public function editAction
으로 정의됩니다. 위 그림에서 볼 수 있듯이 해당 함수에서는 업로드된 파일을 처리하는 로직이 있고 파일을 디스크에 쓰는 문제의 함수 preUpload()
및 upload()
를 호출합니다.
preUpload 함수
preUpload()
함수는 디스크에 저장될 최종 파일의 이름과 확장자를 결정합니다. 파일 이름은 SHA1 해시로 생성되며, 확장자를 결정하는 과정이 핵심입니다. 먼저 MIME 유형을 기반으로 guessExtension()
함수를 통해 확장자를 추정하지만, 실패할 경우 사용자가 제공한 originalFileName
의 확장자를 사용합니다. 공격자는 이를 악용해 허용된 확장자(예: .jpg)로 PHP 코드를 업로드한 후, 해당 파일 요청 시 originalFileName
의 확장자를 .php로 변경하여 악성 코드를 실행할 수 있습니다. 이때 guessExtension()
은 NULL을 반환하고, 최종적으로 .php 확장자가 적용됩니다.
upload 함수
마지막으로 upload()
함수는 정의된 업로드 디렉토리(default: media/files/)에서 preUplaod()
함수에서 제공한 파일 이름과 확장자를 사용하여 파일을 디스크에 저장하고 임시 파일을 삭제하여 allowed_extensions
구성 변수에서 제공하는 필터를 우회합니다.
취약점 요약
- 공격자는
shell1.png
라는 파일을 업로드합니다. preUpload()
함수에서 MIME 유형을 기반으로guessExtension()
을 호출하지만, 실패하여NULL
을 반환합니다.- 따라서 코드가
originalFileName
의 확장자(.php
)를 사용하여 최종 파일명이shell1.php
가 됩니다.- 이때, 공격자는
asset
저장 요청을 보낼 때.php
확장자로originalFileName
을 가로채서 수정해야 합니다.
- 이때, 공격자는
- 공격자가 php 파일에 접근 가능하고 www-data에 대상 디렉토리 및 파일에 대한 읽기-쓰기 권한이 있으면 RCE 공격이 가능합니다.
위 취약점은 allowed extensions
에서 allowd_mimetypes
로 구체적으로 필터링을 추가하는 등으로 패치되었습니다. 자세한 내용은 링크를 확인해주세요.
Reference
https://github.com/mautic/mautic
https://github.com/mautic/mautic/security/advisories/GHSA-73gx-x7r9-77x2
https://nvd.nist.gov/vuln/detail/CVE-2024-47051
https://github.com/mautic/mautic/commit/75bc488ce98b9c8ec01114984049fc1c42c0cae5
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.