Sam Thomas, một nhà nghiên cứu bảo mật của Secarma, đã
phát hiện ra một kỹ thuật khai thác mới có thể giúp các tin tặc dễ dàng kích hoạt các lỗ hổng “deserialization” trong ngôn ngữ lập trình PHP.
Kỹ thuật mới này để lại hàng trăm nghìn ứng dụng web mở cho các cuộc tấn công thực thi mã từ xa, bao gồm các trang web được hỗ trợ bởi một số hệ quản trị nội dung website phổ biến như WordPress và Typo3.
Các lỗ hổng unserialization hoặc lây nhiễm đối tượng của PHP ban đầu được ghi lại trong năm 2009, có thể cho phép kẻ tấn công thực hiện các loại tấn công khác nhau bằng cách cung cấp các đoạn mã độc hại cho hàm unerialize() PHP.
Nếu bạn không biết, serialization là quá trình chuyển đổi các đối tượng dữ liệu thành một chuỗi đơn giản, và hàm unserialize giúp cho chương trình tạo lại một đối tượng từ một chuỗi.
Thomas phát hiện ra rằng kẻ tấn công có thể sử dụng các hàm có nguy cơ thấp đối với các tập tin nén Phar để kích hoạt tấn công “Deserialization” mà không yêu cầu sử dụng hàm Unserialize() trong một loạt các kịch bản.
Các tập tin Phar, một dạng lưu trữ trong PHP, lưu trữ siêu dữ liệu theo định dạng được tuần tự hóa, không được thực hiện bất cứ khi nào hàm hoạt động tập tin (fopen, file_exists, file_get_contents, v.v.) cố gắng truy cập vào tập tin lưu trữ.
"Điều này đúng cho cả hai hoạt động trực tiếp (như" file_exists ") và gián tiếp như các hoạt động xảy ra trong quá trình xử lý thực thể bên ngoài trong XML (nghĩa là khi một lỗ hổng XXE đang được khai thác)", Thomas nói.
Khai thác tấn công PHP Deserialization vào các trang web WordPress
Trong một bài báo chi tiết được phát hành tại hội nghị Black Hat tuần trước, Thomas đã chứng minh cách tấn công này có thể được thực hiện đối với các trang Wordpress bằng cách sử dụng một tài khoản tác giả để kiểm soát hoàn toàn máy chủ web.
Để khai thác thành công lỗ hổng, tất cả kẻ tấn công cần làm là tải lên tập tin nén Phar hợp lệ chứa đối tượng độc hại vào trong hệ thống lưu trữ tập tin website và làm cho hàm hoạt động của tập tin truy cập nó bằng cách sử dụng trình bao bọc luồng "phar: //".
Thomas cũng tiết lộ rằng một kẻ tấn công thậm chí có thể khai thác lỗ hổng này bằng cách sử dụng hình ảnh JPEG, ban đầu một tập tin nén Phar được chuyển thành JPEG hợp lệ bằng cách sửa đổi 100 byte đầu tiên của nó.
"Chức năng thu nhỏ nhất định trong ứng dụng [WordPress] hoạt động cho phép kẻ tấn công có đặc quyền tải lên và sửa đổi các mục media để có đủ quyền kiểm soát tham số được sử dụng trong cuộc gọi" file_exists "gây ra việc unserialization xảy ra", nhà nghiên cứu cho biết.
Khi hình thu nhỏ được tạo lên trên máy chủ WordPress được nhắm mục tiêu, kẻ tấn công có thể sử dụng một hàm khác để gọi cùng một tập tin hình ảnh dưới dạng tập tin nén Phar bằng cách sử dụng trình bao bọc luồng "phar: //", cuối cùng thực thi mã tùy ý.
"Lỗ hổng tồn tại do việc không đảm bảo an toàn deserialization của dữ liệu được truyền qua như một tập tin hình ảnh và sau đó được thực hiện thông qua 'phar: //' trong hàm 'wp_get_attachment_thumb_file' trong '/wpincludes/post.php' script,".
"Một kẻ tấn công được xác thực từ xa với khả năng tạo / chỉnh sửa bài đăng có thể tải lên một hình ảnh độc hại và thực thi mã PHP tùy ý trên hệ thống dễ bị tấn công".
Thomas đã báo cáo lỗ hổng này cho nhóm bảo mật WordPress hồi đầu năm ngoái và công ty đã thừa nhận vấn đề này. Tuy nhiên, bản vá do công ty phát hành không giải quyết được vấn đề hoàn toàn.
Thomas cũng đã báo cáo lỗ hổng cho Typo3 vào ngày 9 tháng 6 năm 2018 và nhà cung cấp đã giải quyết vấn đề trong các phiên bản 7.6.30, 8.7.17 và 9.3.