-
16/07/2025
-
0
-
7 bài viết
Một header, một lỗ hổng: Giải mã CVE-2025-53772 và cách đóng cửa bí mật
Một chuỗi ký tự nhỏ gọn, mã hóa, nén rồi gửi qua một header HTTP đã đủ để mở một cánh cửa bí mật trên nhiều máy chủ web. CVE-2025-53772 với điểm CVSS 8,8 không phải là một lỗi "xa xôi": nó chỉ ra một chi tiết tưởng chừng kỹ thuật và vô hại có thể biến thành điểm bật mở cửa cho kẻ tấn công. Bài viết này sẽ kéo bạn vào phía sau tấm rèm kỹ thuật, cùng tôi giải mã con đường tấn công và chỉ ra cách chặn đứng nó trước khi quá muộn.
Msdeploy hỗ trợ hai cơ chế truy cập chính:
Luồng xử lý rút gọn như sau:
Vấn đề cốt lõi là BinaryFormatter không kiểm soát kiểu (type) khi hủy tuần tự hóa dữ liệu nhận từ nguồn không tin cậy. Khi BinaryFormatter phục hồi một object graph do kẻ tấn công tạo, quá trình hủy tuần tự hóa có thể vô tình kích hoạt mã tùy ý thông qua nhiều cơ chế kỹ thuật: constructor của các kiểu, các callback tuần tự hóa, ví dụ ISerializable hoặc phương thức OnDeserialized, việc phục hồi các đối tượng tham chiếu (ví dụ IObjectReference) hoặc thậm chí bằng cách ghép nối delegate/gadget chain để triệu hồi các hàm như Process.Start.
Vì vậy, nếu máy chủ chấp nhận dữ liệu tuần tự hóa từ HTTP header, ở đây là các header cần thiết như Content-Type: application/msdeploy và MSDeploy.SyncOptions và header đó chứa payload GZip + Base64 được chuẩn bị sẵn thì kẻ tấn công có quyền truy cập hợp lệ tới dịch vụ có thể ép hệ thống hủy tuần tự hóa payload độc hại và dẫn tới thực thi mã từ xa.
1. Tổng quan về IIS Web Deploy
IIS Web Deploy (msdeploy) là bộ công cụ của Microsoft dùng để đóng gói và triển khai ứng dụng web, cấu hình IIS và các tài nguyên theo mô-đun (providers) lên máy chủ đích.Msdeploy hỗ trợ hai cơ chế truy cập chính:
- Qua Web Management Service (WMSvc), handler HTTP(S) /msdeploy.axd
- Qua Web Deploy Agent Service (MsDepSvc)
2. Cơ chế lỗ hổng
Lỗ hổng xuất hiện ở chỗ ứng dụng nhận một số header HTTP, điển hình MSDeploy.SyncOptions chứa dữ liệu đã được Base64 mã hóa rồi GZip nén và sau đó được hủy tuần tự hóa (deserialization) bằng BinaryFormatter.Luồng xử lý rút gọn như sau:
- Lấy nội dung header (ví dụ MSDeploy.SyncOptions)
- Base64-decode nội dung header thành nhị phân
- Giải nén (GZip)
- Dùng BinaryFormatter.Deserialize để hủy tuần tự hóa đối tượng từ luồng giải nén
Vấn đề cốt lõi là BinaryFormatter không kiểm soát kiểu (type) khi hủy tuần tự hóa dữ liệu nhận từ nguồn không tin cậy. Khi BinaryFormatter phục hồi một object graph do kẻ tấn công tạo, quá trình hủy tuần tự hóa có thể vô tình kích hoạt mã tùy ý thông qua nhiều cơ chế kỹ thuật: constructor của các kiểu, các callback tuần tự hóa, ví dụ ISerializable hoặc phương thức OnDeserialized, việc phục hồi các đối tượng tham chiếu (ví dụ IObjectReference) hoặc thậm chí bằng cách ghép nối delegate/gadget chain để triệu hồi các hàm như Process.Start.
Vì vậy, nếu máy chủ chấp nhận dữ liệu tuần tự hóa từ HTTP header, ở đây là các header cần thiết như Content-Type: application/msdeploy và MSDeploy.SyncOptions và header đó chứa payload GZip + Base64 được chuẩn bị sẵn thì kẻ tấn công có quyền truy cập hợp lệ tới dịch vụ có thể ép hệ thống hủy tuần tự hóa payload độc hại và dẫn tới thực thi mã từ xa.
3. Diễn giải luồng tấn công
- Kẻ tấn công tạo một object graph đã chỉnh sửa sao cho khi BinaryFormatter hủy tuần tự hóa, một hàm/mã do attacker chỉ định sẽ được gọi (ví dụ chuyển hướng delegate để kích hoạt Process.Start)
- Payload được nén bằng GZip rồi mã hóa bằng Base64 và chèn vào header HTTP MSDeploy.SyncOptions
- Gửi yêu cầu POST tới /msdeploy.axd hoặc tới agent service có các header cần thiết
- Khi máy chủ giải mã, giải nén và hủy tuần tự hóa, payload gây ra hành vi thực thi mã trên máy chủ trong ngữ cảnh tiến trình msdeploy
Lưu ý: ở đây chỉ mô tả ý tưởng tấn công. Việc cung cấp payload exploit chi tiết hoặc mã khai thác trực tiếp có thể bị lạm dụng và không được trình bày tại đây.
4. Điều kiện kích hoạt và phạm vi ảnh hưởng
- Endpoint chịu ảnh hưởng: msdeploy.axd (WMSvc) và msdeployagentservice (MsDepSvc).
- Yêu cầu: attacker phải có khả năng gửi request tới endpoint và thường cần quyền xác thực. Tuy nhiên nếu endpoint được mở ra ngoài mà không kiểm soát đủ, rủi ro cao.
- Tác động: thực thi mã từ xa với quyền của tiến trình Web Deploy (thường là quyền hệ thống hoặc service account có quyền trên máy chủ web), có thể dẫn tới chiếm quyền, leo thang, truy cập dữ liệu nhạy cảm hoặc phá hoại hệ thống.
5. Phát hiện và chỉ báo (IoC)
Các chỉ báo có thể giúp phát hiện tấn công hoặc thử nghiệm khai thác:- Log HTTP: các request tới /msdeploy.axd hoặc agent service có header Content-Type: application/msdeploy và header MSDeploy.SyncOptions chứa chuỗi dài Base64, đặc biệt Base64 kết quả giải mã bắt đầu bằng magic header của gzip. Lưu ý: nhiều payload hợp lệ có thể xuất hiện trong hoạt động deploy bình thường, cần so sánh bất thường.
- Request bất thường từ IP lạ đến endpoint msdeploy, request không kèm hành vi deploy thực tế (Content-Length: 0 nhưng có header payload lớn).
- Sự kiện tiến trình mới hoặc lệnh shell bất thường sinh ra bởi tiến trình msdeploy, kiểm tra các process spawn, lệnh cmd.exe, powershell hoặc tiến trình con lạ.
- Tích hợp hệ thống tập tin: file mới, scheduled task, service creation trùng thời điểm với request đáng ngờ.
- Logs hệ điều hành: Event ID liên quan tới khởi tạo tiến trình, lỗi deserialize, hoặc exception từ assembly Microsoft.Web.Deployment.
- Phát hiện request đến /msdeploy.axd có header MSDeploy.SyncOptions với độ dài lớn hơn ngưỡng (ví dụ > 1KB).
- Phát hiện Base64 string bắt đầu bằng chuỗi tương ứng với gzip khi giải mã (ví dụ gzip magic 1F 8B / Base64 thường bắt đầu bằng H4sI).
- Correlate request đó với sự kiện tạo process lạ trong vòng thời gian gần.
6. Giải pháp khẩn cấp
Trong khi chờ patch chính thức từ nhà cung cấp, các biện pháp giảm thiểu nhanh có hiệu quả:- Hạn chế truy cập mạng: Chặn/giới hạn truy cập tới endpoint msdeploy.axd và tới service agent bằng firewall chỉ cho phép IP hoặc mạng quản trị nội bộ truy cập. Đặt endpoint trên mạng quản trị thay vì public.
- Vô hiệu hóa service nếu không cần: Nếu không dùng Web Deploy, tạm dừng hoặc gỡ bỏ Web Deployment Agent Service và vô hiệu hóa endpoint WMSvc.
- Áp chính sách xác thực chặt chẽ: Yêu cầu kết nối qua HTTPS, xác thực client mạnh và hạn chế account có quyền deploy.
- WAF / NGFW: Tạo quy tắc chặn request có header Content-Type: application/msdeploy hoặc MSDeploy.SyncOptions chứa chuỗi Base64 dài hoặc có đặc trưng gzip. Phải thận trọng để không chặn deploy hợp lệ trong môi trường quản trị.
- Giám sát: Tăng mức logging cho dịch vụ, thu thập logs và kiểm tra các chỉ báo nêu trên.
7. Giải pháp lâu dài và khuyến cáo kỹ thuật
- Bảo trì mã nguồn / patching: Cài mọi bản vá do Microsoft phát hành cho msdeploy càng sớm càng tốt.
- Loại bỏ việc dùng BinaryFormatter: Tránh sử dụng BinaryFormatter cho bất kỳ dữ liệu đầu vào không tin cậy. Thay bằng các thư viện tuần tự hóa an toàn hơn: JSON-based serializers với allowlist kiểu, protobuf, System.Text.Json với kiểm soát kiểu hoặc thiết kế lại logic để không phục hồi đối tượng khả nghi từ input.
- Allowlist kiểu khi hủy tuần tự hóa: Nếu bắt buộc phải tuần tự/hủy tuần tự hóa, áp dụng cơ chế allowlist chỉ chấp nhận các kiểu an toàn, đồng thời từ chối các delegate, callback hoặc các kiểu có khả năng đứng ra thực thi hành vi.
- Kiểm soát truy cập và phân quyền: Chạy dịch vụ deploy dưới tài khoản ít đặc quyền nhất; áp dụng principle of least privilege.
- Quá trình review code và kiểm thử bảo mật: Thực hiện code review tập trung vào điểm hủy tuần tự hóa, kiểm thử fuzzing trên header và input, và kiểm thử bảo mật (SAST/DAST) định kỳ.
- Giám sát / EDR: Kết hợp EDR để phát hiện process spawn bất thường, thay đổi hệ thống cấp thấp, và hành vi tương tự tấn công.
8. Chính sách phản ứng sự cố
- Ngay lập tức xác định các máy chủ chạy msdeploy và kiểm tra nhật ký cho các request tới /msdeploy.axd/agent trong khoảng thời gian nghi ngờ.
- Nếu phát hiện request đáng ngờ: cô lập hệ thống khỏi mạng sản xuất, thu thập forensic (memory, process list, registry, scheduled tasks, event logs).
- Kiểm tra dấu hiệu hậu quả: file mới, tiến trình lạ, tài khoản bị tạo, kết nối mạng bất thường.
- Áp dụng mitigation tạm thời: chặn endpoint, disable service, rotate credentials).
- Cập nhật bản vá từ Microsoft, rà soát lại cấu hình và phục hồi từ snapshot/backup sạch nếu cần.
- Báo cáo theo quy trình nội bộ và, nếu cần, phối hợp với nhà cung cấp để disclosure/responsible disclosure.
Tạm kết
CVE-2025-53772 làm rõ một thực tế: việc hủy tuần tự hóa không kiểm soát, đặc biệt với BinaryFormatter là một bề mặt tấn công nghiêm trọng dẫn tới RCE. Đối với người phụ trách hệ thống và đội bảo mật, ưu tiên phải là phát hiện tất cả endpoint msdeploy, cô lập truy cập, và áp dụng patch cùng biện pháp hardening. Những bước này không chỉ chữa cháy; chúng ngăn một lỗ hổng kỹ thuật trở thành sự cố an ninh quy mô.Tham khảo từ Batuhan Er (Hawktrace)