V. Một số lỗ hổng kiểm soát truy cập khác
1. Lỗ hổng kiểm soát truy cập nhiều bước
Xem xét các bước trong một hệ thống thực hiện xử lý yêu cầu thay đổi thông tin tài khoản của người dùng:
- Bước 1. Nhận các thông tin sửa đổi gửi lên từ người dùng.
- Bước 2. Thực hiện tương tác với cơ sở dữ liệu để sửa đổi thông tin.
- Bước 3. Kiểm tra và xác nhận lại.
Trong mỗi bước nếu việc kiểm soát quyền truy cập từ người dùng không được chặt chẽ, kẻ tấn công có thể lợi dụng tính năng này bỏ qua một số bước để thực hiện mục đích xấu. Chẳng hạn bỏ qua bước 1, 2 trực tiếp truy cập tới hệ thống tại bước 3.
Phân tích lab Multi-step process with no access control on one step
Miêu tả lab đặt ra giả thuyết chúng ta đã có tài khoản với quyền quản trị là administrator:admin
. Trang quản trị chứa một quá trình nhiều bước thực hiện thay đổi vai trò người dùng. Chúng ta có thể thu thập cách trang quản trị hoạt động bằng tài khoản administrator
. Chúng ta còn được cung cấp một tài khoản hợp lệ wiener:peter
, nhiệm vụ cần khai thác lỗ hổng kiểm soát truy cập để leo quyền tài khoản wiener
lên quyền quản trị.
Đăng nhập với tài khoản administrator:admin
, tại trang Admin panel chứa chức năng upgrade vai trò người dùng. Thực hiện upgrade vai trò người dùng carlos
và quan sát lịch sử các request và response trong HTTP History trong Burp Suite.
Upgrade người dùng carlos
:
Xác nhận upgrade:
Người dùng được upgrade lên vai trò admin thành công:
Quan sát lịch sử trong HTTP History:
Đầu tiên, gửi tới đường dẫn /admin-roles
hai tham số username=carlos&action=upgrade
qua phương thức POST gồm tên người dùng và thao tác upgrade:
Tiếp theo, xác nhận thao tác upgrade, thêm tham số confirmed=true
:
Mở một trình duyệt ẩn danh mới, đăng nhập với tài khoản wiener:peter
. Với các thông tin đã có, chúng ta có thể sử dụng tài khoản wiener
gửi tham số username=wiener&action=upgrade
tới đường dẫn /admin-roles
bằng phương thức POST thử chức năng upgrade có hoạt động với người dùng thường không?
Tuy nhiên, nhận được thông báo "Unauthorized". Chúng ta biết rằng chức năng thay đổi vai trò người dùng hoạt động trong hai bước. Bởi vậy, thử bỏ qua bước thứ nhất (hệ thống khả năng thực hiện xác thực người dùng tại bước này), trực tiếp gửi các tham số action=upgrade&confirmed=true&username=wiener
bằng phương thức POST tới /admin-roles
:
Status code trả về 302 Found. Tức là chúng ta đã upgrade người dùng wiener
lên vai trò quản trị viên thành công!
2. Lỗ hổng kiểm soát truy cập khai thác qua header Referer
HTTP referer (từ chữ "referrer" vô tình bị viết sai chính tả) là một trường HTTP header xác định địa chỉ của trang web (tức là URI hoặc IRI) liên kết với tài nguyên được yêu cầu. Bằng cách kiểm lại trang giới thiệu, trang web mới có thể thấy yêu cầu bắt nguồn từ đâu. Ví dụ khi người dùng nhấn vào một liên kết trong một trình duyệt web, trình duyệt sẽ gửi một yêu cầu tới máy chủ lưu giữ trang web đích. Yêu cầu đó có bao gồm trường giới thiệu (referer), cho biết trang cuối cùng của người dùng sử dụng (trang mà họ đã nhấn vào liên kết). Ghi nhận trang chuyển tiếp được sử dụng để cho phép các trang web và máy chủ web xác định nơi mọi người đang truy cập chúng từ nơi nào, cho các mục đích quảng cáo hoặc thống kê.
Chúng ta cùng nhớ lại các tình huống đã gặp với yêu cầu là xóa tài khoản người dùng carlos
. Đầu tiên chúng ta sẽ cần truy cập vào đường dẫn tới /admin
là trang quản trị, và sau đó sẽ tiếp tục truy cập tới đường dẫn có chức năng xóa tài khoản người dùng là /admin/delete
và gửi tham số username
yêu cầu xóa tài khoản. Lỗ hổng kiểm soát truy cập qua tiêu đề Referer có thể xảy ra khi người dùng truy cập tới /admin/delete
, hệ thống kiểm tra giá trị tiêu đề Referer xem người dùng có phải tới từ đường dẫn nguồn là /admin
hay không, nếu đúng sẽ xác thực tin tưởng và thông qua yêu cầu. Bởi kẻ tấn công có thể thay đổi giá trị tiêu đề Referer nên cơ chế hoạt động này thực sự nguy hiểm!
Phân tích lab Referer-based access control
Miêu tả lab cho biết trang web kiểm tra thông tin tiêu đề Referer để xác thực người dùng. Chúng ta được cung cấp một tài khoản vai trò quản trị viên administrator:admin
để thu thập các đường dẫn cũng như thông tin liên quan tới chức năng upgrade vai trò người dùng. Chúng ta còn được cung cấp một tài khoản hợp lệ thông thường wiener:peter
, nhiệm vụ cần khai thác lỗ hổng trên thực hiện leo quyền tài khoản wiener
lên quyền quản trị viên.
Đăng nhập với tài khoản quản trị viên administrator:admin
, truy cập vào tùy chọn Admin panel, trong đó chứa chức năng upgrade tài khoản người dùng.
Thực hiện upgrade tài khoản carlos
lên quyền quản trị và quan sát request:
Request gửi tới đường dẫn /admin-roles
các tham số username=carlos&action=upgrade
bằng phương thức GET. Ngoài ra chú ý tiêu đề Referer.
Thay đổi URL nguồn trong tiêu đề Referer thành một đường dẫn bất kì và quan sát response:
Nhận được thông báo "Unauthorized". Điều này chứng tỏ hệ thống tồn tại cơ chế xác thực danh tính người dùng qua tiêu đề Referer, trong đó người dùng phải gửi yêu cầu upgrade tài khoản từ đường dẫn /admin
.
Đăng nhập với tài khoản wiener:peter
, thực hiện gửi tới đường dẫn /admin-roles
các tham số username=wiener&action=upgrade
bằng phương thức GET, thêm tiêu đề Referer với giá trị https://0aed00f6031ed0b7c0c86a80009c008c.web-security-academy.net/admin
:
Status code trả về 302 Found. Điều đó chứng tỏ chúng ta đã upgrade vai trò wiener
lên quản trị viên thành công!