Cấp độ nghiêm trọng của lỗ hổng
Một lỗ hổng nghiêm trọng vừa được phát hiện và đã được vá trong plugin Better Search Replace cho WordPress, mà hiện có hơn 1 triệu cài đặt trên website. Các cuộc tấn công thành công có thể dẫn đến việc xóa tệp tin ngẫu nhiên, truy xuất dữ liệu nhạy cảm và thực thi mã.
Screenshot of severity score rating of 9.8 of a vulnerability discovered in Better Search Replace WordPress plugin
Mức độ nghiêm trọng của lỗ hổng được đánh giá theo một hệ thống điểm số với các hạng mục từ thấp đến nghiêm trọng:
- Thấp: 0.1-3.9
- Trung bình: 4.0-6.9
- Cao: 7.0-8.9
- Nghiêm trọng: 9.0-10.0
Mức độ nghiêm trọng của lỗ hổng phát hiện trong plugin Better Search Replace được đánh giá là Nghiêm trọng, là mức độ cao nhất, với điểm số là 9.8 trên thang điểm nghiêm trọng từ 1-10.
Plugin Better Search Replace cho WordPress
Plugin này được phát triển bởi WP Engine nhưng ban đầu nó được tạo ra bởi công ty phát triển Delicious Brains và sau đó được WP Engine mua lại. Better Search Replace là một công cụ WordPress phổ biến giúp đơn giản hóa và tự động hóa quá trình chạy tìm kiếm và thay thế trên cơ sở dữ liệu website WordPress, rất hữu ích trong quá trình di chuyển site hoặc máy chủ. Plugin này có phiên bản miễn phí và phiên bản Pro có phí.
Trang web của plugin liệt kê các tính năng của phiên bản miễn phí như sau:
- Hỗ trợ Serialization cho tất cả các bảng
- Khả năng chọn các bảng cụ thể
- Khả năng chạy 'thử nghiệm' để xem có bao nhiêu trường sẽ được cập nhật
- Không yêu cầu máy chủ ngoài việc cài đặt WordPress đang chạy
- Hỗ trợ WordPress Multisite
Phiên bản Pro có phí có các tính năng bổ sung như khả năng theo dõi những gì đã thay đổi, khả năng sao lưu và nhập cơ sở dữ liệu trong khi plugin đang chạy, và hỗ trợ mở rộng.
Sự phổ biến của plugin đến từ sự dễ sử dụng, tính hữu ích và một lịch sử của việc là một plugin đáng tin cậy.
Lỗ hổng PHP Object Injection
Một lỗ hổng PHP Object Injection, trong ngữ cảnh của WordPress, xảy ra khi một đầu vào do người dùng cung cấp không được unserialize an toàn. Unserialization là quá trình chuyển đổi các biểu diễn chuỗi của các đối tượng trở lại thành đối tượng PHP.
Tổ chức phi lợi nhuận Open Worldwide Application Security Project (OWASP) cung cấp mô tả chung về lỗ hổng PHP Object Injection:
'PHP Object Injection là một lỗ hổng cấp ứng dụng có thể cho phép một kẻ tấn công thực hiện các loại tấn công độc hại khác nhau, như Thực thi Mã, SQL Injection, Traversal Đường dẫn và Từ chối dịch vụ Ứng dụng, tùy thuộc vào ngữ cảnh.
Lỗ hổng xảy ra khi đầu vào do người dùng cung cấp không được làm sạch đúng cách trước khi được truyền đến hàm unserialize() của PHP. Vì PHP cho phép serialization đối tượng, kẻ tấn công có thể truyền chuỗi serialized tùy ý đến một cuộc gọi unserialize() dễ bị lỗ hổng, dẫn đến việc inject đối tượng PHP ngẫu nhiên vào phạm vi ứng dụng.
Để khai thác thành công một lỗ hổng PHP Object Injection, phải đáp ứng hai điều kiện:
- Ứng dụng phải có một lớp thực hiện một phương thức thần kỳ PHP (như __wakeup hoặc __destruct) có thể được sử dụng để thực hiện các cuộc tấn công độc hại, hoặc bắt đầu một 'chuỗi POP'.
- Tất cả các lớp được sử dụng trong cuộc tấn công phải được khai báo khi hàm unserialize() dễ bị lỗ hổng được gọi, nếu không thì autoload đối tượng phải được hỗ trợ cho các lớp đó.
Nếu kẻ tấn công có thể tải lên (inject) một đầu vào để bao gồm một đối tượng serialized theo sở thích của họ, họ có thể tiềm ẩn thực thi mã ngẫu nhiên hoặc đe dọa an ninh của website. Như đã đề cập ở trên, loại lỗ hổng này thường phát sinh do việc không kiểm duyệt đúng đắn các đầu vào của người dùng. Kiểm duyệt là quá trình chuẩn để kiểm tra dữ liệu đầu vào sao cho chỉ có các loại đầu vào được mong đợi được phép và đầu vào không an toàn sẽ bị từ chối và chặn.
Trong trường hợp của plugin Better Search Replace, lỗ hổng được tiết lộ trong cách nó xử lý deserialization trong quá trình tìm kiếm và thay thế. Một tính năng an toàn nghiêm trọng bị thiếu trong tình huống này là chuỗi POP – một chuỗi các lớp và chức năng liên kết mà kẻ tấn công có thể sử dụng để kích hoạt hành động độc hại khi một đối tượng được unserialize.
Mặc dù plugin Better Search Replace không chứa chuỗi đó, nhưng nguy cơ vẫn tồn tại nếu một plugin hoặc chủ đề khác cài đặt trên cùng website chứa một chuỗi POP, điều này có thể cho phép kẻ tấn công tiến hành tấn công.
Wordfence mô tả lỗ hổng:
'Plugin Better Search Replace cho WordPress có lỗ hổng PHP Object Injection trong tất cả các phiên bản cho đến, và bao gồm, phiên bản 1.4.4 thông qua deserialization của đầu vào không tin cậy.
Điều này khiến cho kẻ tấn công không cần xác thực có thể inject một đối tượng PHP.
Không có chuỗi POP nào có mặt trong plugin có lỗ hổng. Nếu một chuỗi POP có mặt thông qua một plugin hoặc chủ đề bổ sung cài đặt trên hệ thống mục tiêu, điều này có thể cho phép kẻ tấn công xóa tệp tin ngẫu nhiên, truy xuất dữ liệu nhạy cảm, hoặc thực thi mã.
Biện pháp phòng ngừa và cập nhật từ WP Engine
Để đáp ứng với việc phát hiện này, WP Engine đã nhanh chóng giải quyết vấn đề. Bản ghi sổ thay đổi cho bản cập nhật lên phiên bản 1.4.5, phát hành vào ngày 18 tháng 1, 2024, nhấn mạnh các biện pháp đã được thực hiện:
Security: Unserializing an object during search and replace operations now passes ‘allowed_classes’ => false to avoid instantiating the object and potentially running malicious code stored in the database.
Bản cập nhật này được thực hiện sau khi Wordfence thông báo trách nhiệm về lỗ hổng vào ngày 18 tháng 12, 2023, và sau đó là quá trình phát triển và kiểm thử của WP Engine cho bản vá lỗi.
Người dùng của plugin Better Search Replace được khuyến khích cập nhật lên phiên bản mới nhất ngay lập tức để bảo vệ website của họ khỏi các hoạt động không mong muốn.