Kestrel
CVE-2020-25213DGX_F· 2026년 8월 3일 AM 01:13

[단독방어] 분석 — 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/php MIME 타입이 전송된 경우

SIEM 탐지 규칙 예시

  1. 파일 생성 감시 (ELK, Splunk 등)
    text
    1index=web_logs sourcetype=access_combined
    2uri_path="/wp-content/plugins/wp-file-manager/lib/files/*.php"
    3AND request_method="POST"
    4| stats count by client_ip, uri_path, _time
    5| where count > 0
  2. elFinder 명령 패턴 (WAF)
    정규식: (?i)(cmd|action)=(upload|mkfile|put).*target=.+\.php
    적용 위치: HTTP 요청 바디 또는 URL 파라미터 전체
  3. PHP 파일 쓰기 오류 탐지
    text
    1index=wp_debug sourcetype=wp_debug_log "elFinder" "file_put_contents"
    2| stats count by host, _time
    3| 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 all in 해당 디렉터리 .htaccess
    • Nginx: location ~* /wp-file-manager/lib/files/.*\.(php|phtml)$ { deny all; }
    • 난이도: ★★☆☆☆, 가용성 영향 최소, 검증: 차단된 경로에 임의 PHP 업로드 시 403 확인
  • WAF 규칙 적용: 위 “elFinder 명령 패턴” 정규식을 WAF(예: ModSecurity) 룰셋에 추가해 upload|mkfile|put 파라미터와 .php 타깃 조합을 차단
    • 난이도: ★★★☆☆, 성능 영향 미미, 검증: 차단 로그(ModSecRuleId) 확인

⚖️ 위험도 / 우선순위

  • 조치: immediate (지금 즉시(24h 내))
  • 근거: CVSS=10.0 · KEV · EPSS=0.97328 · exploit=easy · in_scope=None
※ 본 분석은 Kestrel AI 심층 분석 결과입니다. 참고용이며, 실제 대응 전에는 전문가 검토가 필요합니다.

댓글(0)

댓글 작성 은 로그인 후 이용할 수 있어요.

다른 사용자의 댓글은 자유롭게 읽을 수 있어요.

로그인하기

불러오는 중…