Lỗ hổng SSRF nghiêm trọng trong PhpSpreadsheet: Cập nhật khẩn cấp!

Một lỗ hổng Server-Side Request Forgery (SSRF) nghiêm trọng đã được phát hiện trong thư viện PhpSpreadsheet phổ biến, cho phép kẻ tấn công chèn các đầu vào HTML độc hại khi xử lý tài liệu bảng tính. Đây là một CVE nghiêm trọng tiềm ẩn nguy cơ lớn cho các hệ thống sử dụng thư viện.
Lỗ hổng này, được gán mã CVE-2025-54370, ảnh hưởng đến nhiều phiên bản của gói phpoffice/phpspreadsheet. Nó mang mức độ nghiêm trọng cao với điểm CVSS v3.1 là 7.5 và CVSS v4.0 là 8.7, cho thấy khả năng khai thác và tác động đáng kể.
Phân tích Kỹ thuật Lỗ hổng SSRF trong PhpSpreadsheet
Lỗi bảo mật này được phát hiện bởi Aleksey Solovev từ Positive Technologies. Cụ thể, nó ảnh hưởng đến lớp PhpOfficePhpSpreadsheetWorksheetDrawing và đặc biệt là phương thức setPath. Phương thức này chịu trách nhiệm thiết lập đường dẫn cho các đối tượng vẽ trong bảng tính.
Lỗ hổng SSRF xảy ra khi một tài liệu HTML chứa các tham chiếu tài nguyên được xử lý và sau đó được hiển thị. Trong ngữ cảnh này, thư viện PhpSpreadsheet không thực hiện kiểm tra đầy đủ đối với các URL được cung cấp trong các thẻ hình ảnh hoặc các phần tử nhúng khác. Điều này cho phép thực hiện các cuộc tấn công Server-Side Request Forgery.
Lỗ hổng được phân loại theo CWE-918: Server-Side Request Forgery (SSRF), một loại lỗ hổng phổ biến nơi ứng dụng web có thể bị lừa để gửi yêu cầu HTTP đến một vị trí tùy ý do kẻ tấn công cung cấp. Trong trường hợp này, ứng dụng được dùng để truy xuất một URL được chỉ định từ phía máy chủ mà không có sự xác thực đầy đủ.
Kẻ tấn công có thể khai thác khả năng xử lý HTML của thư viện. Khi các chuỗi do người dùng kiểm soát được truyền đến trình đọc HTML, các tác nhân độc hại có thể tạo ra nội dung HTML được thiết kế đặc biệt để khai thác điểm yếu này.
Cơ chế Khai thác Lỗ hổng PhpSpreadsheet SSRF
Kịch bản tấn công điển hình liên quan đến việc tạo ra một tệp bảng tính chứa một phần tử HTML. Phần tử này, khi được thư viện PhpSpreadsheet xử lý, sẽ chứa các thẻ hình ảnh (<img>) với thuộc tính src được thiết lập để trỏ đến các tài nguyên mạng nội bộ hoặc các địa chỉ IP cục bộ. Khi thư viện cố gắng tải các hình ảnh này, nó sẽ thực hiện một yêu cầu từ phía máy chủ của ứng dụng đến các địa chỉ đó.
Nghiên cứu đặc biệt tập trung vào phiên bản 3.8.0 của thư viện, chứng minh sự hiện diện của lỗ hổng trong các bản phát hành gần đây. Nhiều dải phiên bản của thư viện phpoffice/phpspreadsheet, đặc biệt là những phiên bản không có các bản vá cần thiết, dễ bị tổn thương trước cuộc tấn công mạng này.
Kẻ nghiên cứu đã chứng minh lỗ hổng SSRF này bằng cách sử dụng một tệp HTML đơn giản được nhúng vào tài liệu bảng tính, chứa đoạn mã sau:
<img src="https://127.0.0.1:8080/internal_resource">
Khi một tài liệu bảng tính chứa payload HTML này được mở và xử lý thông qua trình đọc HTML của thư viện PhpSpreadsheet, sau đó được hiển thị, thư viện sẽ kích hoạt một yêu cầu HTTP GET đến địa chỉ http://127.0.0.1:8080/internal_resource. Điều này xác nhận thành công việc khai thác lỗ hổng SSRF, cho phép kẻ tấn công thực hiện các yêu cầu tùy ý từ phía máy chủ.
Ảnh hưởng và Nguy cơ Nghiêm trọng từ Lỗ hổng SSRF
Khả năng thực hiện các cuộc tấn công Server-Side Request Forgery thông qua lỗ hổng SSRF này mang lại nhiều nguy cơ nghiêm trọng, bao gồm:
- Truy cập Tài nguyên Nội bộ: Kẻ tấn công có thể truy cập các tài nguyên mạng nội bộ mà thông thường không thể truy cập từ bên ngoài, ví dụ như bảng điều khiển quản trị, API nội bộ hoặc hệ thống cơ sở dữ liệu.
- Thực hiện Quét Cổng (Port Scanning): Bằng cách thử các địa chỉ IP và cổng khác nhau, kẻ tấn công có thể lập bản đồ cấu trúc liên kết mạng nội bộ và xác định các dịch vụ đang chạy, phát hiện các điểm yếu khác.
- Tương tác với Dịch vụ Nội bộ: Lỗ hổng cho phép kẻ tấn công tương tác với các dịch vụ nội bộ không được bảo vệ hoặc không được tiếp xúc công khai, có thể dẫn đến việc thực hiện lệnh hoặc truy xuất dữ liệu nhạy cảm.
- Vượt qua Tường lửa và Cơ chế Kiểm soát Truy cập: Do các yêu cầu được thực hiện từ phía máy chủ ứng dụng, chúng có thể vượt qua các quy tắc tường lửa được cấu hình để chặn truy cập trực tiếp từ bên ngoài.
- Khả năng Tấn công Chuỗi: Một cuộc tấn công SSRF thành công có thể là bước đầu tiên để thực hiện các cuộc tấn công phức tạp hơn, như tấn công Cross-Site Request Forgery (CSRF) hoặc chiếm quyền điều khiển hệ thống hoàn toàn.
Khuyến nghị Khắc phục và Cập nhật Bản vá Khẩn cấp
Để giảm thiểu rủi ro ngay lập tức do lỗ hổng SSRF này, hành động cấp thiết nhất là nâng cấp thư viện PhpSpreadsheet lên các phiên bản đã được vá lỗi. Các nhà phát triển và quản trị hệ thống nên ưu tiên cập nhật bản vá cho tất cả các cài đặt PhpSpreadsheet của mình.
Điều này đặc biệt quan trọng đối với các ứng dụng web xử lý nội dung HTML do người dùng cung cấp hoặc các tệp bảng tính có khả năng chứa các phần tử HTML. Việc không cập nhật có thể để lại hệ thống trong tình trạng dễ bị tấn công.
Lỗ hổng CVE-2025-54370 này một lần nữa khẳng định tầm quan trọng của việc triển khai xác thực đầu vào nghiêm ngặt và xử lý an toàn nội dung do người dùng cung cấp trong các thư viện xử lý tài liệu. Các nhóm phát triển cần xem xét và tăng cường các biện pháp bảo mật hiện có khi tích hợp và xử lý bất kỳ nội dung nào từ nguồn bên ngoài.
Một biện pháp bảo vệ hiệu quả khác là áp dụng cơ chế lọc URL dựa trên danh sách cho phép (allowlist-based URL filtering) cho các tài nguyên như hình ảnh và các liên kết nhúng. Thay vì chặn các URL độc hại đã biết, phương pháp này chỉ cho phép truy cập các URL từ các nguồn đáng tin cậy đã được xác định trước, giảm thiểu đáng kể bề mặt tấn công SSRF.
Để biết thêm thông tin chi tiết về lỗ hổng và các bản vá, bạn có thể tham khảo cố vấn bảo mật chính thức từ GitHub: PHPOffice/PhpSpreadsheet Security Advisory GHSA-rx7m-68vc-ppxh. Việc theo dõi các thông báo bảo mật từ nhà cung cấp là yếu tố then chốt để duy trì an ninh cho ứng dụng.









