Thông tin lỗ hổng

Trong tuần vừa rồi, các nhà nguyên cứu bảo mật từ Sucuri đã phát hiện một lỗ hổng cho phép kẻ tấn công chưa được xác thực leo thang quyền và thay đổi nội dung các bài viết thông qua REST API của WordPress.

Lỗ hổng tồn tại từ phiên bản WordPress 4.7.0 và 4.7.1 và được vá trong bản 4.7.2

Chi tiết kỹ thuật tấn công

Lỗ hổng được khai thác bằng cách kết hợp 2 vấn đề trong WordPress:
Đầu tiên, các tham số ID được nằm ở tập tin /wp-includes/restapi/endpoints/class-wp-rest-posts-controller.php truyền vào bằng đường dẫn /wp-json/wp/v2/posts/1234. Tham số ID thông qua bộ lọc và chỉ nhận giá trị truyền vào là số nguyên (Integer), tuy nhiên bằng cách thêm ?id=1234helloword (/wpjson/wp/v2/posts/1234?id=12345helloworld) kẻ tấn công có thể vượt mặt bộ lọc này và lúc này giá trị của tham số ID1234helloword


Tiếp theo, tham số ID được sử dụng ở chức năng update_item_permissions_checkupdate_item. Lúc này, nếu không có bài viết nào được tìm thấy với tham số ID đã cho, chức năng kiểm tra quyền sẽ trả về True và cho phép người dùng thực hiện chức năng update_item để tìm kiếm và cập nhật bài viết. Tuy nhiên, hàm update_item thực hiện ép kiểu tham số ID thành số nguyên như vậy 1234helloword sẽ thành 1234 và cũng là một bài viết hợp lệ trong hệ thống.


Như vậy, bằng các bước trên, kẻ tấn công có thể thực hiện vượt mặt việc kiểm tra quyền của ứng dụng và thay đổi nội dung bài viết.

Hướng dẫn vá lỗi

Hiện tại đã ghi nhận xuất hiện một số cuộc tấn công trên mạng thông qua lỗ hổng. Người dùng nên thực hiện cập nhật phiên bản mới nhất càng sớm càng tốt.