“三員系統(tǒng)”中常見的越權(quán)問題
一、越權(quán)訪問
越權(quán)訪問(Broken Access Control,簡稱BAC)是Web應(yīng)用程序中一種常見的漏洞,由于其存在范圍廣、危害大,被OWASP列為Web應(yīng)用十大安全隱患的第二名。
1. 越權(quán)訪問的產(chǎn)生
比如,某個(gè)訂單系統(tǒng),用戶可以查詢自己的訂單信息。A用戶查詢訂單時(shí),發(fā)送的HTTP請求中包含參數(shù)“orderid=A”,訂單系統(tǒng)取得orderid后最終會(huì)查詢數(shù)據(jù)庫,查詢語句類似于“select * fromtablename where orderid = A”。B用戶查詢訂單時(shí),發(fā)送的HTTP請求中包含參數(shù)“orderid=B”,系統(tǒng)查詢數(shù)據(jù)庫語句類似于“select * fromtablename where orderid = B”。正常情況下,每個(gè)用戶只會(huì)查詢到自己的訂單。但是,當(dāng)B用戶將自己的HTTP請求參數(shù)修改為“orderid=A”,那么最終B用戶執(zhí)行的數(shù)據(jù)庫語句變成了“select * fromtablename whereorderid = A”,導(dǎo)致A的訂單信息被B用戶獲取到了。
一般來說,網(wǎng)站設(shè)計(jì)者會(huì)用戶的訪問進(jìn)行權(quán)限校驗(yàn),確保用戶僅能訪問到屬于自己的資源,但是業(yè)務(wù)復(fù)雜到一定程度之后,諸如此類的數(shù)據(jù)如此之多,從訂單信息,到地址數(shù)據(jù)、支付信息等等,無一不需要小心處理。一旦有所疏漏,就會(huì)產(chǎn)生越權(quán)訪問漏洞。
2. 越權(quán)訪問的種類
越權(quán)訪問分為垂直越權(quán)訪問、水平越權(quán)訪問和交叉越權(quán)。
垂直越權(quán)是指不同用戶級(jí)別之間的越權(quán),如普通用戶執(zhí)行管理員用戶的權(quán)限。水平越權(quán)是指相同級(jí)別用戶之間的越權(quán)操作。
(1) 水平越權(quán)
假設(shè)用戶A和用戶B屬于同一角色X,擁有相同的權(quán)限等級(jí),他們能獲取自己的私有數(shù)據(jù)(數(shù)據(jù)A和數(shù)據(jù)B),但如果系統(tǒng)只驗(yàn)證了能訪問數(shù)據(jù)的角色,而沒有對(duì)數(shù)據(jù)做細(xì)分或者校驗(yàn),導(dǎo)致用戶A能訪問到用戶B的數(shù)據(jù)(數(shù)據(jù)B),那么用戶A訪問數(shù)據(jù)B的這種行為就叫做水平越權(quán)訪問。
(2) 垂直越權(quán)
垂直越權(quán)又叫做權(quán)限提升攻擊。其原理是由于Web應(yīng)用沒有做權(quán)限控制,或僅僅在菜單上做了權(quán)限控制,導(dǎo)致惡意用戶只要猜測其他管理頁面的URL,就可以訪問或控制其他角色擁有的數(shù)據(jù)或頁面,達(dá)到權(quán)限提升的目的。
3. 越權(quán)訪問的測試
本文以三員系統(tǒng)為例,首先介紹一下三員系統(tǒng)。
三員系統(tǒng)初始就有三個(gè)不同權(quán)限的管理員:系統(tǒng)管理員、安全保密管理員、安全審計(jì)員,三員之間是平級(jí)的但主體功能各不相同。此外根據(jù)不同Web系統(tǒng)的需求還會(huì)出現(xiàn)三員用戶的子用戶和普通用戶,普通用戶中可能還會(huì)分出不同權(quán)限的用戶(如:操作員、監(jiān)控員等等)。
三員系統(tǒng)為了滿足保密產(chǎn)品的安全需求導(dǎo)致用戶權(quán)限劃分細(xì)致且眾多,相較于普通系統(tǒng)權(quán)限判斷更加繁多也更需細(xì)致,因此權(quán)限控制難度更高,導(dǎo)致三員系統(tǒng)出現(xiàn)越權(quán)漏洞的概率越高
(1) 三員之間的交叉越權(quán)
登錄A管理員,執(zhí)行A管理員的功能x,抓取保存x功能包。退出A管理員,登錄B管理員,抓取B管理員的COOKIE,將x功能包中的COOKIE替換成B的COOKIE,發(fā)送x功能包。通過響應(yīng)包或到x功能的Web頁面處查看請求是否成功,成功則存在越權(quán)漏洞。
以上是越權(quán)通用的測試方式,但實(shí)際測試中要注意以下幾點(diǎn):
- 一般Web應(yīng)用是通過COOKIE里的信息來認(rèn)證用戶身份的,但并不是所用Web應(yīng)用的是如此的。遇到身份認(rèn)證不是COOKIE的Web應(yīng)用,要替換的就是該系統(tǒng)認(rèn)證身份的地方而不是COOKIE。如下圖就是COOKIE認(rèn)證登錄狀態(tài),jitabc認(rèn)證用戶身份。
- 遇到有COOKIE共用(多次登錄同一或不同用戶COOKIE相同)的Web應(yīng)用時(shí),因?yàn)镃OOKIE不變并不需要替換COOKIE直接替換Web的當(dāng)前用戶就能直接發(fā)送請求來測試。但這時(shí)候未授權(quán)漏洞和COOKIE退出不清除的問題會(huì)影響越權(quán)漏洞的驗(yàn)證,要在驗(yàn)證越權(quán)前先確定未授權(quán)漏洞和COOKIE退出不清除這兩個(gè)問題不存在。
- 三員之間的交叉越權(quán)最常出現(xiàn)在同一功能不同權(quán)限處。如:系統(tǒng)管理員和安全保密管理員都有用戶這個(gè)功能模塊,但僅有系統(tǒng)管理員有添加用戶的功能,僅有安全保密管理員有賦予用戶權(quán)限的功能,在程序?qū)δ苣K進(jìn)行身份驗(yàn)證但對(duì)其中的子功能缺乏驗(yàn)證時(shí)就會(huì)出現(xiàn)越權(quán)漏洞。
(2) 三員管理員的垂直越權(quán)
本漏洞是在用戶有某一功能的權(quán)限且增刪改查的值有限制但限制不完善的情況下,會(huì)出現(xiàn)的問題。
例:
三員管理員可以添加自己權(quán)限的子用戶。抓取系統(tǒng)管理員的用戶角色添加功能,其中存在roles=1的字段,可能是角色控制的值,修改為roleid=2繼續(xù)發(fā)送發(fā)現(xiàn)請求成功,在Web端查看該用戶已被賦予安全管理員角色,很明顯存在越權(quán)漏洞。
注意:
- 在實(shí)際測試中可能不會(huì)出現(xiàn)roleid這樣明顯的角色字眼,這時(shí)候就要認(rèn)真分析和嘗試出請求中每個(gè)字段的意義,在進(jìn)行測試。
- 該漏洞常出現(xiàn)在用戶添加、賦予角色等跟用戶角色相關(guān)但有限制的地方,一旦程序限制不完善就會(huì)出現(xiàn)漏洞。
(3) 三員子用戶/普通用戶的垂直越權(quán)
登錄C管理員,執(zhí)行C管理員的功能y,抓取保存y功能包。退出C管理員,登錄D三員子用戶/普通用戶,抓取D的COOKIE,將y功能包中的COOKIE替換成D的COOKIE,發(fā)送y功能包。通過響應(yīng)包或到y(tǒng)功能的Web頁面處查看請求是否成功,成功則存在越權(quán)漏洞。
與1.3.1類似,不同是的利用低權(quán)限用戶的身份執(zhí)行高權(quán)限用戶獨(dú)有的功能。
(4) 三員子用戶/普通用戶的水平越權(quán)
登錄E用戶執(zhí)行E用戶的功能z,抓取z功能包將其中的用戶識(shí)別id修改為F用戶的(如E修改密碼時(shí)抓取到功能包:username=E&passwd=123,修改成username=F&passwd=123),發(fā)送請求測試F用戶對(duì)應(yīng)的功能是否被修改,成功修改則存在越權(quán)漏洞。
二、未授權(quán)訪問
未授權(quán)訪問漏洞可以理解為需要安全配置或權(quán)限認(rèn)證的地址、授權(quán)頁面存在缺陷導(dǎo)致其他用戶可以直接訪問從而引發(fā)重要權(quán)限可被操作、數(shù)據(jù)庫或網(wǎng)站目錄等敏感信息泄露。
常見的第三方未授權(quán)訪問漏洞:
- MongoDB 未授權(quán)訪問漏洞
- Redis 未授權(quán)訪問漏洞
- Memcached 未授權(quán)訪問漏洞CVE-2013-7239
- JBOSS 未授權(quán)訪問漏洞
- VNC 未授權(quán)訪問漏洞
- Docker 未授權(quán)訪問漏洞
- ZooKeeper 未授權(quán)訪問漏洞
- Rsync 未授權(quán)訪問漏洞
以上都第三方的未授權(quán)漏洞,如果Web系統(tǒng)中有用到以上組件,就要及時(shí)更新該組件修復(fù)漏洞。Web應(yīng)用本身也存在未授權(quán)漏洞,常見有以下兩類:
- 沒有作任何的用戶身份認(rèn)證手段。
- 一些特定的頁面或文件未做認(rèn)證。
第一類問題的測試只需要隨意抓取用戶功能,將其中的用戶認(rèn)證信息(COOKIE等)清空或修改然后發(fā)送,若請求成功便存在未授權(quán)漏洞。
第二類問題測試方式與第一類問題一樣,只是特定的頁面或文件才存在。一般常見于:可文件、用戶手冊、Web應(yīng)用新添加的功能頁面。
三、認(rèn)證信息失效機(jī)制問題
用戶正常注銷退出后,用戶的認(rèn)證信息不會(huì)立刻失效。用戶認(rèn)為自己已經(jīng)退出賬號(hào),但在服務(wù)端中保留用戶登錄狀態(tài),依然可以用認(rèn)證信息進(jìn)行請求。因此在要求單次登錄有效的應(yīng)用系統(tǒng)中,用戶正常退出或注銷應(yīng)將服務(wù)端認(rèn)證信息進(jìn)行注銷。
四、結(jié)語
在上述安全問題測試方法的前提是獲取到其他用戶認(rèn)證信息,而實(shí)際應(yīng)用場景中需要獲取其他管理員認(rèn)證信息雖然很困難,但在現(xiàn)今層出不窮的網(wǎng)絡(luò)攻擊手段下,我們不得不關(guān)注這些安全問題的本身。造成“三員”中越權(quán)問題的主要原因在于對(duì)于身份認(rèn)證不嚴(yán)格,角色和功能綁定存在遺漏,因此在企業(yè)重要的應(yīng)用系統(tǒng)中建議在服務(wù)端進(jìn)行用戶和角色的一對(duì)一驗(yàn)證,角色和功能的一對(duì)一驗(yàn)證,或者用戶和功能的一對(duì)一驗(yàn)證。