失效的訪問控制這個漏洞類別一直躋身OWASP Top Web應用程序安全風險列表,目前已對應用程序安全構成了嚴重的挑戰。
訪問控制漏洞讓用戶可以訪問敏感數據,並使他們能夠執行超出預期權限的操作,此類漏洞的後果可能導致數據洩露、篡改甚至銷毀。
本文將討論為什麼即使在漏洞掃描和評估之後失效的訪問控制漏洞仍然常常存在,以及手動滲透測試對於有效檢測和緩解的重要性。
什麼是訪問控制?訪問控制如同一種授權檢查,確保對資源的訪問和執行操作的能力授予了某些用戶(如管理員),而不是其他用戶(如普通用戶)。這種檢查主要在身份驗證過程之後執行。
在Web應用程序安全中,訪問控制與內容、功能的預期用途以及用戶扮演的各種角色密切相關。比如說,這可能包括阻止低權限用戶執行管理員功能、阻止用戶訪問另一用戶的資源,或者基於上下文因素授予或拒絕對資源或功能的訪問。
在處理包含大量用戶角色和功能的大型複雜應用程序時,正確實施訪問控制很快會變得困難重重。
什麼是失效的訪問控制?失效的訪問控制顧名思義是訪問控制沒有按預期工作,這實際上與我們上面提到的恰好相反,後面附有一些詳細的例子。
不安全的直接對象引用(IDOR)以允許普通用戶查看和編輯帳戶信息的應用程序為例。每個帳戶被分配了一個用戶ID,編輯請求被發送後,應用程序根據請求中所含的ID確定要更新哪個帳戶。在這種場景下,攻擊者可以通過將用戶ID改為受害者的ID來操縱旨在更新帳戶的出站請求。
如果沒有實施適當的訪問控制,受害者的帳戶將收到編輯——這是直接影響完整性的IDOR漏洞。假設攻擊者更改了受害者的電子郵件地址,隨後提出了重置密碼請求,這將允許他們設置一個新密碼,最終接管受害者的帳戶。
以下是失效的訪問控制這個話題常出現的另兩個術語:水平特權升級和垂直特權升級。
1. 水平特權升級水平特權升級指以類似權限獲得對另一個帳戶資源的訪問。在前面例子中,如果受害者帳戶擁有與攻擊用戶(即普通用戶)相似的權限,它也叫水平特權升級。簡而言之,除了可以訪問另一個帳戶的資源外,攻擊者並不獲得任何額外的權限。
2. 垂直特權升級垂直特權升級指以更大的權限獲得對另一個帳戶資源的訪問。在前面例子中,如果受害者帳戶擁有更高的權限(比如管理員),這就叫垂直特權升級。攻擊者可以濫用額外的權限對應用程序進行進一步的攻擊。
路徑/目錄遍歷以允許用戶借助內置預覽器功能查看發票的應用程序為例。發票存儲在託管應用程序的同一台服務器上,位於以下絕對路徑:
/var/www/html/vulnerable-application/invoices/
當用戶點擊其配置文件下顯示的其中一張發票時,將發送以下請求:
圖1. 檢索發票的合法請求
預覽器的工作原理是將“file”參數的值附加到特定的絕對路徑。然後,它將檢索該文件的內容,然後返回給請求用戶。
/var/www/html/vulnerable-application/invoices/invoice-2024-12-24.pdf
然而與IDOR場景一樣,攻擊者也可以在這裡截獲出站請求,將“file”參數修改為不打算檢索的文件。
圖2. 試圖檢索非預期文件的已被修改的請求
如果沒有實施適當的訪問控制,預覽器現在將嘗試檢索:
/var/www/html/vulnerable-application/invoices/./././././etc/hosts
點-點-斜杠(./)序列回退路徑中的一個目錄(遍歷到父目錄)。我們有五個這樣的序列,這意味著最後將出現在文件系統的根路徑(/)。我們由此進入etc目錄,我們從該目錄請求hosts文件。
現在,hosts文件(將主機名映射到IP地址的默認文件)很可能不是攻擊者的首選。我們在這裡使用它只是為了展示在應用程序目錄之外檢索文件(又叫本地文件包含)的可能性。攻擊者會改而嘗試檢索應用程序目錄內外的敏感文件。
無法升級?那就降級!我們將通過客戶評估的真實例子來說明。該應用程序具有多個用戶角色,所有角色似乎精心設置,並適當隔離。由於實施了大量的訪問控制,所有試圖提升普通用戶的特權、訪問非預期資源以及執行特權操作的活動一律被阻止。
然而我們在全面分析各種用戶角色之後注意到了一處差異。針對上下文,某些角色可以編輯和刪除其他用戶的帳戶,但只能對權限較低的帳戶執行此操作,擁有這些權限的用戶也不能對自己的帳戶執行這些操作。為任何高權限用戶分配低權限角色的可能性被忽視,實際上刪除了所有權限,對帳戶進行了降級。從技術上講,這些被降級的帳戶現在滿足被權限較低的帳戶編輯和刪除的條件。
圖3. 落實了防止權限升級的訪問控制,但沒有落實防止權限降級的訪問控制
由於正確實施訪問控制的難度隨應用程序的複雜性而加大,識別訪問控制問題的難度也隨之加大。若要檢測這些控制,手動安全測試是最好的方法,因為它需要更深入地了解上下文和應用程序的預期用途。
漏洞掃描的局限性漏洞掃描器是識別應用程序中缺陷的一種流行解決方案。然而,僅僅依賴它們會給應用程序的所有者帶來一種虛假的安全感,雖然這些掃描器可以持續快速地提供掃描結果,但在檢測新穎的攻擊途徑或需要直覺和推理的其他漏洞方面的能力有限。
為了進一步闡明這點,不妨將訪問控制漏洞與另一個複雜性相似、需要人工推理的常見漏洞:業務邏輯漏洞進行比較。
當應用程序的設計、實施或內部流程偏離預期用途時,就會出現業務邏輯漏洞,一些獨特而常見的例子包括訂購負數量的產品或多次兌換相同的折扣碼。
漏洞掃描器的局限性變得很明顯,掃描器無法識別應用程序的預期行為。從它的角度來看,負數仍然是數字,重複使用某個功能未必是壞事。與跨站腳本(XSS)和SQL注入等其他漏洞不同,掃描器無法簡單地在這裡提供輸入,然後在應用程序的響應中查找預定義的模式,以確定是否存在漏洞。
從進攻性安全的角度來看,從失效的訪問控製或業務邏輯類別中捕獲漏洞需要對應用程序具有相同的認識和上下文理解,在許多情況下也存在相當大的重疊。比如,在評估文件上傳功能時,一個測試用例可能是在只允許圖像文件的情況下,上傳一個意外的文件類型,比如包含JavaScript載荷的SVG文件,雖然SVG滿足廣泛的圖像標準,但其含有的JavaScript不易被受害者的瀏覽器解析。
在實際場景中,還會增加權限、角色、外部集成、第三方庫和依賴項等形式的額外複雜性,而漏洞掃描器幾乎不可能確定這種針對特定上下文的複雜性。
圖4. 訪問控制的複雜性
Recommended Comments