[방어] 분석 — CVE-2020-11738
Urgent mitigation of CVE-2020-11738 is required via WAF filtering and PHP environment hardening to prevent full site compromise through Directory Traversal in Duplicator plugin.
📋 요약
- 심각도 high · CVSS 7.5 · EPSS 0.97822 · 악용난이도 easy · KEV
🔍 공격 기법
공격자는 duplicator_download 또는 duplicator_init 엔드포인트의 file 파라미터에 ../ (Dot-Dot-Slash) 시퀀스를 주입하여 서버 내 임의 파일에 접근합니다. 이는 입력값에 대한 경로 검증 미비로 인해 발생하는 Path Traversal 취약점이며, 공격자는 웹 루트 디렉토리를 벗어나 시스템 설정 파일이나 애플리케이션 구성 파일에 접근하는 단계로 이어집니다.
악용 가능성: 본 취약점의 공격 난이도는 매우 낮으며, 실제 악용 가능성은 극도로 높습니다. CVSS 벡터가 AV:N/AC:L/PR:N/UI:N인 점을 통해 인증되지 않은 외부 공격자가 특수 조건 없이 네트워크를 통해 즉시 공격할 수 있는 환경임을 알 수 있습니다. 특히 EPSS 수치가 0.97822로 매우 높고 KEV(Known Exploited Vulnerabilities)에 등재되었다는 사실은, 이론적 위험을 넘어 이미 실제 공격 툴이 배포되어 광범위하게 악용되고 있음을 입증합니다. 공격 표면은 WordPress의 duplicator_download 및 duplicator_init 엔드포인트이며, 해당 기능의 file 파라미터가 핵심 트리거 지점입니다. 공격자는 이 파라미터에 ../와 같은 Directory Traversal 패턴을 주입하여 웹 루트 외부의 민감한 시스템 파일이나 설정 파일에 접근할 수 있습니다. 결과적으로 복잡한 사전 조건 없이 단순한 HTTP 요청만으로 데이터 유출이 가능하므로, 방어자 관점에서는 최우선 순위의 즉각적인 대응이 필요합니다.
💥 영향 분석
- 민감 정보 유출:
wp-config.php파일 읽기 성공 시 DB 접속 계정(ID/PW), 인증 키(Authentication Keys), Salt 값이 노출됩니다. - 권한 탈취 및 전체 장악: 유출된 DB 자격 증명을 통해 데이터베이스에 직접 접근하거나, Salt 값을 이용해 관리자 세션을 하이재킹하여 사이트 전체 권한을 탈취하는 Full Site Compromise로 확대될 수 있습니다.
🔗 관련 취약점·체이닝
- LFI (Local File Inclusion): 단순 파일 읽기를 넘어 PHP 실행 환경에 따라 서버 내부의 다른 스크립트를 실행시키는 형태로 체이닝될 가능성이 있습니다.
- Credential Leakage $\rightarrow$ RCE: DB 권한을 획득한 후, DB 내 특정 테이블 조작이나 관리자 계정 생성을 통해 원격 코드 실행(RCE) 단계로 진입할 수 있습니다.
🔎 탐지
본 취약점은 HTTP GET/POST 요청의 파라미터에 명확한 경로 탐색 패턴이 남으므로 웹 서버 액세스 로그 및 WAF 로그를 중심으로 탐지합니다.
-
로그 지표:
- 위치: Apache/Nginx Access Log, WAF Request Log
- 필드:
uri,query_string,request_body - 패턴:
/wp-content/plugins/duplicator/경로 내 특정 액션과../문자열의 조합
-
탐지 규칙 예시:
- 정규식 기반 탐지 (WAF/IDS):
/(duplicator_download|duplicator_init).*file=.*(\.\.\/|\%2e\%2e\%2f)/i - SIEM 의사코드:
sql1SELECT timestamp, source_ip, request_uri2FROM web_logs3WHERE (request_uri LIKE '%duplicator_download%' OR request_uri LIKE '%duplicator_init%')4 AND (query_string LIKE '%file=%' AND query_string LIKE '%../%')
- 인코딩 우회 탐지:
%2e%2e%2f,..%2f,..%5c등 URL 인코딩된 경로 탐색 패턴을 함께 모니터링합니다.
- 정규식 기반 탐지 (WAF/IDS):
-
오탐 튜닝 및 대응:
- 오탐 시나리오: 정상적인 플러그인 업데이트 과정이나 백업 파일 생성 시 내부적으로 유사한 경로 호출이 발생할 수 있습니다.
- 튜닝 방법: 요청의
User-Agent가 알려진 브라우저인지 확인하고, 동일 IP에서 단시간에 다수의 서로 다른 시스템 파일(예:/etc/passwd,wp-config.php) 접근 시도가 있는지 임계값을 설정하여 탐지합니다.
🛡️ 완화 방안
다중 소스 교차검증을 통해 일관성이 확인되었으며, 특히 EPSS 0.97822라는 실측값은 이론적 위험도를 넘어 실제 악용 가능성이 최고 수준임을 뜻합니다. KEV 등재 및 Exploit Easy 등급을 근거로 Immediate(즉시) 대응이 필요합니다.
-
즉시 (긴급 차단): WAF에서
../패턴 차단 규칙 적용- 내용:
duplicator_download,duplicator_init파라미터 내..문자열 포함 시 403 Forbidden 처리. - 난이도: 낮음 / 운영 영향: 거의 없음 / 검증:
curl을 이용한 경로 탐색 요청 차단 확인. 우선순위: 최상.
- 내용:
-
단기 (완화): PHP 환경 및 파일 시스템 권한 강화
- 내용:
php.ini에서open_basedir설정을 통해 PHP가 접근 가능한 디렉토리를 웹 루트로 제한하여 물리적 격리 구현.wp-config.php파일의 권한을 최소화(예: 400 또는 440)하고 소유권을 엄격히 관리.
- 난이도: 중간 / 운영 영향: 일부 플러그인 기능 제약 가능성 / 검증: PHP 스크립트를 통한 상위 디렉토리 접근 테스트. 우선순위: 높음.
- 내용:
-
근본 (해결): 플러그인 최신 버전 업데이트
- 내용: Duplicator $\ge$ 1.3.28 또는 Duplicator Pro $\ge$ 3.8.7.1로 업데이트.
- 난이도: 낮음 / 운영 영향: 다중 사이트 환경 시 버전 호환성으로 인한 서비스 중단 위험 존재(사전 스테이징 테스트 및 롤백 플랜 필수). / 검증:
wp-plugin버전 확인. 우선순위: 최상(근본 해결책).
[잔여 리스크] 패치 후에도 서버 내 다른 플러그인이나 테마에 유사한 Path Traversal 취약점이 존재할 수 있으므로, 특정 플러그인 패치보다는 open_basedir와 같은 런타임 격리 설정이 지속적인 방어 기제로 작동해야 합니다.
⚖️ 위험도 / 우선순위
- 조치: immediate (지금 즉시(24h 내))
- 근거: CVSS=7.5 · KEV · EPSS=0.97822 · exploit=easy · in_scope=None