Component type
WordPress plugin
Component details
Component name Beam me up Scotty – Back to Top Button
Vulnerable version <= 1.0.23
Component slug beam-me-up-scotty
OWASP 2017: TOP 10
Vulnerability class A3: Injection
Vulnerability type Cross Site Scripting (XSS)
Pre-requisite
Administrator
Vulnerability details
Short description
Beam me up Scotty 플러그인 1.0.23 이하 버전에서는 back to top 버튼의 커스터마이징 설정값에 대한 데이터 타입 유효성 검사와 이스케이프 처리가 불충분하여 저장형 크로스 사이트 스크립팅 취약점이 존재합니다.
이 커스터마이징 설정은 관리자 권한을 가진 사용자만 접근 가능하며, 관리자 권한을 가지는 공격자가 취약점을 악용할 경우 back to top 버튼이 표시되는 모든 페이지의 방문자들에게 크로스 사이트 스크립팅 공격에 노출됩니다.
How to reproduce (PoC)
1.
Beam me up Scotty 플러그인 1.0.23 이하 버전이 설치 및 활성화된 워드프레스 사이트를 준비합니다.
2.
back top top 버튼을 커스터마이징 하기 위한 메뉴(/wp-admin/themes.php?page=beam-me-up-scotty_settings)로 이동합니다.
3.
Proxy 도구(예: BurpSuite)의 Intercept를 활성화한 상태에서 back to top 버튼 설정 메뉴 하단의 'Save' 버튼을 클릭하여, back to top 버튼 커스터마이징 설정값을 저장하는 요청 패킷을 Intercept합니다.
4.
요청 페이로드 중 ‘beam_me_up_scotty_bottom_indentation' 페이로드의 값을 아래로 변경한 뒤, Forward를 수행합니다.
20px;}</style><script>alert("XSS")</script><style>foo{bottom:0
JavaScript
복사
5.
이후, 워드프레스 사이트로 접속하면 XSS 취약점이 발생하는 것을 확인하실 수 있습니다.
Additional information (optional)
[취약점 발생 원인]
Beam me up Scotty 플러그인은 back to top 버튼의 커스터마이징 설정값을 적용하기 위해 /wp-content/plugins/beam-me-up-scotty/library/includes/dynamic-css.php 파일을 실행합니다.
이 파일은 커스터마이징 설정값을 style 태그 내 back to top 버튼의 스타일 속성값으로 설정합니다. 이때, back to top 버튼의 커스터마이징 설정 값이 아무런 이스케이프 처리 없이 style 태그에 참조되는 것을 확인하실 수 있습니다.
따라서, PoC에서 XSS 공격 스크립트를 입력한 페이로드 ‘beam_me_up_scotty_bottom_indentation’ 의 값은 아무런 이스케이프 처리 없이 back to top 버튼의 스타일 속성 값으로 참조되어 스크립트가 실행되는 것을 확인할 수 있습니다.
결과적으로 워드프레스 사이트에 접속 할 경우 아래의 HTML 코드를 확인할 수 있습니다.