Vài ngày gần đây mình gặp khá nhiều khách hàng sử dụng WordPress và có sử dụng plugin ThemeGrill Demo Importer, hoặc theme của ThemeGrill rồi “đột nhiên” mất toàn bộ Cơ sở dữ liệu và không hề hay biết. Ngay sau đó webarxsecurity đã có đưa tin về vấn đề nghiêm trọng này.
Trong các phiên bản 1.3.4 trở lên và các phiên bản 1.6.1 trở xuống, có một lỗ hổng cho phép bất kỳ người dùng không cần xác thực có thể xóa toàn bộ cơ sở dữ liệu về trạng thái mặc định sau đó họ sẽ tự động đăng nhập với tư cách quản trị viên.
Điều kiện tiên quyết là phải có một chủ đề được cài đặt và kích hoạt được xuất bản bởi ThemeGrill. Để được đăng nhập tự động với tư cách quản trị viên, phải có người dùng có tên là admin admin trong cơ sở dữ liệu. Bất kể điều kiện này, cơ sở dữ liệu vẫn sẽ bị xóa về trạng thái mặc định.
Dựa trên lịch sử cam kết của SVN, vấn đề này đã tồn tại trong mã khoảng 3 năm, kể từ phiên bản 1.3.4.
Khi Phát hiện plugin mà một chủ đề ThemeGrill được cài đặt và kích hoạt, nó tải các tập tin /includes/class-demo-importer.php mà móc reset_wizard_actions vào admin_init trên dòng 44.
admin_init chạy không chỉ trong môi trường quản trị mà còn gọi đến /wp-admin/admin-ajax.php không yêu cầu người dùng phải được xác thực.
Hàm functions reset_wizard_ilities trông giống như sau:
public function reset_wizard_actions() {
global $wpdb, $current_user;
if ( ! empty( $_GET['do_reset_wordpress'] ) ) {
///
if ( 'admin' != $current_user->user_login ) {
$user = get_user_by( 'login', 'admin' );
}
if ( empty( $user->user_level ) || $user->user_level < 10 ) {
$user = $current_user;
}
// Drop tables.
$drop_tables = $wpdb->get_col( sprintf( "SHOW TABLES LIKE '%s%%'", str_replace( '_', '\_', $wpdb->prefix ) ) );
foreach ( $drop_tables as $table ) {
$wpdb->query( "DROP TABLE IF EXISTS $table" );
}
// Installs the site.
$result = wp_install( $blogname, $user->user_login, $user->user_email, $blog_public );
// Updates the user password with a old one.
$wpdb->update(
$wpdb->users,
array(
'user_pass' => $user->user_pass,
'user_activation_key' => '',
),
array( 'ID' => $result['user_id'] )
);
// Set up the Password change nag.
$default_password_nag = get_user_option( 'default_password_nag', $result['user_id'] );
if ( $default_password_nag ) {
update_user_option( $result['user_id'], 'default_password_nag', false, true );
}
///
// Update the cookies.
wp_clear_auth_cookie();
wp_set_auth_cookie( $result['user_id'] );
// Redirect to demo importer page to display reset success notice.
wp_safe_redirect( admin_url( 'themes.php?page=demo-importer&browse=all&reset=true' ) );
exit();
}
}
Ở đây chúng tôi thấy rằng không có kiểm tra xác thực và chỉ có tham số do_reset_wordpress cần phải có trong URL trên bất kỳ trang quản trị nào trên nền tảng WordPress của WordPress, bao gồm /wp-admin/admin-ajax.php.
Nếu chúng tôi hiện chưa đăng nhập, nó sẽ truy xuất đối tượng người dùng của quản trị viên người dùng từ WordPress và sau đó loại bỏ tất cả các bảng WordPress bắt đầu bằng tiền tố cơ sở dữ liệu WordPress đã xác định.
Khi tất cả các bảng đã bị hủy, nó sẽ điền vào cơ sở dữ liệu với các cài đặt và dữ liệu mặc định, sau đó nó sẽ đặt mật khẩu của người dùng admin admin thành mật khẩu đã biết trước đó.
Bản vá bạn có thể tìm thấy ở đây và đã được kiểm tra thêm current_user_can (‘Manage_options’) vào phương thức reset_wizard_ilities.
Đây là một lỗ hổng nghiêm trọng do đó bạn đang sử dụng sản phẩm nào của ThemeGrill thì cập nhật ngay hoặc sao lưu lại toàn bộ dữ liệu trước nhé.
Danh sách các địa chỉ IP hiện đang khai thác lỗ hổng này với 100 cuộc tấn công trở lên bị chặn.
149.202.75.164
192.169.159.241
209.251.53.192
107.180.225.158
62.76.187.179
185.45.72.159
31.207.33.10
198.12.156.154
163.44.207.54
142.44.151.107
68.183.204.202
51.68.124.88
188.166.16.17
168.63.19.216
46.105.92.10
103.221.222.179
104,238. 99.130
175.139.199.53
68.183.76.157
45.32.104.33
2001: 41d0: d: 34a4 ::
46.101.174.128
2607: 5300: 61: bd9 :: 107
159,65,20.204
84.238.108.177
188.166.176.184
165.227.48.147
2a03: b0c0: 2: d0 :: 11f0: 6001
2404: f080: 1101: 316: 163: 44: 207: 54
50.63.162.9
46.105.99.163
2001: e68 21e: 67ff: fe8c: 191f
Nguồn: https://www.webarxsecurity.com/critical-issue-in-themegrill-demo-importer/