XSS(Cross Site Scripting) 취약점 - WordPress CM-AD-Changer 플러그인 (1)

by Dreamer

   개요
CM-AD-Changer 플러그인은 워드프레스 웹 페이지에 광고 배너를 삽입하여 게시하는 플러그인이다. [그림 1-1]은 해당 플러그인 적용 후 "I HAVE A DREAM!"이라는 광고 배너 이미지를 추가한 페이지이다.
그림 1-1 CM-AD-Changer 플러그인 적용 페이지

해당 플러그인의 1.7.7 버전은 XSS 취약점이 존재하며 취약점의 자세한 내용과 Proof Code는 WPScan Vulnerablity Database에서 확인 가능하다. 해당 취약점은 관리자 페이지에서 광고 배너 이미지를 적용할 때 입력한 스크립트가 예외처리 없이 데이터베이스에 저장되면서 지속적으로 XSS 공격에 노출되는 Stored XSS이다.

취약점 위치가 관리자 페이지에 존재하기 때문에 일반 사용자가 쉽게 해당 취약점을 악용할 수 없지만 CSRF 공격을 활용하면 관리자 아이디와 비밀번호를 모르더라도 피해를 줄 수 있다.
그림 1-2 해당 플러그인 XSS 취약점 정보

이번 포스팅은 해당 플러그인의 XSS 취약점 확인 및 CSRF 공격 방법까지 다룬다. 그리고 대응 방안은 시큐어 코딩을 직접 적용하여 보완하고 패치 버전의 소스 코드를 확인하여 패치 전 코드와 비교한다.


   환경 구성
환경 구성은 [그림 1-3]를 참고하며 공격자 PC는 칼리리눅스가 아닌 호스트 PC를 활용해도 된다.
그림 2-3 환경 구성

CM-AD-Changer 플러그인 설치 주소
- 취약점 발생 버전 : CM-AD-Changer 1.7.7 Download Click
- 취약점 패치 버전 : CM-AD-Changer 1.7.8 Download Click


   취약점 검증
설치 된 CM-AD-Changer 플러그인을 선택하고, “Campaigns”를 클릭한다. [그림 3-1]과 같이 화면이 출력되면, “Create new Campaign”을 클릭하여 광고 배너 이미지를 올릴 수 있는 캠페인을 생성한다.
그림 3-1 CM-AD-Changer 캠페인 생성 1

[그림 3-2]와 같이 Campaign Settings 탭에서 각 항목에 적절한 입력을 채우고, “Add”를 눌러준다. 이때 Campaign Status는 Active(활성화)로 체크되어 있어야 한다. 활성화 되어야 광고 배너를 적용할 수 있기 때문이다.
그림 3-2 CM-AD-Changer 캠페인 생성 2

캠페인이 정상적으로 추가되었다면, [그림 3-3]과 같이 추가된 캠페인을 확인 할 수 있다.
그림 3-3 CM-AD-Changer 캠페인 생성 3

Campaign Banners 탭을 선택한 후 “select file”을 클릭하여 이미지 파일을 선택한다. 이때 Display Method는 “selected Banner”로 선택한다.
그림 3-4 CM-AD-Changer 캠페인 생성 4

Campaign Images에 이미지가 정상적으로 삽입된다면, [그림 3-5]와 같이 Name, Banner Title, Banner Alt, Target URL, Weight을 설정할 수 있다. XSS 취약점은 Name에서 발생되므로, 해당 위치에 알림창을 띄우는 스크립트인 </script><script> alert('1'); </script> 를 입력하여 “Save” 버튼을 클릭한다.
그림 3-5 XSS 취약점 확인 1

“Save” 한 후에 [그림 3-6]과 같이 삽입한 스크립트가 동작됨을 확인 할 수 있다. 
그림 3-6 XSS 취약점 확인 2

해당 스크립트가 동작된 이유는 입력한 Name 값이 [그림 3-7]의 하단에 Selected Image Name: 부분에서 출력되기 때문이다. [그림 3-7]의 경우에는 스크립트로 동작되었기 때문에 아무런 이름 값이 보이지 않는다. 
그림 3-7 XSS 취약점 확인 3

하지만, 스크립트가 아닌 정상적인 문자를 입력하고 “Save” 한다면, [그림 3-8]처럼 적용한 NAME이라는 문자가 출력되는 것을 확인 할 수 있다. 
그림 3-8 XSS 취약점 확인 4

CM-AD-Changer 플러그인의 XSS 취약점은 선택한 이미지의 이름을 출력하는 부분에서 발생한다. 취약점 검증에서는 관리자가 직접 입력했을 때 해당 취약점이 발생하는 지를 확인하였다. 하지만 관리자가 악의적인 사람이 아니라면, 해당 위치에 악의적인 스크립트를 삽입 할 이유가 없다. 현실적인 시나리오를 생각해보면 XSS 취약점이 존재하는 외부 사이트에서 CSRF 공격을 이용하면 관리자가 아니더라도 해당 광고 배너의 NAME 값을 수정할 수 있다.

해당 플러그인의 CSRF를 활용한 공격 방법과 대응 방안은 두 번째 포스팅에서 살펴보자!