A01:2021 – 權限控制失效
對照因素
可對照 CWEs 數量 | 最大發生率 | 平均發生率 | 最大覆蓋範圍 | 平均覆蓋範圍 | 平均加權弱點 | 平均加權影響 | 出現次數 | 所有相關 CVEs 數量 |
---|---|---|---|---|---|---|---|---|
34 | 55.97% | 3.81% | 94.55% | 47.72% | 6.92 | 5.93 | 318,487 | 19,013 |
概述
從第五名晋升至第一名,94% 的應用程式都對中斷的存取控制進行了某種形式的測試。著名 的 CWE 包括 CWE-200:將敏感資訊暴露給未經授權的演員,CWE-201:通過發送資料 和 CWE-352暴露敏感資訊:跨站請求偽造。
描述
存取控制強化政策,使得用戶不能採取在預期權限之外的行動。故障通常會導致未經授權 的資訊洩露、修改或破壞所有資料,或執行超出用戶限制的業務功能。 常見的存取控制弱點包括:
- 通過修改URL、內部應用程式狀態或HTML頁面,或僅使用自定義API攻擊工具來繞過存取控制檢查。
- 容許主鍵被更改為其他用戶的記錄,允許查看或編輯其他人的帳戶。
- 特權提升。未登入即成為用戶,或以用戶身份登入即成為管理員。
- 中繼資料操作,例如重放或篡改JSON網站令牌(JWT)之存取控制令牌,或被操縱以提升特權或濫用 JWT失效的cookie或隱藏欄位。
- CORS錯誤配置允許未經授權的API存取。
- 以未經身份驗證的用戶身份強制瀏覽已驗證的頁面或以標準用戶身份存取特權頁面。 存取缺少存取控制的API以進行POST、PUT 和 DELETE操作。
如何預防
存取控制僅在受信任的伺服器端代碼或無伺服器的API有效果,攻擊者無法修改這裏的存取控制檢查或中繼資料。
- 除公開資源外,以拒絕為預設值。
- 一次性地建置存取控制機制,之後在整個應用程式中重複使用它們,包括最大限度地減少使用CORS。
- 模型的存取控制措施應該強化記錄所有權,而不是讓用戶可以創建、讀取、更新或刪除任何記錄。
- 獨特的應用程式業務限制要求應由領域模型予以強化。
- 停用Web伺服器目錄列表,並確保檔案中繼資料(例如,.git)和備份檔案不在web根目錄中。
- 記錄存取控制失效,並在適當的時間警示管理員(例如,重覆性失效)。
- 對API和控制器存取進行流量限制,以最小化自動攻擊工具所帶來的損害。
- JWT令牌於登出後,在伺服器端應使其失效。
開發人員和QA品保人員應納入與功能有關之存取控制的單元和整合測試。
攻擊情境範例
情境 #1: 應用程式在存取帳戶資訊的SQL呼叫中使用未經驗證的資料:
pstmt.setString(1, request.getParameter(“acct”));
ResultSet results = pstmt.executeQuery( );
攻擊者只需修改瀏覽器的“acct”參數即可發送他們想要的任何帳號。如果沒有正確驗證, 攻擊者可以存取任何用戶的帳戶。
https://example.com/app/accountInfo?acct=notmyacct
情境#2: 攻擊者僅強迫瀏覽某些目標網址。存取管理頁面需要管理員權限。
如果未經身份驗證的用戶可以存取任一頁面,那就是一個缺陷。 如果一個非管理員可以存取管理頁面,這也是一個缺陷。
參考
對應的CWE列表
CWE-22 不當限制受限目錄的路徑名稱(路徑遍訪)
CWE-23 相對路徑遍訪
CWE-35 路徑遍訪: ‘…/…//’
CWE-59 檔案存取前不當的路徑解析 (‘連結指向’)
CWE-200 將敏感資訊曝露給未經授權的行為者
CWE-201 經由發送的資料曝露敏感資訊
CWE-219 在網站根目錄下存放敏感資料
CWE-264 權限、特權和存取控制(不應再使用)
CWE-275 權限問題
CWE-276 不正確的預設權限
CWE-284 不當的存取控制
CWE-285 不當的授權
CWE-352 跨站請求偽造 (CSRF)
CWE-359 將私有的個人資訊曝露給未經授權的行為者
CWE-377 不安全的暫存檔案
CWE-402 私有資源輸入新領域(“資源洩漏”)
CWE-425 直接請求(“強制瀏覽”)
CWE-441 意外代理或中介(“困惑的代理”)
CWE-497 將敏感系統資訊曝露給未經授權的控制領域
CWE-538 將敏感資訊插入外部可存取的檔案或目錄
CWE-540 原始程式中包含敏感資訊
CWE-548 透過列示目錄而曝露資訊
CWE-552 外部各方可存取的檔案或目錄
CWE-566 通過用戶控制的 SQL 主鍵繞過授權
CWE-601 URL重新導向至不受信任的站台(“開放而不受限的重新導向”)
CWE-639 通過用戶控制的金鑰繞過授權
CWE-651 曝露包含敏感資訊的WSDL檔案
CWE-668 資源曝露於錯誤領域
CWE-706 使用被不正確解析的名稱或參考
CWE-862 缺少授權
CWE-863 不正確的授權
CWE-913 不當的動態管理的代碼資源控制
CWE-922 不安全儲存的敏感資訊
CWE-1275 具有不當SameSite屬性設定的敏感Cookie
資料來源:https://github.com/ninedter/Top10/blob/2021-zhtw/2021/docs/A01_2021-Broken_Access_Control.zh_TW.md