[단독방어] 분석 — CVE-2020-25213
Critical remote file upload in wp-file-manager < 6.9 allows unauthenticated attackers to place and execute PHP payloads; immediate block of the vulnerable connector file is required.
📋 요약
- 심각도 critical · CVSS 10.0 · EPSS 0.97328 · 악용난이도 easy · KEV
🔍 공격 기법
wp‑file‑manager 플러그인의 elFinder 커넥터(connector.minimal.php 등)를 .php 확장자로 재명명한 뒤, upload, mkfile, put 명령을 통해 wp‑content/plugins/wp-file-manager/lib/files/ 디렉터리에 임의 PHP 코드를 저장한다. 공격자는 인증 없이 네트워크에서 직접 HTTP 요청을 전송해 파일을 업로드하고, 이후 해당 경로를 호출함으로써 원격 코드 실행(RCE)을 달성한다.
악용 가능성: 1. CVSS 벡터 AV:N/AC:L/PR:N/UI:N 은 공격자가 인터넷을 통해 바로 플러그인의 elFinder 커넥터 엔드포인트에 접근해, 복잡한 사전 준비 없이 단일 HTTP 요청만으로 악성 PHP 파일을 업로드할 수 있음을 의미합니다.
2. 네트워크 노출이 전제조건이며(AV:N), 공격 명령어(upload, mkfile, put)를 실행하는 데 필요한 단계가 최소 수준(AC:L)이라 누구라도 쉽게 시도할 수 있습니다.
3. 권한 요구가 없고(PR:N), 사용자 상호작용도 필요하지 않으므로(UI:N) 자동화 스크립트나 봇넷에 의해 대량 공격이 가능해 실질적인 위험도가 크게 증가합니다.
4. EPSS 0.97328이라는 매우 높은 확률과 KEV(Known Exploited Vulnerabilities) 등재는 이 취약점이 이미 2020년 여름에 실제로 악용된 사례가 있음을 입증하며, 이론적 심각도와 별개로 실전 위협임을 강력히 뒷받침합니다.
5. 공격 표면은 워드프레스 플러그인 wp-file-manager 의 /wp-content/plugins/wp-file-manager/lib/files/ 디렉터리와, 해당 디렉터리에 파일을 쓰는 elFinder 업로드 API(예: ?cmd=upload)가 외부에 노출된 URL 파라미터입니다.
6. 따라서 네트워크 경계에서 이 엔드포인트에 대한 접근이 가능하고, 적절히 검증되지 않은 파일 확장자를 .php 로 변경해 저장할 수 있는 구조가 존재한다면, 공격자는 거의 즉시 원격 코드 실행(RCE)을 달성할 수 있습니다.
💥 영향 분석
- 웹 서버 권한으로任意 PHP 스크립트 실행 → 워드프레스 전체 탈취·워터마킹·백도어 설치
- 데이터베이스 접근·관리자 계정 탈취 가능
- 악성 파일이 지속적으로 존재하면 검색 엔진 인덱싱·피싱 페이지 배포 등 2차 피해 발생
🔗 관련 취약점·체이닝
- 동일 플러그인 내 다른 파일 업로드 취약(CVE‑2021‑xxxx)과 결합 시 초기 침투 후 권한 상승 루트 확보 가능
- 워드프레스 코어의
wp_upload_dir()경로 노출 취약점과 연계하면 웹쉘 위치 탐지를 우회할 수 있음
🔎 탐지
로그 지표
- Web Server Access Log:
/wp-content/plugins/wp-file-manager/lib/files/경로에.php파일이 생성된 HTTP POST 요청- 필드:
request_method=POST,uri_path=/wp‑content/plugins/wp‑file‑manager/lib/files/*.php,status=200
- 필드:
- WordPress Debug Log (
debug.log):elFinder클래스에서upload/mkfile호출 시 발생하는Warning: file_put_contents()오류 메시지 - ModSecurity/Audit Log: 파일 업로드 파라미터(
cmd=upload,target=)와 함께application/octet-stream혹은text/phpMIME 타입이 전송된 경우
SIEM 탐지 규칙 예시
- 파일 생성 감시 (ELK, Splunk 등)
text1index=web_logs sourcetype=access_combined2uri_path="/wp-content/plugins/wp-file-manager/lib/files/*.php"3AND request_method="POST"4| stats count by client_ip, uri_path, _time5| where count > 0
- elFinder 명령 패턴 (WAF)
정규식:(?i)(cmd|action)=(upload|mkfile|put).*target=.+\.php
적용 위치: HTTP 요청 바디 또는 URL 파라미터 전체 - PHP 파일 쓰기 오류 탐지
text1index=wp_debug sourcetype=wp_debug_log "elFinder" "file_put_contents"2| stats count by host, _time3| where count > 0
오탐 튜닝
- 정상 플러그인 업데이트 시 자동으로
.php파일이 배포될 수 있음 →user_agent에 “WordPress‑Updater”가 포함된 경우 제외 - 개발 환경에서 테스트용 PHP 스크립트를 업로드하는 경우 →
client_ip를 내부 네트워크 IP 범위로 제한해 경보 레벨 낮춤
🛡️ 완화 방안
- 위험 파일 업로드 제한: 웹 서버 설정에서
wp-content/plugins/wp-file-manager/lib/files/경로에.php,.phtml등 실행 가능한 확장자 차단- Apache:
RemoveHandler .php .phtml+Deny from allin 해당 디렉터리.htaccess - Nginx:
location ~* /wp-file-manager/lib/files/.*\.(php|phtml)$ { deny all; } - 난이도: ★★☆☆☆, 가용성 영향 최소, 검증: 차단된 경로에 임의 PHP 업로드 시 403 확인
- Apache:
- WAF 규칙 적용: 위 “elFinder 명령 패턴” 정규식을 WAF(예: ModSecurity) 룰셋에 추가해
upload|mkfile|put파라미터와.php타깃 조합을 차단- 난이도: ★★★☆☆, 성능 영향 미미, 검증: 차단 로그(
ModSecRuleId) 확인
- 난이도: ★★★☆☆, 성능 영향 미미, 검증: 차단 로그(
⚖️ 위험도 / 우선순위
- 조치: immediate (지금 즉시(24h 내))
- 근거: CVSS=10.0 · KEV · EPSS=0.97328 · exploit=easy · in_scope=None