Broken Access Control là lỗ hổng xảy ra khi ứng dụng không thực thi đúng các quy tắc kiểm soát truy cập, cho phép người dùng truy cập vào chức năng hoặc dữ liệu mà họ không được phép.
Vertical Privilege Escalations
Summary
Nếu một user có thể truy cập vào chức năng mà họ không được phép truy cập thì đây là vertical privilege escalation. Ví dụ, nếu một user không phải admin có thể truy cập trang admin để xóa tài khoản user khác, thì đây là vertical privilege escalation.
Unprotected Functionality
Lỗi cơ bản nhất của Vertical Privilege Escalation:
Summary
Ở mức cơ bản nhất, vertical privilege escalation xảy ra khi ứng dụng không thực thi bất kỳ biện pháp bảo vệ nào cho chức năng nhạy cảm.
Ví dụ, một website có thể host chức năng nhạy cảm tại URL sau:
https://insecure-website.com/admin
URL này có thể được truy cập bởi bất kỳ user nào, không chỉ những user có quyền admin. Trong một số trường hợp, URL admin có thể được tiết lộ ở các vị trí khác, chẳng hạn như file robots.txt.
URL có thể bị che giấu nhưng nó vẫn có thể bị lộ theo một cách nào đó:
Summary
Việc ẩn chức năng nhạy cảm không cung cấp kiểm soát truy cập hiệu quả vì user có thể phát hiện URL bị obfuscated theo nhiều cách khác nhau.
Ví dụ một ứng dụng host các chức năng admin tại URL sau:
URL này có thể không thể đoán được trực tiếp bởi kẻ tấn công. Tuy nhiên, ứng dụng vẫn có thể rò rỉ URL cho user trong các file JavaScript.
Lab: Unprotected Admin Functionality
Nội dung của robots.txt:
User-agent: *Disallow: /administrator-panel
Có thể truy cập /administrator-panel mà không cần xác thực. Xóa user carlos để hoàn thành lab.
Lab: Unprotected Admin Functionality with Unpredictable URL
Tìm thấy đoạn code sau trong trang /:
<script> var isAdmin = false; if (isAdmin) { var topLinksTag = document.getElementsByClassName("top-links")[0]; var adminPanelTag = document.createElement('a'); adminPanelTag.setAttribute('href', '/admin-233j4q'); adminPanelTag.innerText = 'Admin panel'; topLinksTag.append(adminPanelTag); var pTag = document.createElement('p'); pTag.innerText = '|'; topLinksTag.appendChild(pTag); }</script>
Truy cập /admin-233j4q và xóa user carlos để hoàn thành lab.
Parameter-based Access Control Methods
Việc lưu quyền truy cập hoặc vai trò của người dùng ở trong một vị trí mà user có thể kiểm soát cũng có thể dẫn đến Vertical Privilege Escalation:
Summary
Một số ứng dụng xác định quyền truy cập hoặc vai trò của user khi đăng nhập, sau đó lưu thông tin này ở vị trí mà user có thể kiểm soát. Điều này có thể là:
Hidden field
Cookie
Query string parameter được preset
Ứng dụng đưa ra quyết định kiểm soát truy cập dựa trên giá trị được submit. Ví dụ:
Truy cập /admin và xóa user carlos để hoàn thành lab.
Broken Access Control Resulting From Platform Misconfiguration
Ứng dụng có thể chặn user thuộc một role nào đó (chẳng hạn managers) truy cập vào resource cụ thể (POST /admin/deleteUser):
Summary
Một số ứng dụng thực thi kiểm soát truy cập ở platform layer bằng cách hạn chế truy cập vào các URL và HTTP method cụ thể dựa trên vai trò của user. Ví dụ, ứng dụng có thể cấu hình rule như sau:
DENY: POST, /admin/deleteUser, managers
Một số framework cho phép bypass bằng cách ghi đè URL cần truy cập thông qua các custom headers:
Summary
Một số application framework hỗ trợ các HTTP header không chuẩn có thể được sử dụng để override URL trong request gốc, chẳng hạn như X-Original-URL và X-Rewrite-URL. Nếu website sử dụng kiểm soát front-end nghiêm ngặt để hạn chế truy cập dựa trên URL, nhưng ứng dụng cho phép URL được override thông qua request header, thì có thể bypass kiểm soát truy cập bằng request như sau:
POST / HTTP/1.1X-Original-URL: /admin/deleteUser...
Hoặc cũng có thể sử dụng method khác:
Summary
Nếu kẻ tấn công có thể sử dụng method GET (hoặc method khác) để thực hiện hành động trên URL bị hạn chế, họ có thể bypass kiểm soát truy cập được implement ở platform layer.
Lab: URL-based Access Control Can Be Circumvented
Dùng request sau để truy cập trang /admin:
GET / HTTP/2Host: 0a8000de044890718098997b002900ab.web-security-academy.netUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:137.0) Gecko/20100101 Firefox/137.0Referer: https://0a8000de044890718098997b002900ab.web-security-academy.net/X-Original-Url: /admin
Dùng request sau để xóa user carlos:
GET /?username=carlos HTTP/2Host: 0a8000de044890718098997b002900ab.web-security-academy.netUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:137.0) Gecko/20100101 Firefox/137.0Referer: https://0a8000de044890718098997b002900ab.web-security-academy.net/X-Original-Url: /admin/delete
Lab: Method-based Access Control Can Be Circumvented
Request dùng để nâng quyền:
POST /admin-roles HTTP/2Host: 0ab200f303fc2692807d492c00790045.web-security-academy.netCookie: session=E0Penp8hMvA8NdPy0YqFk0LFCLhFJLl2User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:137.0) Gecko/20100101 Firefox/137.0Content-Type: application/x-www-form-urlencodedContent-Length: 30Origin: https://0ab200f303fc2692807d492c00790045.web-security-academy.netReferer: https://0ab200f303fc2692807d492c00790045.web-security-academy.net/adminusername=wiener&action=upgrade
Khi gửi request này với cookie của winer:peter thì nhận được response sau:
Đổi method thành GET và chuyển body params thành query params:
GET /admin-roles?username=wiener&action=upgrade HTTP/2Host: 0ab200f303fc2692807d492c00790045.web-security-academy.net
Gửi request để hoàn thành lab.
Broken Access Control Resulting From URL-Matching Discrepancies
Một số ứng dụng rất khắt khe trong việc so khớp đường dẫn nhằm kiểm soát truy cập. Nếu chúng ta có thể khiến cho thành phần kiểm soát truy cập không so khớp được thì có thể bypass được:
Summary
Website có thể khác nhau trong việc so khớp chặt chẽ path của incoming request với endpoint đã định nghĩa. Ví dụ, họ có thể tolerant với việc viết hoa không nhất quán, vì vậy request đến /ADMIN/DELETEUSER vẫn có thể được map tới endpoint /admin/deleteUser.
Nếu cơ chế access control ít tolerant hơn, nó có thể coi đây là hai endpoint khác nhau và fail trong việc enforce các ràng buộc đúng.
Ví dụ về Spring framework:
Example
Sự khác biệt tương tự có thể xảy ra nếu developer sử dụng Spring framework đã enable option useSuffixPatternMatch. Điều này cho phép path với file extension tùy ý được map tới endpoint tương đương không có file extension. Nói cách khác, request đến /admin/deleteUser.anything vẫn sẽ match với pattern /admin/deleteUser. Trước Spring 5.3, option này được enable mặc định.
Một ví dụ khác:
Example
Trên các hệ thống khác, chúng ta có thể gặp sự khác biệt trong việc /admin/deleteUser và /admin/deleteUser/ có được coi là các endpoint riêng biệt hay không. Trong trường hợp này, chúng ta có thể bypass access control bằng cách thêm trailing slash vào path.
Horizontal Privilege Escalation
Summary
Horizontal privilege escalation xảy ra nếu user có thể truy cập vào resource thuộc về user khác, thay vì resource của chính họ thuộc loại đó. Ví dụ, nếu một nhân viên có thể truy cập record của nhân viên khác cũng như của chính họ, thì đây là horizontal privilege escalation.
Cách cơ bản nhất để khai thác Horizontal Privilege Escalation:
Summary
Horizontal privilege escalation attack có thể sử dụng các method khai thác tương tự như vertical privilege escalation. Ví dụ, user có thể truy cập trang tài khoản của họ bằng URL sau:
https://insecure-website.com/myaccount?id=123
Nếu kẻ tấn công thay đổi giá trị parameter id thành của user khác, họ có thể truy cập trang tài khoản của user khác và các dữ liệu và chức năng liên quan.
Nếu ứng dụng sử dụng GUID để định danh người dùng thì cũng chưa chắc an toàn vì GUID có thể bị lộ ở đâu đó trong ứng dụng:
Summary
Ví dụ, thay vì số tăng dần, ứng dụng có thể sử dụng globally unique identifiers (GUID) để xác định user. Điều này có thể ngăn kẻ tấn công đoán hoặc dự đoán identifier của user khác. Tuy nhiên, GUID thuộc về user khác có thể được tiết lộ ở nơi khác trong ứng dụng nơi user được tham chiếu, chẳng hạn như tin nhắn hoặc đánh giá của user.
Nếu ứng dụng từ chối request và redirect về trang đăng nhập nhưng response có chứa thông tin về người dùng thì vẫn được xem như là lỗ hổng về quyền truy cập:
Summary
Trong một số trường hợp, ứng dụng phát hiện khi user không được phép truy cập resource và trả về redirect tới trang đăng nhập. Tuy nhiên, response chứa redirect vẫn có thể bao gồm một số dữ liệu nhạy cảm thuộc về target user, vì vậy cuộc tấn công vẫn thành công.
Lab: User ID Controlled by Request Parameter
Đăng nhập bằng tài khoản wiener:peter và gửi request đến /my-account?id=carlos để lấy API key.
Lab: User ID Controlled by Request Parameter, with Unpredictable User IDs
Khi xem trang /post?postId=3, tìm được đoạn code HTML có chứa GUID như sau:
Đăng nhập và truy cập vào /blogs?userId=8d8c3ecd-7c15-44fa-b240-9b725b06e82e để lấy API key.
Lab: User ID Controlled by Request Parameter with Data Leakage in Redirect
Redirect response có đoạn code HTML chứa thông tin của người dùng:
<p>Your username is: carlos</p><div> Your API Key is: ukujEDz4tqCNdJiz5Ksa2MQkRnYHB0bE</div>
Horizontal to Vertical Privilege Escalation
Horizontal privilege escalation có thể dẫn đến vertical privilege escalation nếu chúng ta có thể kiểm soát một tài khoản có đặc quyền:
Summary
Thường thì horizontal privilege escalation attack có thể được chuyển thành vertical privilege escalation bằng cách compromise một user có privilege cao hơn.
Ví dụ, horizontal escalation có thể cho phép kẻ tấn công reset hoặc capture password thuộc về user khác.
Lab: User ID Controlled by Request Parameter with Password Disclosure
Trang /my-account?id=wiener có chứa tài khoản của user wiener ở trong thẻ input như sau:
Đăng nhập bằng administrator:lhmjvurse15j6hjous3b và xóa user carlos để hoàn thành lab.
Insecure Direct Object References
Summary
Insecure direct object references (IDOR) là một subcategory của access control vulnerability. IDOR xảy ra nếu ứng dụng sử dụng user-supplied input để truy cập object trực tiếp và kẻ tấn công có thể thay đổi input để có được truy cập trái phép.
Lab: Insecure Direct Object References
Khi sử dụng chức năng tải transcript thì thấy URL có dạng như sau:
Thử thay đổi 3 thành 1 thì nhận được response có chứa password như sau:
HTTP/2 200 OKContent-Type: text/plain; charset=utf-8Content-Disposition: attachment; filename="1.txt"X-Frame-Options: SAMEORIGINContent-Length: 520CONNECTED: -- Now chatting with Hal Pline --You: Hi Hal, I think I've forgotten my password and need confirmation that I've got the right oneHal Pline: Sure, no problem, you seem like a nice guy. Just tell me your password and I'll confirm whether it's correct or not.You: Wow you're so nice, thanks. I've heard from other people that you can be a right ****Hal Pline: Takes one to know oneYou: Ok so my password is 6hty1zfxme8v42y4dspe. Is that right?Hal Pline: Yes it is!You: Ok thanks, bye!Hal Pline: Do one!
Đăng nhập bằng tài khoản carlos:6hty1zfxme8v42y4dspe để hoàn thành lab.
Access Control Vulnerabilities in Multi-step Processes
Nếu ứng dụng thiếu kiểm soát truy cập cho một bước trong nhiều bước của một chức năng gồm nhiều bước thì cũng có thể dẫn đến việc ứng dụng bị tấn công:
Example
Ví dụ, chức năng admin để cập nhật thông tin user có thể bao gồm các bước sau:
Load form chứa chi tiết cho user cụ thể
Submit các thay đổi
Review các thay đổi và xác nhận
Đôi khi, website sẽ implement access control nghiêm ngặt trên một số bước này, nhưng bỏ qua các bước khác.
Hãy tưởng tượng một website nơi access control được áp dụng đúng cho bước thứ nhất và thứ hai, nhưng không áp dụng cho bước thứ ba. Kẻ tấn công có thể truy cập trái phép vào chức năng bằng cách bỏ qua hai bước đầu và trực tiếp submit request cho bước thứ ba với các parameter cần thiết.
Lab: Multi-step Process with No Access Control on One Step
Request dùng để upgrade role:
POST /admin-roles HTTP/2Host: 0a7900db03f9c0bb811252590030005b.web-security-academy.netCookie: session=KSKtZjhlBATCw56jmmGWpfAMnF31zNELUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:137.0) Gecko/20100101 Firefox/137.0Content-Type: application/x-www-form-urlencodedContent-Length: 45Origin: https://0a7900db03f9c0bb811252590030005b.web-security-academy.netReferer: https://0a7900db03f9c0bb811252590030005b.web-security-academy.net/admin-rolesusername=carlos&action=upgrade
Request dùng để xác nhận:
POST /admin-roles HTTP/2Host: 0a7900db03f9c0bb811252590030005b.web-security-academy.netCookie: session=KSKtZjhlBATCw56jmmGWpfAMnF31zNELUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:137.0) Gecko/20100101 Firefox/137.0Content-Type: application/x-www-form-urlencodedContent-Length: 30Origin: https://0a7900db03f9c0bb811252590030005b.web-security-academy.netReferer: https://0a7900db03f9c0bb811252590030005b.web-security-academy.net/adminaction=upgrade&confirmed=true&username=carlos
Sử dụng cookie của wiener:peter ở trong request xác nhận để tự upgrade quyền với các tham số như sau:
action=upgrade&confirmed=true&username=wiener
Referer-based Access Control
Một số ứng dụng kiểm soát truy cập dựa trên header Referer và cách làm này có thể bị bypass do attacker có thể chỉnh sửa bằng proxy:
Summary
Một số website dựa access control trên header Referer được submit trong HTTP request. Header Referer có thể được thêm vào request bởi browser để chỉ ra trang nào đã khởi tạo request.
Ví dụ, ứng dụng enforce access control mạnh mẽ trên trang admin chính tại /admin, nhưng đối với các sub-page như /admin/deleteUser chỉ kiểm tra header Referer. Nếu header Referer chứa URL /admin chính, thì request được cho phép.
Lab: Referer-based Access Control
Trang /admin bị kiểm soát truy cập khi sử dụng tài khoản wiener:peter.
Request dùng để upgrade role:
GET /admin-roles?username=carlos&action=upgrade HTTP/2Host: 0a62000f033d7793804103e90060006e.web-security-academy.netCookie: session=pFh24ubvigdIN7uMb1JvciEc3MHSTcFWUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:137.0) Gecko/20100101 Firefox/137.0
Tuy nhiên, khi gửi request trên có Referer là https://0a62000f033d7793804103e90060006e.web-security-academy.net/admin bằng tài khoản wiener:peter thì lại thành công:
Việc kiểm soát truy cập dựa trên vị trí địa lý có thể bị bypass bằng cách sử dụng proxy, VPN hoặc các cơ chế thay đổi vị trí địa lý ở phía client:
Summary
Một số website thực thi access control dựa trên vị trí địa lý của user. Điều này có thể áp dụng, ví dụ, cho các ứng dụng ngân hàng hoặc dịch vụ media nơi luật pháp nhà nước hoặc hạn chế kinh doanh được áp dụng. Các access control này thường có thể bị circumvent bằng việc sử dụng web proxy, VPN hoặc manipulation các cơ chế geolocation phía client.