[ 본 이슈는 해결 된 상태이며, 취약점은 2019년 3월 9일 오전 7시 28분에 공개되었습니다. 워드프레스에 리포팅 되었으며, 해당 소스코드는 버디프레스(BuddyPress Core)의 것입니다. 취약점의 종류와 강도는 Stored XSS 이며, 포상금은 $500달러로 한화로 약 57만원 입니다. 해당 취약점은 9~10/10 정도의 심각성을 내포하고 있습니다. ]
설명
워드프레스 버전: 5.0.3 / 버디프레스 버전: 4.1.0
계정을 가진 버디프레스의 유저는 다른 용도를 위해 렌더링된 HTML 코드가 삽입된 비밀 메시지를 보낼 수 있는데, 이것은 script, iframe 등의 자바스크립트 코드를 실행시킬 수 있는 것들을 포함합니다. 이 XSS 코드는 DB에 저장되며 유저가 이 메시지를 읽는 어느 때라도 실행될 수 있습니다. 이 것은(역자 : 취약점이 발생되는 곳은) 유저가 마지막으로 받거나 보낸 메시지를 보여주는 the message preview window도 포함됩니다.
“희생자”가 권한을 부여한 어떠한 (웹앱의) 동작이라도 실행되고 있는 코드는 악용될 수 있으며, 특히 관리자와 같이 권한을 가진 사용자에게는 더 위험합니다. 왜냐하면 권한은 워드프레스 설정과 사용자 이메일과 같은 개인 정보를 열람할 수 있게하기 때문입니다. 이것은 플러그인 등과 같은 어떠한 동작도 포함됩니다.
이 취약점이 발생이 되는 선행 조건은 (기본 권한을 가진) 공격자의 계정과 비밀 메세지 기능이 설정되어있는 버디프레스 설정 외엔 없습니다.
공격이 발생되는 과정
새로운 메세지를 작성할 때 :
다른 사용자의 프로필 페이지로 이동합니다.
비밀 메시지(Private Message)를 클릭합니다.
아무 주제(subject)나 입력합니다.
다음과 같은 메시지를 입력합니다 : Test<iframe src=javascript:alert(1) width=0 height=0 style=display:none;></iframe>
메시지를 보냅니다.
메시지를 열람합니다(XSS를 트리거 시킨다).
희생자가 해당 메시지를 보길 기다립니다.
기존 스레드에 답할 때 :
본인 계정의 인박스 페이지로 갑니다.
받은 메시지를 열람합니다.
다음과 같은 코드가 첨부된 채 메시지에 답장을 보냅니다 : Test<iframe src=javascript:alert(1) width=0 height=0 style=display:none;></iframe>
메시지를 열람합니다(XSS를 트리거 시킨다).
희생자가 해당 메시지를 보길 기다립니다.
페이로드에는 공백이 들어가도 무방하지만 scr에는 어떠한 공백이나 쌍따옴표라도 포함되선 안됩니다. 그렇기 때문에 문자열과 eval’d(역자 : eval()함수)가 포함 된 char 코드로의 변환이 필요합니다.
예시:
이것은 아래의 코드로 변환되어 실행됩니다:
더 많은 용량의 페이로드가 사용될수도 있습니다. 그러나 (첨부할)코드가 char 코드 배열의 형태여야 하기 때문에 (만약 공백이나 쌍따옴표가 포함되어 있다면) 자바스크립트 코드를 보낼 수 있는 메시지로 변환시켜주는 간단한 파이썬 코드를 작성했습니다. 그리고 다음과 같이 수행되는 몇개의 개념증명 페이로드도 포함되어 있습니다 :
사용자의 유저 네임을 “HACKED”로 바꿉니다(어떠한 사용자라도 영향받을 것입니다).
웹사이트 제목과 설명을 바꿉니다(권한을 가진 사용자가 해당 메시지를 읽어야 합니다).
사용자의 권한을 관리자의 권한으로 승격시킵니다(권한을 가진 사용자가 해당 메시지를 읽어야 합니다).
스크립트와 페이로드를 보기 위해 첨부된 zip파일을 다운로드 해주시길 바랍니다 : (역자 : 원문에서 다운로드 해주세요) https://hackerone.com/reports/487081
아래의 페일드 예시를 확인해주시길 바랍니다:
(참고: 공백을 넣는 것은 인박스의 메시지에서 iframe 코드가 보이지 않게 방지하는 것이지 해당 작업에 필요한 것은 아니고 iframe 태그 만을 필요로 합니다.)
“HACKED”로 사용자 이름을 바꿉니다:
웹사이트 제목과 설명을 바꿉니다(관리자가 해당 메시지를 열람해야 합니다):
id가 2인 유저를 관리자 권한으로 승격시킵니다(관리자가 해당 메시지를 열람해야 합니다):
이미지가 포함되어있는 더 자세한 write-up을 원하신다면 https://docs.google.com/document/d/1RgMWJlYen9iR_JTxATYR4TJWAPKRgaSKuiiqZp7x8L0/edit?usp=sharing을 방문해 주세요.
영향
공격자는 그가 원하는 행위를 희생자가 하도록 페이로드를 조작할 수 있습니다. 특히 이것은 관리자에게 위험한데 그 이유로는, 만약 공격자가 희생자들을 타겟팅했다면 공격자는 사이트 정보나 컨텐츠를 수정할 수 있고, 사용자 개인정보 등과 같은 민감한 정보를 열람할 수 있기 때문입니다.
제가 공격을 수행했을 때 저는 프로필 이름과 사용자 비밀번호를 바꿀 수 있었으며, 사용자의 이메일 주소를 읽을 수 있었고 페이지와 웹사이트 데이터, 이메일 주소를 포함해 워드프레스 설정을 수정할 수 있었습니다.
타겟팅된 권한을 가진 사용자가 어떤 것을 하도록 악용할 수 없었고, 저는 아무것도 발견할 수 없었습니다. 공격자가 단 한번의 공격만으로 wp-admin과 다른 플러그인의 모든 기능에 접근하고 더 나아가 연결된 요청을 보내는 것은 타겟에 따라 다를 것으로 보입니다.