Phát hiện lỗ hổng nghiêm trọng trong tính năng chuyển đổi file của Microsoft Graph API


Một vài tháng trước, trong quá trình kiểm tra bảo mật một ứng dụng web của khách hàng, một chuyên gia bảo mật phát hiện một tính năng cho phép người dùng chuyển đổi các định dạng tài liệu bất kỳ sang PDF và sau đó đăng trực tiếp lên SharePoint thông qua giao diện đồ họa rất tiện lợi.
Tính năng này do một ứng dụng nội bộ của khách hàng quản lý. Tuy nhiên, khi chuyển đổi từ định dạng HTML sang PDF, người này đã phát hiện ra một vấn đề nghiêm trọng: ứng dụng có thể truy xuất và đọc được các tệp tin trong hệ thống máy chủ cục bộ. Phát hiện này được báo cáo ngay lập tức như một lỗ hổng bảo mật mức nghiêm trọng, kèm theo bằng chứng và bản minh họa (PoC).
Trong buổi báo cáo cuối cùng với khách hàng, trưởng dự án đã cảm ơn vì đã phát hiện ra lỗ hổng, nhưng đồng thời cũng chia sẻ một thông tin đáng chú ý: tệp web.config xuất hiện trong ảnh chụp màn hình không thuộc hệ thống của họ. Họ chỉ sử dụng một lớp bao (wrapper) bên ngoài để gọi API chính thức của Microsoft, và đề nghị chuyên gia này nên gửi báo cáo trực tiếp tới Microsoft.
Ngay sau cuộc gọi đã tiến hành thử nghiệm lại trong môi trường SharePoint nội bộ (Microsoft 365). Tối hôm đó (đúng vào tối thứ Sáu) và người này dành thời gian để tái hiện lại lỗi và gửi báo cáo cho Trung tâm Phản hồi Bảo mật Microsoft (MSRC). Kết quả: 4 tháng sau, Microsoft trao thưởng 3000 USD cho phát hiện này với mức đánh giá “Nghiêm trọng”
Chi tiết lỗ hổng
Microsoft Graph API cho phép người dùng tải về các tệp đã tải lên theo nhiều định dạng khác nhau. Theo tài liệu chính thức của Microsoft, API này hỗ trợ chuyển đổi các tệp Office (như Word, Excel, PowerPoint…) sang PDF, hoặc sang HTML thông qua tham số format
trong HTTP request.
Danh sách các định dạng được hỗ trợ chuyển sang PDF bao gồm:
csv, doc, docx, odp, ods, odt, pot, potm, potx, pps, ppsx, ppsxm, ppt, pptm, pptx, rtf, xls, xlsx
Tuy nhiên, chuyên gia bảo mật này đã phát hiện một hành vi chưa được tài liệu hóa: Graph API cũng cho phép chuyển từ HTML sang PDF, mặc dù điều này không được công khai.
Vấn đề trở nên nghiêm trọng khi người dùng nhúng các thẻ HTML như <embed>
, <object>
, hoặc <iframe>
vào nội dung HTML. Khi đó, quá trình chuyển đổi sẽ tự động chèn các tệp tin từ hệ thống máy chủ vào file PDF đầu ra — kể cả những tệp nằm ngoài thư mục gốc của web server.
Tác động của lỗ hổng
Điều này dẫn đến một kiểu tấn công gọi là Local File Inclusion (LFI). Kẻ tấn công có thể lợi dụng để truy cập các tệp nhạy cảm trên máy chủ như:
Tệp cấu hình
web.config
win.ini
Các thông tin xác thực cơ sở dữ liệu
Mã nguồn ứng dụng
Mặc dù trong quá trình thử nghiệm, nhà nghiên cứu bảo mật này chỉ có thể truy cập một số tệp phổ biến như web.config
và win.ini
, nhưng về lý thuyết, nếu kẻ tấn công đoán đúng đường dẫn của các tệp tạm (temporary files), hoàn toàn có khả năng xảy ra rò rỉ dữ liệu giữa các tenant trong môi trường đa người dùng (multi-tenant).
Cách khai thác
Việc khai thác rất đơn giản, gồm 3 bước:
Tải tệp HTML chứa mã độc lên SharePoint thông qua Microsoft Graph API
Yêu cầu chuyển đổi tệp vừa tải sang định dạng PDF
Tải xuống file PDF — lúc này nó sẽ chứa nội dung của tệp nội bộ trên máy chủ (ví dụ:
web.config
) do mã độc đã yêu cầu nhúng trong HTML
Tham khảo
Export to PDF allows local file inclusion/path traversal in Microsoft 365 - hn security
Subscribe to my newsletter
Read articles from Vũ Nhật Lâm directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
