XSS (Cross Site Script) Attack - WordPress Plugin. CM-AD-Changer -1 #Web Hacking #DreaMerZ-Note


Re-Posting..

본 포스팅은 2017년 정리한 WordPress CM-AD-Changer 플러그인 취약점을 재 정리하였습니다. 8년이나 지난 취약점이긴 하지만, XSS 취약점의 기본을 보여주는 사례이므로 처음 접하시는 분들에게는 도움이 될 듯합니다.



    | 개요


    CM-AD-Changer 플러그인은 워드프레스의 웹 페이지에 광고 배너를 삽입하여 게시하는 플러그인입니다. 아래 그림은 해당 플러그인을 적용한 후 이미지 광고 배너를 추가한 페이지입니다. 

    해당 플러그인의 1.7.7 버전은 XSS 취약점이 존재하며, 취약점의 PoC 는 WPScan Vulner DB 에서 확인할 수 있습니다. 해당 취약점은 관리자 페이지에서 광고 배너 이미지를 적용할 때 입력한 스크립트에 대해 예외처리가 적용되어 있지 않아, DB에 저장되면서 지속적으로 스크립트를 노출시키는 Stored XSS 입니다. 


    취약점 위치가 관리자 페이지에 존재하기 때문에 일반 사용자가 쉽게 해당 취약점을 악용할 수 없지만, CSRF 공격을 활용하면 관리자 계정을 알 수 없어도 피해를 줄 수 있습니다. 

    이번 포스팅에서 CM-AD-Charger 플러그인의 XSS 취약점을 확인해보고, CSRF 공격 방법까지 이해해보겠습니다. 그리고 마지막 포스팅에서는 패치된 버전과 코드를 비교해서 어떻게 시큐어코딩을 적용하였는 지 알아볼게요. 


    | 환경 구성


    환경 구성은 아래 표의 세팅이 필요합니다. 공격자 PC는 칼리 리눅스 외에도 호스트 PC를 이용해도 됩니다. 

    CM-AD-Charger 플러그인 설치 링크.
    * 현재는 다운로드 받기 어려울 수 있어서, Drive 에 업로드하였습니다.

    - 취약 버전 : 1.7.7  Download
    - 패치 버전 : 1.7.8  Download


    | 취약점 검증


    설치한 CM-AD-Changer 플러그인을 선택하고, "Campaigns"를 클릭합니다. 아래 이미지와 같이 출력되면, "Create new Campain"을 클릭하여 광고 배너 이미지를 올릴 수 있는 캠페인을 생성합니다. 


    아래 이미지와 같이 "Campaign Settings" 탭에서 적절하게 값을 작성합니다. 여기서 'Campaign Status' 는 Active 활성화 해주세요. 활성화 상태로 체크해야 광고 배너를 적용할 수 있습니다.


    정상적으로 캠페인이 추가되었다면, 아래 이미지와 같이 추가된 목록을 확인할 수 있습니다. 


    그럼 이어서 광고 이미지를 넣어 볼게요. 'Campain Banners' 탭을 선택한 후에 "select file"을 클릭해서 준비된 이미지 파일을 넣어주세요. PNG 파일이면 모두 가능합니다. 그리고 Display Method 는 "selected Banner"를 선택해주세요. 


    그럼, 이제 거의 모든 준비가 완료되었습니다. 배너를 넣게되면 아래 이미지와 같이 배너의 Name, Title, Alt, URL 등을 설정할 수 있습니다. 여기서 모든 필드에 </script><script>alert('1');</script>를 입력하고 "save" 를 클릭해서 저장해봅니다. 


    저장함과 동시에 아래 결과 처럼, 스크립트가 동작하면서 alert 창이 출력되는 것을 확인할 수 있어요. 


    그럼 왜 스크립트가 동작했을까요? Name 에 입력된 <script> 구문이 아래 이미지처럼 'Selected Image Name: "에서 반환되기 때문이에요. html 구문에 javascript 구문이 동작되면서 alert 창이 실행된 거죠. 그리고 script 구문이 실행된 상태이기 때문에 출력된 값(문자열)은 확인되지 않습니다. 


    CM-AD-Changer 플러그인의XSS(Cross-Site-Script) 취약점은 저장한 배너 이미지의 이름을 출력하는 부분에서 발생합니다. 하지만 이 기능은 관리자만 접근할 수 있기 때문에 일반적인 상황에서는 영향도가 높지 않습니다. 다만, 관리자에게 CSRF 공격을 유도한다면 해당 광고 배너의 NAME 값을 수정할 수 있을거에요. 대부분 해킹 사례는 1가지 공격보다는 여러 공격 기법이 복합적으로 동작하는 경우가 많습니다. 그럼 다음 포스팅에서는 CM-AD-Changer 플러그인에 대해 CSRF 사례를 살펴볼게요. 


    | 관리자 계정 없이도, 배너 수정이 가능한 CSRF.


    CM-AD-Changer 플러그인은 관리자 페이지에서 발생합니다. 사전에 관리자 계정을 알지 못한다면 해커는 XSS를 시도하기 전에 관리자 계정부터 탈취해야 합니다. 관리자 계정을 탈취하는 방법은 다양하게 있지만, 이번 포스팅에서는 XSS와 유사하게 Script 형태의 공격 기법인 CSRF (Cross Site Request Forgery) 를 이용하는 방법을 소개해드릴게요. 



    댓글 없음: