Theo các chuyên gia, 4 lỗ hổng được khai thác trong chiến dịch tấn công có chủ đích có định danh: CVE-2021-26855 (Mail Exchange Pre-Auth SSRF), CVE-2021-26857 (Post-Auth Deserialization), CVE-2021-26858 (Post-Auth arbitrary file write) và CVE-2021-27065 (Post-Auth arbitrary file write).
Các entrypoint được sử dụng đều có dạng: “/ecp/x.js”. Điều đặc biệt của cuộc tấn công là chỉ với 1 request tới 1 file chưa từng tồn tại trên server, tin tặc có thể trigger được SSRF và gửi full request tới server backend.
Phiên bản để nghiên cứu là Microsoft Exchange Server 2016 CU 18 vá lỗ hổng định danh CVE-2021-26855. Phiên bản thực hiện để diff với patch mới nhất là bản patch được release ngay trước đó 2020 Dec Patch - KB4593465
Thông tin về bản Microsoft Exchange Server 2016 thử nghiệm để phân tích lỗ hổng
Bên trong các file update này có chứa các file binary/dll sẽ được patch, hoàn toàn có thể giải nén tất cả ra bằng nhiều công cụ (bài báo này dùng công cụ 7zip).
Giải nén Microsoft Exchange Server 2016
Các file dll được giải nén đa phần được viết bằng dotNet. Do đó, để tiếp tục phát triển sử dụng dnSpy để (giải nén) decompile tất cả file dll này ra dạng .cs và sử dụng cho việc diff sau đó.
Để decompile tất cả file dll, người dùng cần import vào dnSpy và chọn “Export to Project”.
Lưu ý rằng trong setting của dnspy, phần decompiler cần bỏ tick mục “Show tokens, RVA …” để bỏ qua các comment về địa chỉ, RVA… gây cản trở cho việc diff sau này.
Việc decompile sẽ tốn khoảng 30 phút cho cả 2 bản vá. Tuy nhiên, do quá trình decompile sẽ có một số lỗi xảy ra hoặc là một số string mà developer để lại, cần phải dọn dẹp gọn gàng lại một lần nữa trước khi diff, dưới đây là một ví dụ:
Quá trình diff cũng khá mất thời gian do có nhiều byte rác vẫn còn lại trong code.
Việc phát hiện lỗ hổng được thực hiện bằng diff, thay vì các challenge spotthebugs được phổ biến trên Internet. Sau khi diff, phát hiện ra có một vài thay đổi quan trọng tại dll: Microsoft.Exchange.FrontEndHttpProxy.
Tại BEResourceRequestHandler, method ShouldBackendRequestBeAnonymous() được thêm mới.
BEResourceRequestHandler là class sẽ được dùng vào việc handle các request có dạng resource (các file có đuôi .js, .css…). Việc xác định class này có thể handler request được hay không dựa vào method BEResourceRequestHandler.CanHandle().
Đầu tiên là sẽ kiểm tra sự tồn tại của một cookie đặc biệt với method GetBEResouceCookie(). Method này sẽ lấy và trả về giá trị cookie “X-BEResource”
Tiếp sau đó, BEResourceRequestHandler.IsResourceRequest() sẽ kiểm tra xem URL request có đuôi dạng các file resource hay không.
Giá trị “X-BEResource” sau đó tiếp tục được truyền vào BackEndServer.FromString() để xác định BackEnd Server cho request này.
BackEndServer.FromString() xử lý cookie X-BEResource như sau
Để thỏa mãn các điều kiện trên thì X-BEResource sẽ có dạng như sau:
X-BEResource=EXCHANGE2016~1942062522;
Tại ProxyRequestHandler.BeginProxyRequest() sẽ gọi tới GetTargetBackEndServerUrl() để xác định uri sắp được forward tới Method GetTargetBackEndServerUrl() có nội dung như sau:
Nội dung của đoạn này có chức năng xây dựng lại url sẽ chuyển tiếp vào backend. Trong đó, Host của request được xác định bằng BackEndServer.Fqdn, kết hợp với BEResourceRequestHandler phía trên, giá trị BackEndServer.Fqdn này lại có thể điều khiển được bằng cookie X-BEResource.
Bằng sự kết hợp ngẫu nhiên, lỗ hổng SSRF CVE-2021-26855 ra đời. Để khai thác cần chỉnh sửa cookie thành dạng:
X-BEResource=EXCHANGE2016/owa/auth/logon.aspx?a=~1942062522;
Sau khi được xử lý qua ProxyRequestHandler, url cuối cùng được forward tới Backend có dạng như sau:
Như vậy là đã có thể gửi request tới server Backend mà không bị cản trở. Việc quyết định request qua proxy có cần xác thực (Authenticated) hay không được quyết định tại ProxyRequestHandler.PrepareServerRequest().
Với trường hợp các request được xử lý bởi class BEResourceRequestHandler, luồng chương trình sẽ thực thi vào nhánh else cuối cùng, nghĩa là cho phép Authenticated.
Chính điều này khiến lỗ hổng SSRF trở nên đặc biệt hơn. Hãng Microsoft đã khắc phục lỗ hổng này bằng cách thêm method ShouldBackendRequestBeAnonymous() vào class BEResourceRequestHandler để không cho phép các request này được gửi cred vào backend.
Luồng đi của 1 request trên Exchange server có dạng như sau:
Nghiên cứu về log tấn công từ một số bài phân tích, có thể thấy tin tặc sử dụng tính năng ResetOAB trong Exchange admin center để ghi file.
Để khai thác lỗ hổng này, đầu tiên tin tặc sẽ cần một tài khoản Admin mail exchange, sau đó sửa param External URL trong Exchange admin > Servers > Virtual Directories.
Sau khi đã cài đặt tham số “External URL”, tiến hành sử dụng tính năng ResetOABVirtualDirectories và nhập path của file cần ghi.
Sau khi thực hiện, file sẽ được ghi vào đường dẫn đã định sẵn với nội dung có thể điều khiển tùy ý.
Như vậy là đã có thể ghi shell tùy ý, lỗ hổng CVE-2021-27065 này không quá khó khăn để phát hiện và thực thi. Phần tiếp theo của bài báo sẽ giới thiệu về sự kết hợp hoàn hảo giữa các lỗ hổng bảo mật.
Nguyễn Tiến Giang (VNPT)
08:00 | 21/11/2017
11:00 | 07/05/2021
16:00 | 04/03/2021
10:00 | 18/10/2024
Công ty bảo mật Zimperium (Mỹ) đã xác định được 40 biến thể mới của trojan ngân hàng TrickMo trên Android. Các biến thể này được liên kết với 16 chương trình dropper (một loại trojan horse để cài đặt phần mềm độc hại) và 22 cơ sở hạ tầng của máy chủ điều khiển và ra lệnh (C2) riêng biệt, với các tính năng mới để đánh cắp mã PIN Android.
10:00 | 18/10/2024
GitLab đã phát hành bản cập nhật bảo mật cho Community Edition (CE) và Enterprise Edition (EE) để giải quyết 08 lỗ hổng bảo mật, bao gồm một lỗ hổng nghiêm trọng có thể cho phép thực thi các CI/CD Pipeline tùy ý.
07:00 | 10/09/2024
Trong bối cảnh chuyển đổi số và hội nhập quốc tế ngày càng sâu rộng, Việt Nam đang trở thành mục tiêu hấp dẫn cho các cuộc tấn công chuỗi cung ứng tinh vi. Các doanh nghiệp Việt từ các tổ chức nhỏ đến các tập đoàn lớn đều phải đối mặt với nguy cơ bị tấn công qua những lỗ hổng bảo mật trong hệ thống của đối tác hay nhà cung cấp.
15:00 | 26/07/2024
Ngày 20/7, cảnh sát Tây Ban Nha thông báo đã bắt giữ ba tin tặc được cho là thực hiện vụ tấn công mạng nhằm vào Tây Ban Nha và các nước thành viên khác trong Tổ chức Hiệp ước Bắc Đại Tây Dương (NATO) với các mục đích khủng bố.
Các cơ quan chính phủ tại Mỹ, Úc và Canada đưa ra cảnh báo các tác nhân đe dọa được nhà nước Iran bảo trợ sử dụng kỹ thuật tấn công Brute Force và nhiều phương thức khác để triển khai các chiến dịch tấn công mạng nhắm vào các tổ chức cơ sở hạ tầng quan trọng.
10:00 | 25/10/2024