Phiên bản WordPress thấp hơn 2.8.4 tiềm ẩn một lỗi bảo mật rất nghiêm trọng có thể bị chiếm quyền quản trị của Website sử dụng WordPress. Bằng cách tận dụng một lỗi lập trình trong file wp-login.php khiến cho việc reset mật khẩu của tài khoản quản trị và gửi thông tin tới email của kẻ xâm nhập.
Nguyên nhân
Khi WordPress được yêu cầu reset lại mật khẩu của tài khoản quản trị thì sẽ có một email được gửi tới mô tả yêu cầu và liên kết xác nhận.
Someone has asked to reset the password for the following site and username.
http://DOMAIN_NAME.TLD/wordpress/To reset your password visit the following address, otherwise just ignore this email and nothing will happen.
http://DOMAIN_NAME.TLD/wordpress/wp-login.php?action=rp&key=o7naCKN3OoeU2KJMMsag
Vấn đề chính là ở tham số $key trong mã nguồn.
wp-login.php, dòng 186:
function reset_password($key) { global $wpdb; $key = preg_replace(’/[^a-z0-9]/i’, ”, $key); if ( empty( $key ) ) return new WP_Error(’invalid_key’, __(’Invalid key’)); $user = $wpdb->get_row($wpdb->prepare(”SELECT * FROM $wpdb->users WHERE user_activation_key = %s”, $key)); if ( empty( $user ) ) return new WP_Error(’invalid_key’, __(’Invalid key’)); …[snip]…. line 276: $action = isset($_REQUEST['action']) ? $_REQUEST['action'] : ‘login’; $errors = new WP_Error(); if ( isset($_GET['key']) ) $action = ‘resetpass’; // validate action so as to default to the login screen if ( !in_array($action, array(’logout’, ‘lostpassword’, ‘retrievepassword’, ‘resetpass’, ‘rp’, ‘register’, ‘login’)) && false === has_filter(’login_form_’ . $action) ) $action = ‘login’;
tại dòng 370:
break; case ‘resetpass’ : case ‘rp’ : $errors = reset_password($_GET['key']); if ( ! is_wp_error($errors) ) { wp_redirect(’wp-login.php?checkemail=newpass’); exit(); } wp_redirect(’wp-login.php?action=lostpassword&error=invalidkey’); exit(); break;
Nguyên nhân lỗi này là trong các trang web trên cơ sở chức năng thiết lập lại mật khẩu.Thông thường khi thiết lập lại mật khẩu được yêu cầu, người sử dụng sẽ được gửi một liên kết để đăng ký địa chỉ thư điện tử của họ.. Sau khi nhấp vào liên kết là, WordPress sẽ thay mật khẩu cũ bằng mật khẩu mới được tạo ra và được gửi qua email.
Các chức năng thiết lập lại mật khẩu trong wp-login.php có thể được lạm dụng để bỏ qua bước đầu tiên và sau đó đặt lại mật khẩu: admin bằng cách gửi một mảng vào $key biến. Điều này có thể được thực hiện từ xa thông qua bất kỳ trình duyệt web và không có xác nhận của các thiết lập lại mật khẩu sẽ được gửi đến các admin.đầu tiên được báo cáo rằng những lỗi có thể được sử dụng để “compromise” các tài khoản quản trị. Các nhà phát triển đã được thông báo về vấn đề này và đã sửa chữa các vấn đề trong việc phát triển một phiên bản phần mềm viết blog, trong đó họ không bị ngăn chặn arrays qua trong $key biến.
Phương thức tấn công
Lỗi này ảnh hưởng toàn bộ các phiên bản WordPress/Wordpress MU thấp hơn 2.8.4. Việc khai thác có thể được thực hiện bằng cách nhập vào trình duyệt đường dẫn trên trình duyệt tại một blog WordPress phiên bản thấp hơn 2.8.4:
http://www.domain.com/wp-login.php?action=rp&key[]=
Giải pháp khắc phục
Phương pháp đơn giản nhất là nâng cấp lên phiên bản 2.8.4,
http://wordpress.org/development/2009/08/2-8-4-security-release/
Nếu trường hợp bạn bị chiếm quyền quản trị thì nên “Thiết lập lại mật khẩu khẩn cấp” theo hướng dẫn trên:
http://codex.wordpress.org/Resetting_Your_Password#Using_the_Emergency_Password_Reset_Script
sau đó Resetting lại Password:
http://codex.wordpress.org/Resetting_Your_Password
Hãy nâng cấp ngay hôm nay nhé!