Wp-admin/admin-ajax php trả về 0 khai thác
Gần đây, nhóm Wordfence Threat Intelligence đã xác định được nhiều lỗ hổng nghiêm trọng trong plugin Total Donations thương mại dành cho WordPress. Các lỗ hổng này, có trong tất cả các phiên bản plugin đã biết cho đến và bao gồm 2. 0. 5, đang bị khai thác bởi các tác nhân độc hại để có quyền truy cập quản trị vào các trang web WordPress bị ảnh hưởng. Chúng tôi đã dành riêng CVE-2019-6703 để theo dõi và tham chiếu chung các lỗ hổng này Show Chúng tôi khuyên chủ sở hữu trang web sử dụng Total Donations nên xóa–chứ không chỉ hủy kích hoạt–plugin dễ bị tấn công càng sớm càng tốt để bảo mật trang web của họ. Bài viết sau đây trình bày chi tiết các sự cố hiện có trong Tổng số tiền quyên góp, cũng như các cuộc tấn công đang hoạt động nhằm vào plugin. Chúng tôi cũng sẽ xem xét quy trình tiết lộ của chúng tôi và các bước chúng tôi đã thực hiện trong nỗ lực liên hệ với nhà phát triển plugin để đạt được giải pháp Nhật ký truy cập tò mòNhư trường hợp của nhiều cuộc điều tra, phát hiện này được hỗ trợ trực tiếp bởi sai lầm của kẻ tấn công. Trong quá trình khắc phục một trang web bị xâm nhập, một nhà phân tích đã xác định một loạt hành động AJAX đáng ngờ trong nhật ký truy cập của trang web (dữ liệu bổ sung đã bị xóa để làm rõ) POST /wp-admin/admin-ajax.php?action=migla_getme POST /wp-admin/admin-ajax.php?action=migla_getme POST /wp-admin/admin-ajax.php?action=miglaA_update_me POST /wp-admin/admin-ajax.php?action=miglaA_update_me GET /wp-login.php?action=register Tìm kiếm cơ sở mã của trang web để tìm các chuỗi add_action("wp_ajax_migla_getme", "migla_getme"); add_action("wp_ajax_nopriv_migla_getme", "migla_getme"); function migla_getme(){ $r = get_option($_POST['key']); echo $r; die(); }6 và add_action("wp_ajax_migla_getme", "migla_getme"); add_action("wp_ajax_nopriv_migla_getme", "migla_getme"); function migla_getme(){ $r = get_option($_POST['key']); echo $r; die(); }0 đã phát hiện ra plugin Total Donations đã cài đặt và chúng tôi đã nhanh chóng xác định các lỗ hổng bị khai thác cũng như quy trình làm việc của kẻ tấn công Sai lầm của kẻ tấn công là sử dụng add_action("wp_ajax_migla_getme", "migla_getme"); add_action("wp_ajax_nopriv_migla_getme", "migla_getme"); function migla_getme(){ $r = get_option($_POST['key']); echo $r; die(); }1 trong chuỗi truy vấn của các yêu cầu này. API AJAX của WordPress xử lý add_action("wp_ajax_migla_getme", "migla_getme"); add_action("wp_ajax_nopriv_migla_getme", "migla_getme"); function migla_getme(){ $r = get_option($_POST['key']); echo $r; die(); }2 và add_action("wp_ajax_migla_getme", "migla_getme"); add_action("wp_ajax_nopriv_migla_getme", "migla_getme"); function migla_getme(){ $r = get_option($_POST['key']); echo $r; die(); }3 như nhau, vì vậy nếu add_action("wp_ajax_migla_getme", "migla_getme"); add_action("wp_ajax_nopriv_migla_getme", "migla_getme"); function migla_getme(){ $r = get_option($_POST['key']); echo $r; die(); }4 được chuyển vào phần POST của yêu cầu thay vì chuỗi truy vấn, thì hoạt động đó sẽ gần như không rõ ràngNhiều hành động AJAX dễ bị tổn thương Total Donations đăng ký tổng cộng 88 hành động AJAX duy nhất vào WordPress, mỗi hành động trong số đó có thể được truy cập bởi người dùng chưa được xác thực bằng cách truy vấn điểm cuối add_action("wp_ajax_migla_getme", "migla_getme"); add_action("wp_ajax_nopriv_migla_getme", "migla_getme"); function migla_getme(){ $r = get_option($_POST['key']); echo $r; die(); }5 điển hình. Chúng tôi đã xác định rằng 49 trong số 88 hành động này có thể bị kẻ xấu khai thác để truy cập dữ liệu nhạy cảm, thực hiện các thay đổi trái phép đối với nội dung và cấu hình của trang web hoặc chiếm toàn bộ trang web dễ bị tổn thương Một số vấn đề đáng chú ý hơn như sau Cập nhật tùy chọn tùy ý dẫn đến tiếp quản trang webCác lỗ hổng rõ ràng nhất trong Tổng số tiền quyên góp cho phép người dùng không được xác thực đọc và cập nhật các tùy chọn WordPress tùy ý và đây là nơi chúng tôi đã xác định hoạt động khai thác tích cực trong tự nhiên add_action("wp_ajax_migla_getme", "migla_getme"); add_action("wp_ajax_nopriv_migla_getme", "migla_getme"); function migla_getme(){ $r = get_option($_POST['key']); echo $r; die(); } Hàm add_action("wp_ajax_migla_getme", "migla_getme"); add_action("wp_ajax_nopriv_migla_getme", "migla_getme"); function migla_getme(){ $r = get_option($_POST['key']); echo $r; die(); }6 (hiển thị ở trên) và add_action("wp_ajax_migla_getme", "migla_getme"); add_action("wp_ajax_nopriv_migla_getme", "migla_getme"); function migla_getme(){ $r = get_option($_POST['key']); echo $r; die(); }7 đều cho phép kẻ tấn công không có đặc quyền đọc giá trị của bất kỳ tùy chọn WordPress nào add_action("wp_ajax_nopriv_miglaA_update_me", "miglaA_update_me"); add_action("wp_ajax_miglaA_update_me", "miglaA_update_me"); function miglaA_update_me() { $key = $_POST['key']; $value = $_POST['value']; update_option( $key , $value); die(); } add_action("wp_ajax_migla_getme", "migla_getme"); add_action("wp_ajax_nopriv_migla_getme", "migla_getme"); function migla_getme(){ $r = get_option($_POST['key']); echo $r; die(); }0 (hiển thị ở trên), add_action("wp_ajax_migla_getme", "migla_getme"); add_action("wp_ajax_nopriv_migla_getme", "migla_getme"); function migla_getme(){ $r = get_option($_POST['key']); echo $r; die(); }9 và add_action("wp_ajax_nopriv_miglaA_update_me", "miglaA_update_me"); add_action("wp_ajax_miglaA_update_me", "miglaA_update_me"); function miglaA_update_me() { $key = $_POST['key']; $value = $_POST['value']; update_option( $key , $value); die(); }0 (thực ra giống hệt với add_action("wp_ajax_migla_getme", "migla_getme"); add_action("wp_ajax_nopriv_migla_getme", "migla_getme"); function migla_getme(){ $r = get_option($_POST['key']); echo $r; die(); }0) đều có thể được sử dụng để sửa đổi giá trị của các tùy chọn này Cùng nhau, có thể sử dụng add_action("wp_ajax_migla_getme", "migla_getme"); add_action("wp_ajax_nopriv_migla_getme", "migla_getme"); function migla_getme(){ $r = get_option($_POST['key']); echo $r; die(); }6 và add_action("wp_ajax_migla_getme", "migla_getme"); add_action("wp_ajax_nopriv_migla_getme", "migla_getme"); function migla_getme(){ $r = get_option($_POST['key']); echo $r; die(); }0 để bật tùy chọn add_action("wp_ajax_nopriv_miglaA_update_me", "miglaA_update_me"); add_action("wp_ajax_miglaA_update_me", "miglaA_update_me"); function miglaA_update_me() { $key = $_POST['key']; $value = $_POST['value']; update_option( $key , $value); die(); }4 và đặt add_action("wp_ajax_nopriv_miglaA_update_me", "miglaA_update_me"); add_action("wp_ajax_miglaA_update_me", "miglaA_update_me"); function miglaA_update_me() { $key = $_POST['key']; $value = $_POST['value']; update_option( $key , $value); die(); }5 thành “quản trị viên”. Với các cài đặt này, bất kỳ ai cũng có thể tự do đăng ký tài khoản với quyền quản trị trên trang web dễ bị tấn công, nơi họ có thể thực hiện các hoạt động độc hại khác mà không gặp sự cố Truy cập, sửa đổi và xóa các gói thanh toán Stripe định kỳTotal Donations có thể kết nối với Stripe với tư cách là bên xử lý thanh toán và có thể sử dụng API Plans của Stripe để lên lịch quyên góp định kỳ. Thật không may, không có chức năng AJAX nào được sử dụng để tương tác với các gói này có bất kỳ tính năng kiểm soát truy cập nào add_action("wp_ajax_migla_getme", "migla_getme"); add_action("wp_ajax_nopriv_migla_getme", "migla_getme"); function migla_getme(){ $r = get_option($_POST['key']); echo $r; die(); }7 Các chức năng này, bao gồm add_action("wp_ajax_nopriv_miglaA_update_me", "miglaA_update_me"); add_action("wp_ajax_miglaA_update_me", "miglaA_update_me"); function miglaA_update_me() { $key = $_POST['key']; $value = $_POST['value']; update_option( $key , $value); die(); }6 (hiển thị ở trên), add_action("wp_ajax_nopriv_miglaA_update_me", "miglaA_update_me"); add_action("wp_ajax_miglaA_update_me", "miglaA_update_me"); function miglaA_update_me() { $key = $_POST['key']; $value = $_POST['value']; update_option( $key , $value); die(); }7 và add_action("wp_ajax_nopriv_miglaA_update_me", "miglaA_update_me"); add_action("wp_ajax_miglaA_update_me", "miglaA_update_me"); function miglaA_update_me() { $key = $_POST['key']; $value = $_POST['value']; update_option( $key , $value); die(); }8, có thể bị lợi dụng để thực hiện các thay đổi trái phép đối với các khoản đóng góp định kỳ của trang web bị ảnh hưởng Ngoài ra, khi kết hợp với lỗ hổng cập nhật tùy chọn tùy ý có trong add_action("wp_ajax_migla_getme", "migla_getme"); add_action("wp_ajax_nopriv_migla_getme", "migla_getme"); function migla_getme(){ $r = get_option($_POST['key']); echo $r; die(); }0, kẻ tấn công có thể sửa đổi các tùy chọn lưu trữ khóa API của Stripe để định tuyến hoàn toàn các khoản đóng góp đến một tài khoản Stripe khác Truy cập danh sách gửi thư liên tục và MailchimpCác trang web đang tìm cách thực hiện các đợt quyên góp thường sẽ sử dụng danh sách gửi thư để thúc đẩy các chiến dịch này và Total Donations bao gồm chức năng có thể tích hợp các chiến dịch của riêng mình với danh sách gửi thư thông qua cả Liên hệ liên tục và Mailchimp add_action("wp_ajax_migla_getme", "migla_getme"); add_action("wp_ajax_nopriv_migla_getme", "migla_getme"); function migla_getme(){ $r = get_option($_POST['key']); echo $r; die(); }2 Giống như phần còn lại của các chức năng này, cả add_action("wp_ajax_migla_getme", "migla_getme"); add_action("wp_ajax_nopriv_migla_getme", "migla_getme"); function migla_getme(){ $r = get_option($_POST['key']); echo $r; die(); }70 và add_action("wp_ajax_migla_getme", "migla_getme"); add_action("wp_ajax_nopriv_migla_getme", "migla_getme"); function migla_getme(){ $r = get_option($_POST['key']); echo $r; die(); }71 (hiển thị ở trên) đều không thể thực hiện bất kỳ loại kiểm tra quyền nào trước khi trả về dữ liệu được liên kết với danh sách gửi thư của tài khoản được kết nối Các lỗ hổng khácMột số lỗ hổng khác tồn tại trong plugin, sẽ gây tranh cãi khi kẻ tấn công có thể có quyền truy cập quản trị và thực hiện bất kỳ hoạt động nào khác theo cách thủ công từ đó. Tuy nhiên, để minh họa phạm vi các vấn đề của Total Donation, đây là một vài trong số đó add_action("wp_ajax_migla_getme", "migla_getme"); add_action("wp_ajax_nopriv_migla_getme", "migla_getme"); function migla_getme(){ $r = get_option($_POST['key']); echo $r; die(); }5 add_action("wp_ajax_migla_getme", "migla_getme"); add_action("wp_ajax_nopriv_migla_getme", "migla_getme"); function migla_getme(){ $r = get_option($_POST['key']); echo $r; die(); }72, một chức năng nhằm tạo báo cáo quyên góp, có thể cho phép truy cập không được xác thực vào các bài đăng riêng tư và chưa xuất bản add_action("wp_ajax_migla_getme", "migla_getme"); add_action("wp_ajax_nopriv_migla_getme", "migla_getme"); function migla_getme(){ $r = get_option($_POST['key']); echo $r; die(); }7 Cả add_action("wp_ajax_migla_getme", "migla_getme"); add_action("wp_ajax_nopriv_migla_getme", "migla_getme"); function migla_getme(){ $r = get_option($_POST['key']); echo $r; die(); }73 và add_action("wp_ajax_migla_getme", "migla_getme"); add_action("wp_ajax_nopriv_migla_getme", "migla_getme"); function migla_getme(){ $r = get_option($_POST['key']); echo $r; die(); }74 đều gọi hàm nội bộ add_action("wp_ajax_migla_getme", "migla_getme"); add_action("wp_ajax_nopriv_migla_getme", "migla_getme"); function migla_getme(){ $r = get_option($_POST['key']); echo $r; die(); }75 (sic), có thể dễ bị SQL injection nếu tính năng add_action("wp_ajax_migla_getme", "migla_getme"); add_action("wp_ajax_nopriv_migla_getme", "migla_getme"); function migla_getme(){ $r = get_option($_POST['key']); echo $r; die(); }76 của WordPress bị bỏ qua. Không bỏ qua, nó vẫn có thể được sử dụng để thay đổi tiêu đề bài đăng tùy ý trên một trang web dễ bị tấn công add_action("wp_ajax_migla_getme", "migla_getme"); add_action("wp_ajax_nopriv_migla_getme", "migla_getme"); function migla_getme(){ $r = get_option($_POST['key']); echo $r; die(); }2 Nhiều hành động, bao gồm cả add_action("wp_ajax_migla_getme", "migla_getme"); add_action("wp_ajax_nopriv_migla_getme", "migla_getme"); function migla_getme(){ $r = get_option($_POST['key']); echo $r; die(); }77, có thể bị kẻ tấn công lạm dụng để gửi email kiểm tra đến một địa chỉ tùy ý. Điều này có thể được tự động hóa dưới dạng Từ chối dịch vụ (DoS) đối với email gửi đi, bằng cách kích hoạt giới hạn chuyển tiếp thư đi của máy chủ lưu trữ hoặc bằng cách khiến trang web nạn nhân xuất hiện trong danh sách đen spam Những lỗ hổng bảo mật này được coi là lỗ hổng zero-day do chúng bị khai thác tích cực và thiếu bản vá có sẵn. Vào ngày 16 tháng 1, chúng tôi đã làm việc để liên hệ với nhóm phát triển của Total Donations, Calmar Webmedia, để cùng nhau tạo ra một bản vá và bảo vệ những người dùng bị ảnh hưởng. Thật không may, quá trình thực hiện liên hệ này đã tiết lộ rằng một giải pháp có thể không bao giờ đến Trang web Tổng số tiền quyên góp chính thức hiện đang hiển thị trang giới thiệu Sắp ra mắt này và kể từ tháng 5 năm 2018 Hiện tại dường như không có bất kỳ phương tiện hợp pháp nào để có được phiên bản Total Donations mới nhất. Trang chủ của plugin hiện đang hiển thị trang Sắp ra mắt, có hình ảnh mô phỏng của một trang web mới. Đường dẫn tải lên của hình ảnh này cho thấy trang web đã ở trạng thái này kể từ tháng 5 năm 2018 Plugin trước đây được phân phối qua thị trường CodeCanyon của Envato. Total Donations không còn có sẵn để mua, nhưng trang đánh giá của nó vẫn có thể truy cập được Các đánh giá tiêu cực về sự vắng mặt của hỗ trợ nhà phát triển trong nhiều năm trở lại đây Vấn đề phổ biến nhất được trích dẫn trong các đánh giá này là thiếu hỗ trợ sản phẩm, với các khiếu nại kéo dài đến ba năm nêu chi tiết về việc các nhà phát triển plugin hoàn toàn không phản hồi. Là một nhà nghiên cứu bảo mật muốn liên hệ khẩn cấp về một mối đe dọa đang hoạt động, đây là một điềm xấu sớm Hồ sơ người bán được liên kết với Total Donations chứa thông tin và liên kết hỗ trợ đến Calmar Webmedia, một công ty phát triển có trụ sở tại Vancouver. Tuy nhiên, dự án này dường như cũng đã bị bỏ rơi. Trang hỗ trợ của công ty tải một màn hình trống, có thể là Màn hình trắng chết chóc và trang Yêu cầu báo giá chỉ hiển thị một mã ngắn không hoạt động Một yếu tố vẫn còn hoạt động trên trang web của Calmar Webmedia là hoạt ảnh JavaScript của một hình người que đang chạy từ một chiếc xe tăng, xuất hiện ở cuối trang của mỗi trang Cuối cùng, phương pháp chính thức duy nhất để liên hệ với Calmar Webmedia là một biểu mẫu liên hệ có sẵn ở cuối trang chủ của công ty. Vào ngày 16 tháng 1, chúng tôi đã gửi yêu cầu liên hệ thông qua biểu mẫu này và chưa nhận được bất kỳ xác nhận nào từ Calmar Webmedia Do không có bất kỳ phản hồi nào của nhà phát triển, việc từ bỏ plugin Total Donations rõ ràng và các cuộc tấn công tích cực vào các trang web dễ bị tổn thương, theo chính sách tiết lộ đã công bố của chúng tôi, chúng tôi đã tiết lộ thông tin này như một phương tiện để cộng đồng nhận thức được mối đe dọa Xóa plugin, đừng chỉ hủy kích hoạt nóNhư chúng tôi đã đề xuất trước đó trong bài đăng này, để bảo mật hoàn toàn một trang web bị ảnh hưởng, plugin Tổng số tiền quyên góp phải bị xóa hoàn toàn, không chỉ bị vô hiệu hóa. Điều này là do một điểm cuối AJAX thay thế được các nhà phát triển tích hợp vào Total Donations add_action("wp_ajax_migla_getme", "migla_getme"); add_action("wp_ajax_nopriv_migla_getme", "migla_getme"); function migla_getme(){ $r = get_option($_POST['key']); echo $r; die(); }4 Tập lệnh, add_action("wp_ajax_migla_getme", "migla_getme"); add_action("wp_ajax_nopriv_migla_getme", "migla_getme"); function migla_getme(){ $r = get_option($_POST['key']); echo $r; die(); }78, tải môi trường WordPress của trang web, sau đó đăng ký và thực thi bất kỳ hành động AJAX nào được thông qua, ngay cả khi Tổng số tiền quyên góp bị hủy kích hoạt. Điều này cũng có thể được sử dụng để gọi bất kỳ chức năng tùy ý nào, bất kể nó có được liên kết với plugin Total Donations hay không, tự nó gây ra các rủi ro bảo mật bổ sungBước tiếp theo Chúng tôi sẽ tiếp tục theo dõi hoạt động độc hại liên quan đến CVE-2019-6703 trong tương lai và sẽ báo cáo về bất kỳ thay đổi đáng chú ý nào trong hoạt động này Chúng tôi đã phát hành quy tắc tường lửa để bảo vệ các trang web sử dụng Wordfence WAF khỏi các lỗ hổng này, mà những người đăng ký Premium của chúng tôi đã nhận được. Các trang web được bảo vệ bởi phiên bản miễn phí sẽ nhận được nó sau độ trễ tiêu chuẩn của chúng tôi là ba mươi ngày. Do mức độ nghiêm trọng của các lỗ hổng, chúng tôi thực sự khuyên mọi người, kể cả khách hàng Cao cấp của chúng tôi, hãy xóa plugin khỏi trang web của họ và tìm kiếm một giải pháp thay thế Vui lòng cân nhắc chia sẻ tiết lộ này để nâng cao nhận thức về các mối đe dọa này và nếu ai đó bạn biết sử dụng plugin trên một trong các trang web của họ, hãy cảnh báo họ ngay lập tức Đối với bất kỳ câu hỏi nào liên quan đến quyết định tiết lộ những lỗ hổng chưa được vá này của chúng tôi, vui lòng tham khảo Chính sách tiết lộ lỗ hổng bảo mật của chúng tôi Tín dụng. Dữ liệu tấn công ban đầu được phát hiện bởi Nhà phân tích bảo mật Nate Smith. Đánh giá lỗ hổng và nghiên cứu nhà cung cấp được thực hiện bởi Nhà phân tích mối đe dọa Mikey Veenstra, với đánh giá bổ sung của Matt Rusnak và Ramuel Gall. Do Dan Moen và Mark Maunder biên tập |