基本概念
越權(quán)漏洞是Web應(yīng)用程序中一種常見的安全漏洞景殷,它的威脅在于一個(gè)賬戶即可控制全站用戶數(shù)據(jù)溅呢。越權(quán)漏洞的成因主要是因?yàn)殚_發(fā)人員在對數(shù)據(jù)進(jìn)行增、刪猿挚、改咐旧、查詢時(shí)對客戶端請求的數(shù)據(jù)過分相信而遺漏了權(quán)限的判定。
水平越權(quán)( 橫向越權(quán))
水平越權(quán)指攻擊者嘗試訪問與他擁有相同權(quán)限的用戶資源绩蜻。例如铣墨,用戶A和用戶B屬于同一角色,擁有相同的權(quán)限等級(jí)辜羊,他們能獲取自己的私有數(shù)據(jù)(數(shù)據(jù)A和數(shù)據(jù)B)踏兜,但如果系統(tǒng)只驗(yàn)證了能訪問數(shù)據(jù)的角色词顾,而沒有對數(shù)據(jù)做細(xì)分或者校驗(yàn)八秃,導(dǎo)致用戶A能訪問到用戶B的數(shù)據(jù)(數(shù)據(jù)B),那么用戶A訪問數(shù)據(jù)B的這種行為就叫做水平越權(quán)訪問肉盹。
水平越權(quán)昔驱,多發(fā)生在一些能夠?qū)?shù)據(jù)進(jìn)行查詢、增上忍、刪骤肛、改的地方。比如一些使用id來對對應(yīng)數(shù)據(jù)進(jìn)行操作的功能點(diǎn)窍蓝,如果此時(shí)沒有把數(shù)據(jù)的id和用戶的uid進(jìn)行綁定的話腋颠,就容易產(chǎn)生水平越權(quán)漏洞。
平時(shí)排查問題時(shí)吓笙,可以使用Firefox瀏覽器F12中的網(wǎng)絡(luò)請求功能淑玫,對關(guān)鍵參數(shù)進(jìn)行修改替換,重新發(fā)送請求,查看響應(yīng)包的內(nèi)容來確認(rèn)是否存在水平越權(quán)絮蒿,如要進(jìn)行更多的測試尊搬,推薦使用burpsuite、fiddler等專業(yè)抓包工具土涝。
垂直越權(quán)(縱向越權(quán))
非法獲取高權(quán)限級(jí)別用戶權(quán)限佛寿。比如:只隱藏URL未判斷訪問權(quán)限。在用戶認(rèn)證后只顯示給用戶認(rèn)證過的頁面和菜單選項(xiàng)但壮,而實(shí)際上這些僅僅是表示層的訪問控制而不能真正生效冀泻,攻擊者能夠很容易的就偽造請求直接訪問未被授權(quán)的頁面(如管理員功能)。
越權(quán)檢查列表
- 與前端交互的服務(wù)禁止直接使用前端傳遞的當(dāng)前用戶id(請求head或請求報(bào)文中的用戶id等) 蜡饵,必須使用當(dāng)前用戶登錄會(huì)話憑證通過服務(wù)端交互獲取用戶ID腔长。
- 前端傳遞私有數(shù)據(jù)id(如訂單號(hào)|聯(lián)系方式ID等) 禁止直接檢索數(shù)據(jù)庫ID并不與當(dāng)前用戶id校驗(yàn),而是需配合當(dāng)前登錄會(huì)話中的用戶ID&數(shù)據(jù)ID同時(shí)進(jìn)行檢索校驗(yàn)验残。
- 客服人員訪問數(shù)據(jù)時(shí)捞附,需通過權(quán)限系統(tǒng)校驗(yàn)當(dāng)前登錄的用戶是否有訪問該類數(shù)據(jù)的權(quán)限。
- 權(quán)限及身份校驗(yàn)必須在敏感數(shù)據(jù)處理接口中提前處理您没,而不能在前端拆分成幾個(gè)過程鸟召。
- 系統(tǒng)外部交互過程中如果需要防篡改,可將數(shù)據(jù)使用公私鑰+時(shí)間 進(jìn)行簽名校驗(yàn)氨鹏。
- 控制服務(wù)訪問級(jí)別欧募,避免對內(nèi)服務(wù)無意暴露在公網(wǎng)中。
研發(fā)保障制度
- 評審的技術(shù)方案需要有安全部分的設(shè)計(jì)仆抵,必須包括對外接口的權(quán)限控制設(shè)計(jì)跟继。
- 評審的測試用例,必須包括安全測試用例和越權(quán)測試用例镣丑。
越權(quán)訪問漏洞的修復(fù)方案
- [最優(yōu)方案]驗(yàn)證每次請求(URL舔糖、數(shù)據(jù)等資源)的用戶權(quán)限。建立基于角色的權(quán)限控制矩陣莺匠,實(shí)現(xiàn)“用戶”金吗、“角色”、“權(quán)限”對照表趣竣。系統(tǒng)功能區(qū)域分離(普通用戶摇庙、管理員、公共訪問區(qū)等)遥缕。
- [次優(yōu)方案]增加隨機(jī)化參數(shù)(避免可預(yù)測)卫袒。使用難以預(yù)測的參數(shù)(如一次性token預(yù)先下發(fā)到客戶端,客戶端瀏覽器請求數(shù)據(jù)時(shí)帶上賬戶ID和一次性token)单匣,使攻擊者無法預(yù)測執(zhí)行操作夕凝。