본문 바로가기

워드프레스 플러그인 WP-PostRatings 버그 바운티 본문

해킹 & 보안/웹 해킹

워드프레스 플러그인 WP-PostRatings 버그 바운티

Kai-RoS 2018.12.30 01:16
※ 주의사항
해당 공격 코드는 연구 목적으로 작성된 것이며, 허가 받지 않은 공간에서는 테스트를 절대 금지합니다. 악의적인 목적으로 이용할 시 발생할 수 있는 법적 책임은 자신한테 있습니다. 이는 해당 글을 열람할 때 동의하였다는 것을 의미합니다. 해당 문서의 저작권은 Kai-Ros Team에게 있습니다. 저작권 위반 시 법적 조치가 가해질 수 있습니다.


3. 워드프레스 개요

3.1. 개요

그림 3‑1 워드프레스  홈페이지


워드프레스(Wordpress) PHP 기반의 오픈소스 설치형 CMS(Content Management System) 컨텐츠 관리 시스템” 이다특징은 웹사이트블로그앱을 만들  있는 오픈소스 소프트웨어다누구나 쉽게 무료로 사용이 가능하며설치  간단한 설정으로 사용자들이 접근하기 쉽다.

 

기업

얼론사

공공기관

https://www.samsung.com/sec/home/

(삼성전자)

http://www.bloter.net/

(블로터닷넷)

http://www.seoul.go.kr/

(서울시)

https://social.lge.co.kr

(LG전자)

https://www.cnet.co.kr/

(CNET 코리아)

http://blog.ggtour.or.kr

(경기 관광공사)

https://skinnovation-if.com/

(SK이노베이션)

http://blog.donga.com/

(동아일보 저널로그)

http://jeju-sp.com/

(제주 첨단과학기술단지)

 3‑1 국내 워드프레스 구축 사이트 사례


개인 블로그부터 기업, 언론사, 공공기관 등의 29%  사이트는 워드프레스를 사용 중이다. 사용자의 만족성을 높일  있게 45,000 이상의 플러그인을 가지고 있다. 플러그인을 통해 온라인 상점, 갤러리, 메일링 리스트, 포럼, 분석기 등을 추가할  있다.  세계 6천만명의 사람들이 이라 부르는  공간을 만들기 위해 워드프레스를 사용하고 있다.


4.  WP-PostRatings 플러그인 기능 소개

그림 41 WP-PostRatings 플러그인


"WP-PostRatings 플러그인" 오픈 소스 소프트웨어다. "WP-PostRatings 플러그인" 특정 포스트와 모든 포스트에 별점을 있다. "WP-PostRatings 플러그인" 버그 바운티 Stored-XSS 취약점이 도출됐다. 해당 취약점은 Release 의해 도출됐으며 해당 플러그인 개발자와 연락 한국 시간으로 2018-12-22 패치되어 "WP-PostRatings 1.86.1" 버전으로 배포 중이다.


5. WP-PostRatings 플러그인 취약점 진단

그림 51 WP-PostRatings 플러그인 설치 설정


WP-PostRatings 플러그인을 다운로드 자신이 설치한 환경의 폴더에 해당 플러그인을 압축 해제한다. 자신의 워드프레스 주소로 접속 그림 5‑1 같이 Plugin > Installed Plugins 접근하면 WP-PostRatings 플러그인이 확인된다. 해당 플러그인을 선택 “Activate” 클릭하여 활성화 시킨다. 추가적으로 그림 5‑1 WP-PostRatings 플러그인은 1.86 버전으로 취약점이 도출된 플러그이다. 개발자가 패치 플러그인이다.


그림 52 WP-PostRatings 플러그인 진단 설정


그림 51 같이 WP-PostRatings 플러그인을 활성화 시키면 좌측 메뉴 바에 Ratings라는 메뉴가 생긴다. Ratings 클릭 Ratings Options 하위 메뉴를 선택하면 그림 52 같은 화면이 나온다. 그림 52 같이 Ratings Image 아무 메뉴를 클릭 Save Changes 클릭한다.


 

그림 53 악성 스크립트 삽입 시도


취약점 진단 도구인 버프 스위트로 프록시(Proxy) 잡은 “postratings_image” 파라미터에 그림 53 같이

[ \” onerror=alert(document.cookie) -- ] 악성 스크립트 삽입 시도를 한다. 해당 악성 스크립트는 사용자의 쿠키 값을 출력하는 스크립트다.


그림 54 악성 스크립트 삽입 확인


버프 스위트의 응답 데이터를 보면 그림 54 같이 악성 스크립트가 성공적으로 삽입된 것을 확인됐다.

 

그림 55 악성 스크립트 출력 확인


모든 과정이 끝난 해당 페이지에서 사용자의 쿠키 값이 팝업 창으로 출력된 것이 확인됐다. 해당 취약점은 Stored-Cross-Site-Script 취약점으로 High 해당하는 취약점이다.


6. WP-PostRatings 대응 방안

6.1. 시큐어 코딩

61 postratings-options.php 취약점 소스 코드 수정


WP-PostRatings 플러그인 취약점은 postratings-options.php 소스 코드에서 발생한다. 61 같이 postratings-options.php 소스 코드를 오픈 119번째 줄을 보면 “postratings_image” “get_options” 받는 것을 있다. 61에서 postratings_image 변수는 파라미터 요청(Request) 악성 스크립트의 대한 검증이 이루어지지 않고 있다.

 

htmlspecialchars($postratings_image = get_option('postratings_image'));

62 postratings-options.php 시큐어 코딩 적용


해당 취약점을 대응 하기 위해 “htmlspecialchars” 함수를 사용한다. “htmlspecialchars” 특정 문자열의 특수 문자를 HTML 엔티티(Entty) 변환한다. “htmlspecialchars” 함수가 치환하는 특수문자는 [ &. “(더블 쿼터), ‘ (싱글쿼터). <, > ]. 62 같이 htmlspecialchars 함수를 적용하여 XSS 공격을 방지 가능한지 확인한다.


그림 61 악성 스크립트 삽입 시도


그림 61 같이 악성 스크립트 삽입을 시도한다.


그림 62 악성 스크립트 삽입 확인


버프 스위트의 응답 데이터를 보면 그림 54 다르게 그림 62에서는 특수문자가 치환된 것이 확인됐다.

 

그림 63 악성 스크립트 결과


모든 과정이 끝난 해당 페이지에서 사용자의 쿠키 값이 팝업 창으로 출력되지 않는 것이 확인됐다. 취약점이 발생하는 소스코드에 시큐어 코딩 하나인 “htmlspecialchars” 함수를 적용하여 대응이 가능하다.


0 Comments
댓글쓰기 폼