Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2024-47051 — Mautic < 5.2.3 인증된 RCE | Kitploit
도구/GitHubGitHub/mallo-m/cve-2024-47051
Vulnerability AnalysisCode AnalysisExploitationWeb Application ExploitationPenetration TestingPayload Development
GitHubmallo-m/cve-2024-47051

CVE-2024-47051

Mautic < 5.2.3 인증된 RCE

저장소 보기
51년 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

요약

Asset 편집 기능에서 업로드된 파일의 콘텐츠, 유형 및 확장자에 대한 부적절한 검증으로 인해 인증된 공격자가 웹 디렉터리 내에 임의의 PHP 코드를 작성하고 해당 파일이 기록된 위치를 찾을 수 있습니다. 이로 인해 원격 코드 실행(RCE)이 발생합니다.

경로 순회(path traversal)를 통해 이 기능을 악용하여 웹 사용자가 수정 권한을 가진 파일 시스템의 모든 디렉터리를 재귀적으로 삭제할 수도 있습니다.

세부 정보 - RCE

/assets/view/{assetID} 경로를 통해 Asset을 편집할 때 에셋의 파일을 변경할 수 있는 기능이 제공됩니다.

새 파일 업로드는 궁극적으로 app/Bundles/AssetBundle/Controller/AssetController.php 내부의 다음 함수를 호출합니다:

public function editAction(Request $request, UploaderHelper $uploaderHelper, AssetModel $model, $objectId, $ignorePost = false)

업로드 로직은 다음에서 확인할 수 있습니다:

root@kitploit:~
        if (!$ignorePost && 'POST' == $method) {
            $valid = false;
            if (!$cancelled = $this->isFormCancelled($form)) {
                if ($valid = $this->isFormValid($form)) {
                    $entity->setUploadDir($this->coreParametersHelper->get('upload_dir'));
                    $entity->preUpload();
                    $entity->upload();

특히, 디스크에 실제 파일 쓰기를 처리하는 preUpload() 및 upload() 메서드에 관심이 있습니다. 첫 번째 결함은 app/Bundles/AssetBundle/Entity/Asset.php의 preUpload()에 있습니다. 구현상 임의의 파일 확장자를 지정할 수 있으므로(따라서 일반적으로 allowed_extensions 배열이 제공하는 보호를 우회할 수 있습니다):

root@kitploit:~

            $filename  = sha1(uniqid(mt_rand(), true));
            $extension = $this->getFile()->guessExtension();

            if (empty($extension)) {
                // get it from the original name
                $extension = pathinfo($this->originalFileName, PATHINFO_EXTENSION);
            }

            $this->path = $filename.'.'.$extension;

$extension = $this->getFile()->guessExtension(); 줄은 .php로 끝나고 <?php 태그로 시작하는 콘텐츠를 제공하면 NULL을 반환합니다. 따라서 empty($extension) 검사가 true로 평가되고, 파일 확장자는 pathinfo() 호출을 통해 추출되므로 임의의 콘텐츠와 확장자를 가진 임시 파일을 업로드할 수 있습니다. 파일 이름은 sha1()로 생성되므로 실제 이름을 제어할 수 없습니다.

그런 다음 후속 upload() 메서드 내에서 파일은 다음 호출을 통해 웹 디렉터리의 디스크에 실제로 기록됩니다:

$this->getFile()->move($this->getUploadDir(), $this->path);

우리의 임의 확장자($this->path 변수에 포함됨)를 사용합니다. 그런 다음 Asset 세부 정보 페이지(/assets/view/{assetId})를 새로 고치면 Local filename 테이블 항목 아래에서 파일 이름을 확인할 수 있습니다.

참고: 새 Asset을 생성할 때 전송되는 요청을 변경해도 동일하게 작동합니다. 이 경우 newAction() 함수가 호출되지만 로직은 동일하며 결함은 여전히 preUpload() 및 upload() 메서드에 있습니다.

PoC - RCE

PoC는 앞으로 약 한 달 동안 공개되지 않습니다.

이는 이 소프트웨어에 의존하는 조직이 스크립트 키디들이 시스템을 망가뜨릴 걱정 없이 패치할 시간을 주기 위한 것입니다.

그 후 이 저장소는 전체 익스플로잇 스크립트와 증명으로 업데이트됩니다. 어차피 이 페이지에는 이미 충분한 정보가 있습니다.

세부 정보 - 임의 파일 삭제

임시 업로드를 검증할 때(/s/assets/new 또는 /s/assets/edit/{assetId} 통해), 임시 파일을 저장하는 디렉터리는 요청 종료 시 재귀적으로 삭제됩니다. 임시 디렉터리 이름을 보관하는 매개변수는 경로 순회 공격에 취약하여, 인증된 공격자가 웹 사용자에게 해당 권한이 있으면 시스템의 모든 디렉터리를 삭제할 수 있습니다. 이로 인해 데이터 손실이 발생하거나, 서버가 root 사용자로 실행되는 경우 전체 파일 시스템이 파괴될 수도 있습니다.

PoC - 임의 파일 삭제

아래 사용된 엔드포인트를 통해 시스템에 존재하는 임의의 파일을 지정하세요. 파일이 존재하면 서버는 해당 파일이 저장된 디렉터리를 삭제하려 시도합니다.

영향

서버 장악 서비스 거부 데이터 손실

타임라인

  • 2024년 10월 14일 : Mautic 팀에 첫 연락 및 권고 전송
  • 2024년 11월 12일 : 개발 팀에 익스플로잇 스크립트 및 수정 제안 전송
  • 2024년 12월 13일 : 두 번째 연락
  • 2025년 1월 21일 : 배포 준비 완료된 패치
  • 2025년 2월 25일 : CVE 배정 및 공개
도구 다운로드