Phân tích CVE-2023-23488

 Phân tích CVE-2023-23488

Mỗt lỗ hổng SQL Injection không xác thực ảnh hưởng đến tất cả phiên bản <2.9.8 của plugin Paid Memberships Pro của Wordpress. Tham khảo

Mình cài bản 2.9.6

Trong bài viết, lỗ hổng được đề cập nằm ở tham số code tại REST route. 

Tại file rest-api.php ta thấy nó có gọi đến hàm pmpro_rest_api_permissions_get_order()

Để truy cập vô thì ta sẽ truy cập đường dẫn sau 
http://localhost/wordpress/wp-json/pmpro/v1/order
Nhảy đến hàm pmpro_rest_api_permissions_get_order()
Thấy rằng nếu method là GET, route là /pmpro/v1/order và không có permission thì đoạn if sẽ được thực thi
Chú ý vào vào biến $code, có thể điều khiển được giá trị đầu vào. Input chưa được sanitize được đưa thẳng vô class MemberOrder. 
Nhảy đến class này để kiểm tra, thấy được đưa vô đối số $id
Đoạn if kiểm tra nếu $id là số thì gọi đến hàm getMemberOrderByID, còn không thì gọi đến getMemberOrderByCode.
Trong trường hợp này chúng ta sẽ truyền giá trị không phải là số, hãy xem hàm getMemberOrderByCode() hoạt động như nào.
 Đoạn query đang thực hiện nối chuỗi, với $code là đầu vào chưa được sanitize ban đầu và được thực thi thông qua get_var()

Đến đây, chúng ta đã xác định được hướng tấn công
Payload: http://localhost/wordpress/wp-json/pmpro/v1/order?code=konchan'

Đọc log thì thấy đã có lỗi xảy ra, trong trường hợp này attacker sẽ có thể lợi dụng time-base để trigger.
Theo như bài viết của anh Minh Tuấn Ngụy, thì wordpress sẽ thường tự động thêm backslash cho $_GET, $_POST, $SERVER, $COOKIE. Tuy nhiên do cơ chế loại bỏ backslash của Wordpress có khi sử dụng REST API nên gây ra lỗi trên. Cái này mình không đề cập đên mọi người có thể tham khảo bài của anh.
Tóm lại, lỗ hổng này không cần xác thực, attacker có thể chèn các đoạn truy vấn độc hại nhằm chiếm quyền quản trị và lấy cắp thông tin,..

Nhận xét

Bài đăng phổ biến từ blog này

KMACTF và nỗi buồn éo làm được gì cả T__T