
EventPrime 플러그인에서의 인증되지 않은 임의 파일 업로드
면책 조항: 이 저장소는 교육 목적 및 윤리적 공개 전용으로 생성되었습니다. 이 취약점은 공급업체에 책임감 있게 보고되었으며 패치되었습니다. 적절한 권한 없이 시스템을 악용하기 위해 이 정보를 사용하지 마십시오.
EventPrime WordPress 플러그인(버전 <= 4.2.8.1)에서 인증되지 않은 임의 파일 업로드 취약점이 발견되었습니다. 이 결함으로 인해 인증되지 않은 방문자는 WordPress uploads 디렉터리에 파일을 직접 업로드하고 미디어 라이브러리에 첨부 파일 레코드를 생성할 수 있습니다.
이 취약점은 특정 AJAX 엔드포인트가 nopriv(공개 액세스 가능)로 명시적으로 등록되어 있고 권한 검사와 적절한 파일 콘텐츠 검증이 모두 부족하기 때문에 존재합니다. 공격자는 이 엔드포인트를 악용하여 저장 공간을 고갈시키고, 미디어 라이브러리를 스팸으로 채우거나, 이미지로 위장한 악성 페이로드를 업로드할 수 있습니다.
<= 4.2.8.1근본 원인은 안전하지 않은 AJAX 후크 등록과 불충분한 파일 검증의 조합입니다.
1. 안전하지 않은 AJAX 엔드포인트 등록:
includes/class-eventprime-event-calendar-management.php에서 플러그인은 upload_file_media 작업을 등록합니다. 약 557행에서 작업 맵에 {upload_file_media: true}를 설정하는데, 여기서 true는 _nopriv 지원을 나타냅니다. 결과적으로 gwp_ajax_nopriv_ep_upload_file_media 후크가 등록되어 엔드포인트를 누구나 사용할 수 있게 됩니다.
2. 누락된 권한 및 논스 검사:
upload_file_media() 핸들러 함수(includes/class-ep-ajax.php, 1659-1697행)는 업로드 권한을 확인하기 위해 current_user_can()을 사용하지 않으며 보안 논스(nonce)도 검증하지 않습니다.
3. 결함이 있는 검증 로직:
핸들러는 클라이언트가 제공한 파일 이름을 기반으로 파일 확장자(예: jpg/jpeg/png/gif)만 검증합니다(1661-1664행). getimagesize() 또는 wp_check_filetype_and_ext()와 같은 강력한 서버 측 콘텐츠 검증을 수행하지 않습니다. 이는 harmless.jpg로 이름이 바뀐 악성 스크립트나 기타 파일 유형이 WordPress가 메타데이터 생성을 시도하기 전에 디스크에 기록될 수 있음을 의미합니다.
4. 지속성:
파일은 move_uploaded_file()을 사용하여 wp_upload_dir()['path']에 직접 저장되고 wp_insert_attachment()를 통해 WordPress 첨부 파일이 생성됩니다.
images를 실행하도록 잘못 구성된 경우)과 결합하면 원격 코드 실행(RCE)으로 이어질 수 있습니다.1. 페이로드 준비: 로컬 머신에 poc.jpg라는 샘플 이미지 파일을 생성합니다.
2. 요청 실행: 세션 쿠키 없이 공개 AJAX 엔드포인트로 multipart/form-data POST 요청을 전송합니다:
curl -i \
-F "[email protected];filename=poc.jpg" \
"http://TARGET_SITE/wp-admin/admin-ajax.php?action=ep_upload_file_media"
3. 응답 확인: 서버는 200 OK로 응답하고 새로 생성된 첨부 파일 ID를 포함한 JSON 객체를 반환합니다:
{"success":true,"data":{"attachment_id":117}}
4. 검증:
wp-content/uploads/<year>/<month>/poc.jpg에 저장됩니다.이 취약점을 해결하려면 개발자는 다음을 수행해야 합니다:
nopriv 선언을 제거합니다.current_user_can('upload_files')를 사용하여 권한이 있는 사용자만 업로드할 수 있도록 합니다.check_ajax_referer()를 구현합니다.wp_handle_upload()와 같은 전통적인 WordPress 이미지 처리 함수를 사용합니다.