Plugin WordPress GDPR cookie consent, giúp tuân thủ GDPR dễ dàng cho người dùng, bị phát hiện dễ bị tổn thương do kiểm soát truy cập không đúng. Lỗ hổng này dẫn đến lỗ hổng nghiêm trọng như leo thang đặc quyền (privilege escalation) và stored XSS. Plugin GDPR cookie consent đang được dùng chủ động trên hơn 700.000 trang WordPress tại thời điểm viết.
Dòng Thời Gian Lỗ Hổng
- Báo cáo – 4 tháng 2, 2020
- Đã vá – 10 tháng 2, 2020
- Phiên bản bị ảnh hưởng – Tất cả phiên bản <=1.8.2
- Phiên bản đã vá – 1.8.3
Lỗ hổng được báo cáo trước cho wordpress.org. Sau đó, plugin tạm thời bị gỡ khỏi kho WordPress. WordPress gỡ bỏ cấm ngay khi bản vá có sẵn ngày 10 tháng 2.
Ai đang ở phiên bản <=1.8.2 có thể bị hack. Vì vậy cập nhật lên phiên bản vá = 1.8.3 sớm nhất có thể.
Hiểu Lỗ Hổng Của Plugin GDPR
Lỗ hổng nằm ở cli_policy_generator trong --construct method. cli_policy_generator được thực thi qua WordPress AJAX API – ajax_policy_generator thiếu kiểm tra khả năng quan trọng. Do đó dù mã nonce gửi qua AJAX, nó không được xác minh trong toàn bộ framework PHP.
ajax_policy_generator cho phép ba hành động: autosave_contant_data, save_contentdata, và get_policy_pageid.
Hai hành động – autosave_contant_data, save_contentdata dễ bị tấn công. Trong khi autosave_contant_data dẫn đến privilege escalation, save_contentdata dẫn đến stored XSS.
Lỗ Hổng Trong save_contentdata
save_contentdata của cli_policy_generator cho phép GDPR cookie lưu như page post type. Khai thác cho phép bất kỳ người dùng xác thực với quyền thấp như subscriber thay đổi trạng thái bài đăng. Bất kỳ người dùng xác thực nào có thể publish bài, hoặc chuyển bài đã publish sang draft. Hoặc tồi tệ hơn, chuyển toàn bộ trang web sang draft khiến sập.
public function save_contentdata() { $out=array( 'response'=>true, 'er'=>'' ); $content_data=isset($_POST['content_data']) ? $_POST['content_data'] : array(); $page_id=(int) isset($_POST['page_id']) ? $_POST['page_id']*1 : 0; $enable_webtofee_powered_by=(int) isset($_POST['enable_webtofee_powered_by']) ? $_POST['enable_webtofee_powered_by']*1 : 0; $id=wp_insert_post( array( 'ID'=>$page_id, //if ID is zero it will create new page otherwise update 'post_title'=>'Cookie Policy', 'post_type'=>'page', 'post_content'=>Cookie_Law_Info_Cli_Policy_Generator::generate_page_content($enable_webtofee_powered_by,$content_data,0), 'post_status' => 'draft', //default is draft ) ); if(is_wp_error($id)) { $out=array( 'response'=>false, 'er'=>__('Error','cookie-law-info'), //'er'=>$id->get_error_message(), ); }else { Cookie_Law_Info_Cli_Policy_Generator::set_cookie_policy_pageid($id); $out['url']=get_edit_post_link($id); } return $out; }
Lỗ Hổng Trong autosave_contant_data
autosave_constant_data lưu GDPR cookie tạm thời trong cli_pg_content_data, trong khi admin vẫn chỉnh sửa.
Do thiếu kiểm tra xác thực trong cli_pg_content_data, bất kỳ người dùng xác thực nào có thể chèn mã JavaScript độc hại vào trang web có plugin GDPR Cookie Consent.
public function autosave_contant_data() { global $wpdb; $scan_table=$wpdb->prefix.$this->main_tb; $out=array( 'response'=>true, 'er'=>'' ); $content_data=isset($_POST['content_data']) ? $_POST['content_data'] : array(); $page_id=isset($_POST['page_id']) ? $_POST['page_id'] : ''; $enable_webtofee_powered_by=(int) isset($_POST['enable_webtofee_powered_by']) ? $_POST['enable_webtofee_powered_by']*1 : 0; if(is_array($content_data)) { $content_html=Cookie_Law_Info_Cli_Policy_Generator::generate_page_content($enable_webtofee_powered_by,$content_data); update_option('cli_pg_content_data',$content_html); }else { $out=array( 'response'=>false, 'er'=>__('Error','cookie-law-info') ); } return $out; }
Bản Vá Có Sẵn! Cập Nhật Ngay
Cập nhật lên phiên bản mới nhất 1.8.3 và bảo vệ trang web bằng tường lửa.
Tường lửa Astra bảo vệ trang web khỏi tấn công như XSS, SQLi, CSRF, LFI, RFI, Spam, Bad bots, OWASP Top 10, và nhiều hơn. Bắt đầu với Astra siêu dễ. Cách làm:
- Chọn gói và Đăng ký.
- Cài Astra theo vài bước tự phục vụ (tốn <5 phút).
Đó là tất cả. Astra Firewall đang chủ động bảo vệ bạn khỏi mọi tấn công có thể đến. Bây giờ bạn giám sát trang web từ bảng điều khiển Astra.
Vẫn không chắc? Nhận demo Astra từ đây.
Nếu có câu hỏi bình luận dưới hoặc nhắn tin. Chúng tôi hứa trả lời 🙂