Sự kết hợp của 2 lỗ hổng CVE-2021-26855 và CVE-2021-27065
Khi sử dụng lỗ hổng SSRF để truy cập vào các entrypoint của Exchange, thì đều bị xử lý như 1 yêu cầu Un-Authenticated.
Qua mỗi lần tấn công, đều có một request tới “/ecp/proxyLogon.ecp”. Sau đó, các request tới ECP đều được thực hiện với quyền của người dùng “Administrator@mailbox”.
Dựa vào web.config trong folder “C:/Program Files/Microsoft/Exchange Server/V15/ClientAccess/ecp”, có thể xác định được class “Microsoft.Exchange.Management.ControlPanel.ProxyLogonHandler” đang handle các request tới entrypoint /ecp/proxyLogon.ecp.
Nội dung của class này khá đơn giản. Sau khi “Ctrl + Shift + F”, request đã được xử lý tại “Microsoft.Exchange.Management.ControlPanel .RbacSettings()”.
Đoạn xử lý này có thể hiểu đơn giản như sau:
Bước 1: Server sẽ lấy phần body của request tạo thành SerializedAccessToken(), sau đó tạo được phần body thỏa mãn có dạng:
Bước 2: Dựa vào serialized token vừa tạo, server tiếp tục dùng nó để tạo thành định danh cho request hiện tại.
Ngoài ra cần thỏa mãn thêm một số tham số đầu vào, nếu thuận lợi thì server sẽ trả về cookie: ASP.NET_SessionId và msExchEcpCanary, dùng để xác thực cho user vừa request.
Có thể hiểu đơn giản hơn như sau:
Như vậy đã có được session id và canary, tiếp theo cần thay vào request SSRF write file ban đầu để thực thi.
Tuy nhiên, bước này sẽ hiển thị thông báo "You don't have permission....".
Với SID sử dụng để proxylogon - S-1–5–21–1525789613–2932220202–353317642–3102, đây là SID của một user bình thường và không có đặc quyền với Exchange admin. SID của admin so với SID của người dùng thông thường không có sự khác biệt đáng kể, việc khác biệt được hiển thị ở ID cuối.
- SID của user john: S-1–5–21–1525789613–2932220202–353317642–3102
- SID của admin: S-1-5-21-1525789613-2932220202-353317642-500
Như vậy hoàn toàn có thể sử dụng một SID bất kỳ trong hệ thống để tìm được tài khoản administrator và chiếm quyền qua proxylogon.
Cùng với đó, cần một SID hợp lệ của user bất kỳ trong hệ thống để leo thang đặc quyền. Để lấy được SID khi chỉ biết mỗi username, tin tặc cần phải sử dụng tới các entrypoint: /autodiscover/autodiscover.xml và /mapi/emsmdb
Tính năng tại entrypoint /mapi sẽ trả về SID khi xảy ra lỗi.
Phần input body của request có thể lấy bằng cách sử dụng entrypoint /Autodiscover/autodiscover.xml:
Như vậy là đã hoàn thành bước cuối cùng cho chain RCE của proxylogon. Quá trình khai thác được tóm tắt lại như sơ đồ dưới đây.
Kết luận
Hiện nay, nhiều POC về 4 lỗ hổng nghiêm trọng trên Microsoft Exchange đã được các nhà nghiên cứu công khai trên Internet. Nếu khai thác thành công các lỗ hổng, tin tặc có thể chèn và thực thi lệnh trái phép, từ đó kiểm soát máy chủ thư điện tử và đánh cắp dữ liệu trên hệ thống. Quản trị viên và người dùng cần khẩn trương khắc phục lỗi và cập nhật bản vá Microsoft Exchange sớm nhất có thể, để bảo vệ hệ thống trước nguy cơ mất an toàn thông tin.